我正在优化我的Oracle数据库。 我在将并发10个请求写入表并将并发10个请求写入10个表
之间混淆了IO性能如果我有10个类型的数据可以存储在1个表中 - >哪种方式可以在1或10个表之间插入最佳性能插入数据
有人知道吗?
答案 0 :(得分:2)
性能调优是一个很大的主题,问题实际上无法通过开始时那么少的信息来回答。但我会尝试提供一些基本的指示。
如果我做对了,你主要关心的是将插入性能放到当前的单个表中。
第一步应该是找出实际限制你的表现的内容。让我们考虑一些场景:
磁盘I / O:磁盘速度很慢。因此,获得最快的磁盘。这可能意味着SSD。将它们放入一个针对性能进行调整的RAID中,据我所知,“条带化”是关键词。当然SSD会失败,因为你的HD这样做你想要为此做好计划。当HD没有完全填满时(从未真正检查过),HD也会更快。分区表也可能有所帮助(见下文)。但是大多数时候我们可以减少I / O负载,这比更快更快的硬件更有效...
对锁(例如主键)的争用。 分区表和索引可能是一种解决方案。分区表在逻辑上是一个表(您可以选择它并像普通表一样写入它),但在内部数据分布在多个表中。分区索引类似但是索引。这可能会有所帮助,因为在添加新值时,唯一键的索引会被锁定,因此两个会话不能插入相同的值。如果值在n个索引之间传播,则可能会减少对此类锁的争用。分区也可以分布在不同的表空间/磁盘上,这样您的物理等待时间就会缩短。
时间非常紧张:如果您对表有约束,他们需要时间来完成工作。如果进行批量插入,则应考虑延迟约束,它们仅在提交时间而不是每次插入时检查。如果您对应用程序非常小心,您甚至可以禁用它们,然后在不检查它们的情况下启用它们。这很快,但当然你必须非常确定约束确实存在。当然,您应该确保您的约束具有执行所需的所有索引。
谈论批量插入。如果您正在执行这些操作,您可能需要查看直接加载:http://docs.oracle.com/cd/A58617_01/server.804/a58227/ch_dlins.htm(我认为这是Oracle 8版本,我确定某处有更新的文档)
包装起来。如果不知道您的性能问题到底在哪里,就无法告诉如何修复它。因此,找出问题所在,然后回答一个更精确的问题。