数据库中其中的一个表删除数据的时候特别慢

表中一共只有2000多条数据,我的删除语句是delete from jx1114 where xnxqh='2011-2012-2'
这个删除只要删除80多条数据,但是却执行了将近3分钟的时间,这张表引用了其他一个表的主键作为外键。

 

删除表记录非常慢有好几个原因:


1.机器性能问题,cpu被其他进程占用。这种方式最好解决,在进程管理器中关掉几个进程,释放出cpu用于处理删除记录操作;


2.sql语句本身优化,使用exists或者not exists比用“=”来的快;


3.表的关联关系影响了删除的速度。如果目标表和其它表建立了关联关系过多也会造成处理效率下降问题。如A表的和B表建立外关联的话,而B表又是一张很大的表,删除A表的记录时oracle执行过程是先在A表中选中一条记录进入待删除区,然后进行关联关系分析的,就是对B表进行全表查询一遍。同理如果A表和其它表 也有关联的话相同的查询也会在其它表中执行查询,等所有关联表查询完成确定没有引用关系的话,A表中选中记录会被打一个可以删除的标记,然后执行A表下一条的查询工作。值得注意的是被标记为可删除标记的记录不是立刻被删除的,删除操作一直要等到A表符合删除记录全部被打成可删除标记,删除操作才会被执行。如果有一条没有被标记成可删除标识的话,oracle 数据库会根据你设置给出相应的处理。


4.表与表引用关系存储在系统表dba_constraints 中,要有dba权限才能够执行的。查询语句如下:注意要更换'TableName':
select owner,constraint_name,CONSTRAINT_TYPE,TABLE_NAME
from dba_constraints
where r_constraint_name in (select CONSTRAINT_NAME from dba_constraints where table_name='TableName');
如果这个还不能解决问题的话。还有更复杂的办法。


5.使用oralce自带10046 的trace。该方法使用方法需要谨慎的,随用随关的。启用当前session的跟踪:
SQL> alter session set sql_trace=true; -- 开启trace
Session altered.

此时的SQL操作将被跟踪:
SQL> select count(*) from dba_users;

COUNT(*)
----------
34
结束跟踪:
SQL> alter session set sql_trace=false; --关闭trace

Session altered.

### 回答1: 在 PostgreSQL 删除一个会变得特别是因为在删除过程需要重建索引以及更新其他依赖于该的对象。如果非常大,重建索引和更新其他对象的时间会变得非常长。如果不能删除,可能是因为有其他事务在占用的锁,需要等待其他事务结束。 ### 回答2: 在PostgreSQL删除一个特别卡,并且可能无法成功删除,可能存在以下几个原因: 1. 数据量过大:如果包含大量数据删除操作可能需要耗费大量的时间和系统资源。特别是如果存在索引、触发器或外键约束等,删除操作可能需要额外的时间来更新这些相关对象。因此,在删除时,可能会导致数据库响应变,甚至可能出现无法删除的情况。 2. 事务问题:如果删除操作处于一个长时间运行的事务,那么其他事务可能会被阻塞,并且在删除完成之前无法继续进行其他操作。这可能导致系统响应变,并且无法响应其他用户的请求。 3. 锁问题:删除一个时,可能需要对进行锁定,以防止其他事务对其进行操作。如果其他事务正在使用或锁定该的某些行,删除操作可能无法成功执行,而且可能会导致长时间的等待。此外,删除操作还需要获取与该相关的索引、触发器及外键约束等对象的锁。 4. 内部维护操作:在删除一个时,PostgreSQL也需要进行一些内部维护操作,例如清理磁盘空间、更新系统统计信息等。这些维护操作可能会导致删除操作变,并且在一些极端情况下,可能无法成功删除。 要解决这个问题,可以尝试以下方法: 1. 分批删除:将大分成多个较小的批次,每次删除一部分,并在每次删除之间允许一些时间来允许数据库回收资源。这样可以减少删除操作对系统的压力,提高删除的效率。 2. 优化删除操作:通过优化的索引、触发器和约束,以及使用适当的删除条件,可以加快删除操作的速度。 3. 使用并发删除:可以使用并发删除工具或方法,在不阻塞其他事务的情况下执行删除操作,以提高系统的响应能力。 4. 避免长时间事务:确保删除操作不会处于长时间运行的事务,最好分成多个较小的事务进行处理,以避免长时间阻塞其他操作。 需要注意的是,在执行删除操作之前,应备份重要的数据,以防止无法恢复的数据丢失。此外,如果删除操作仍然非常缓或无法成功执行,可能需要进一步检查和调整数据库的配置参数、硬件资源等方面的设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值