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