oracle10g 在处理大数据量时如何保证查询速度
我碰到的问题是这样,比如我有一个表里有100W数据,我现在要删除90W,我的业务程序要求的实时性比较高,就是每条查询语句不能超过一秒钟,但是假如我正在删除这90W数据,导致数据库处理速度降低(不知为什么,系统内容和cpu使用率都不高,但是就是慢),这时候我的业务程序在进行查询、更新或者插入的时候就会非常慢,有时甚至需要几分钟。这种问题我该如何优化才能保证我的业务程序不受干扰。
我举删除90W数据只是一个例子,因为我有的业务程序也会大批量的插入或者删除数据,举这个例子比较直接。
分不多,但是只要能帮我解决问题,小弟倾家荡产也会持续加分。
------解决方案--------------------大量删除和更新必然影响其他更新和插入操作,可以看看性能AWR,看主要是磁盘IO问题呢,还是锁问题
对于查询的话,估计不会太慢,没有锁的阻塞问题,估计机器性能不太好造成的
------解决方案--------------------删除操作可以放到晚上执行,例如做一个凌晨执行的定时任务,用于删除数据。
------解决方案--------------------估计是删除时程序正在访问你要删除的数据,导致出现高一致读
你的表能做分区么? 想办法让要删除的数据在一个分区里面 这样一次truncate
很快
------解决方案--------------------删除操作分批执行,例如你要删除90w数据,可以一次删除5K,循环180次删除完成,这样会快很多,
一次性删除90W数据,需要维护巨大的redolog和undolog,容易出现瓶颈。可以试一下。
------解决方案--------------------支持这种说法。。。。。分批量来删除。
------解决方案--------------------估计是锁问题造成了,
你在删除数据时,把资源锁定了,其他会话要访问该资源时,只能等到删除会话把资源释放,
这样会话不能及时完成,会话越积越多,系统效率就慢了。把删除程序改成分批删除应该有一定的效果。
------解决方案--------------------增大UNDO段试试
使用DBMS_STATS进行块清除,以防止查询的时候进行块清除...
------解决方案--------------------请提供操作当时的快照和alter log信息