最近在oracle中在导入时总是出现死锁,没办法只能杀死掉这个然后从导
我的数据库有几十张表,而且有很多分区表,总的数量也挺大,大概五十多G,所以导出时都是并发德将每个分区单独导出,最后大概能有一千个dmp文件吧,然后并发导入,给我的感觉是导入的并发数低时不容易出现,并发数高时就容易出现死锁(一般24个CPU我就用24个并发),这个锁是概率性的,一般两三个并发时出现概率很小,但就要花很长时间
请问导入时出现死锁是什么原因,如何能避免死锁?
我的数据库有几十张表,而且有很多分区表,总的数量也挺大,大概五十多G,所以导出时都是并发德将每个分区单独导出,最后大概能有一千个dmp文件吧,然后并发导入,给我的感觉是导入的并发数低时不容易出现,并发数高时就容易出现死锁(一般24个CPU我就用24个并发),这个锁是概率性的,一般两三个并发时出现概率很小,但就要花很长时间
请问导入时出现死锁是什么原因,如何能避免死锁?
2、死锁的根本原因是主键或唯一索引在不同transition下产生重复,查该表的导入逻辑,看什么情况下会出现死锁。有个办法可以帮助查找重复数据,先把该表的主键和索引删除,倒入数据后重建,主键或者哪个索引数据发生重复的话,重建就会失败。然后具体寻找重复的数据。
*、你可以尝试让多等一段时间直到Oracle在某个session报错为止,从而确诊造成死锁的原因。
*、当发觉死锁现象时(通常我用TOAD监控session,如果有两个session以上不再有任何io的话,基本上是互相被锁了),检查v$lock,找出问题行。网上很多这方面的资料,比如
http://www.orafaq.com/node/854
http://www.psoug.org/reference/deadlocks.html
*、死锁可能并非由重复主键或索引引起,我曾经遇上过表存储参数不合理引起的死锁(多个记录抢同一个dbblock),但具体怎么解决的记不清了。这里有篇文章可以参考。
http://it.toolbox.com/blogs/confessions/how-to-use-oracle-25-understanding-deadlocks-17029有个建议,如果你的表空间是采用uniform size的话,建议用segment auto management模式重建,对于大表性能提高很非常明显的帮助,同时能避免很多由于存储参数不合适引起的问题。