English 中文(简体)
删除时间太长的问题
原标题:
  • 时间:2009-08-25 09:45:35
  •  标签:

我要问:

DELETE from tablename where colname = value;

which takes awfully long time to execute. What could be the reason? I have an index on colname.

最佳回答

您的询问需要很长的时间,原因可以有若干解释:

  1. You could be blocked by another session (most likely). Before you delete you should make sure noone else is locking the rows, eg: issue SELECT NULL FROM tablename WHERE colname=:value FOR UPDATE NOWAIT,
  2. There could be a ON DELETE TRIGGER that does additional work,
  3. Check for UNINDEXED REFERENCE CONSTRAINTS pointing to this table (there is a script from AskTom that will help you determine if such unindexed foreign keys exist).
问题回答

您的表格可能与多个表格有关,增长幅度很大。

这一指数有选择吗? 如果您的桌子有100万分,其价值达到1亿五千分之十,那么你的指数是无用的。 事实上,如果实际使用,则可能比没有使用更糟。 再说一遍,教育、科学和技术部就象一项“选举”声明:我们可以调整其准入道路。

此外,删除了许多空洞的表层,因此,如果该系统正在大量使用,你可能会受到争议。 在多用户系统中,另一场会议可能会在你想要删除的行文上设锁。

您是否曾担任过教育促进者? 您是否有外国关键制约因素?

<><>Edit>: 鉴于你所说的一切,尤其是有关一栏是你试图删除单一行文的主要关键所在,如果要花很长的时间,其他某些程序或使用者就会有锁。 页: 1 V$LOCK?

所以我会分享我的经验,说不定会有人受益。

问 题

delete from foo
where foo_id not in ( 
  select max(foo_id) from foo group by foo_bar_id, foo_qux_id
);

页: 1

我按照其他答复对外国钥匙的所有指数进行了核对。 这无助于。

<>Solution:

问题

delete from foo
where foo_id in ( 
  select foo_id from foo
  minus
  select max(foo_id) from foo group by foo_bar_id, foo_qux_id
);

I ve amended not in to in, and used minus to achieving original results.

现在,这些争.在0.04秘密执行。

如果我能帮助的话,介绍我的经验。

我也有同样的问题(长时间删除或更新时间),因此,我的冷静反应是寻找和杀死 queries的提问。 但是,我找到这些东西的正常情况就显示了这一点。 经过微薄的挖掘,我只找了一张锁定的桌子,并找到了一次不活跃的会议,这显然是积极阻止我试图改变的表格。 这里,我曾问(Oracle 12c)去找几场会议来杀我桌上的更新:

SELECT
   c.owner,
   c.object_name,
   c.object_type,
   b.sid,
   b.serial#,
   b.status,
   b.osuser,
   b.machine
FROM
   v$locked_object a ,
   v$session b,
   dba_objects c
WHERE
   b.sid = a.session_id
AND
   a.object_id = c.object_id;

接着是上述调查中的阴道和序列号:

ALTER SYSTEM KILL SESSION  SID, SERIAL#  to end those sessions and free the locks.

我没有大白,这可能是坏事,但为我工作。

Does your table holds more number of records ?
Is there some recursive programs(some nested loops etc..) running on the database server ?
Check network problems if database server is on different machines ?

甲骨文和我的谢克尔之间存在巨大差异:

甲骨质不是自动为外国钥匙设定指数,而是真菌。 然后,如果你有一张可以删除其指挥的母子表格,那么你就必须在儿童表格中就外国钥匙编制索引,否则,如果儿童表格中有许多行文,删除母桌上的指挥就会非常缓慢,因为它必须包含儿童表的所有记录per删除任何父母记录。

然后,当你想从Oracle数据库的括号中删除时,就会小心谨慎。





相关问题
热门标签