Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle性能问题_Oracle - Fatal编程技术网

Oracle性能问题

Oracle性能问题,oracle,Oracle,我想知道,如果您有一个包含2400万条记录的表,那么这对性能有何影响(每次插入/更新/删除)需要花费更长的时间 这是我们的审计表,因此,当我们在其他表中进行更改时,我们会登录到审计报告,执行这些更新是否也需要更长的时间?插入/更新/删除的速度与许多因素有关。例如,表上有多少个索引?如果一个表有许多索引,而您插入/更新了该表,则可能会导致操作花费更长的时间。数据是如何存储在数据库的物理结构中的(例如,如果使用Oracle,则存储在表空间中)?索引和数据是否位于不同的磁盘上,这有助于加快I/O速度

我想知道,如果您有一个包含2400万条记录的表,那么这对性能有何影响(每次插入/更新/删除)需要花费更长的时间


这是我们的审计表,因此,当我们在其他表中进行更改时,我们会登录到审计报告,执行这些更新是否也需要更长的时间?

插入/更新/删除的速度与许多因素有关。例如,表上有多少个索引?如果一个表有许多索引,而您插入/更新了该表,则可能会导致操作花费更长的时间。数据是如何存储在数据库的物理结构中的(例如,如果使用Oracle,则存储在表空间中)?索引和数据是否位于不同的磁盘上,这有助于加快I/O速度

显然,如果您正在写审计记录,那么它可能会影响性能。但在一个经过良好调优的数据库中,它的速度不应该慢到足以让您注意到的程度

我用于审计表的方法是在主表上使用触发器,这些触发器写出审计记录。但是从性能的角度来看,它实际上取决于许多因素,比如主表更新的运行速度

如果您正在使用Oracle,我建议您查看其中一个慢速更新的解释计划输出(其他数据库通常也有这样的工具,google可以在此提供帮助)。然后,您可以看到优化器正在生成什么计划,并诊断问题可能在哪里。您还可以找一位DBA来帮助您找出导致速度缓慢的原因。

正确的答案是“这取决于情况”,当然

但据我所知,您关心的是当审计表增长时,审计表如何影响查询(在其他表上)的性能

您可能只在审计表中插入。插入时间不取决于表中已有的数据量。所以,不管审计表有多大,它都应该对性能产生同等的影响(考虑到数据库设计并不是非常糟糕)


当然,在审计表上选择或删除它会在表增长时花费更长的时间。

如果我把你的问题理解为“大型Oracle表是否需要更长的时间来进行IUD操作”,一般来说答案是否定的。我认为对插入/更新/删除操作影响最大的是该表上的索引(索引越多=这些操作的性能越慢)


但是,如果您的审核逻辑需要以某种不使用主键或唯一键的方式在审核表中查找现有行的过程逻辑,那么大型表将对性能产生影响。

我怀疑性能与争用的关系比表大小的关系更大。插入通常发生在表。插入到该表中的会话在向块写入记录时必须对该块进行闩锁。在此期间,其他会话可能必须等待该块(您可能会在其中看到忙缓冲区等待事件)

但实际上,您需要查看有问题的SQL,看看它们在等待什么,以及它们是否对不可接受的性能水平做出了重大贡献。然后根据导致问题的特定等待事件确定行动方案


查看Cary Milsap关于性能调整的任何内容

对于插入、删除和更新操作,表大小的影响是不同的

Insert语句不受表大小的影响很大,因为当我们将数据插入表中时,它将添加到下一个可用的数据块中。如果该特定表上有索引,则Oracle必须在将数据插入该块之前搜索特定的数据块,这需要时间进行搜索操作


Delete和Update语句受表大小的影响,因为数据越多,搜索特定行以删除和更新操作所需的时间越长

为什么?您的意思是{Delete all from Table(with 10.000)}将花费与{Delete all from Table(with 10.000.000)}>相同的时间“一般来说,答案是否定的”<你完全错了!