在每次执行sql句之前,都发行了以下2个语句:
1.alter system flush buffer_cache;
2.alter system flush shared_pool;
被删除的表里有600万数据,每次执行删除sql句都被删除100万。
为什么每次发行“alter system flush buffer_cache”所消耗的时间越来越长,由 开始的1分钟变成了10分钟?
并且删除sql句的执行时间差别也很大, 第一次1200秒,第二次1900秒,第三次1600秒?
4 个解决方案
#1
.alter system flush buffer_cache
.alter system flush shared_pool
这两语句的作用是清除缓冲区和共享池。
为什么要执行这2个语句,对删除的测试有什么影响吗?
当你删除了100万,这100万会进入缓冲区,所以清理的时间会变长,这很正常。
.alter system flush shared_pool
这两语句的作用是清除缓冲区和共享池。
为什么要执行这2个语句,对删除的测试有什么影响吗?
当你删除了100万,这100万会进入缓冲区,所以清理的时间会变长,这很正常。
#2
每次执行删除前都清除缓存,这样的话,每一次执行删除时的内存环境都一样,所以这样做了。
如果我连续执行2次清除缓冲,中间不删除数据,可第2次的时间比第一次还长,实际上感觉第一次清除缓冲根本没有效果
#3
执行这个语句的结果是将缓存在library cache和data dictionarycache 中的sql,pl/sql和数据字典定义都从共享池中清除了,在负载很重的生产库里执行flush shared_pool无异于自杀...慎用!
#4
你好,请问,你说的“执行flush shared_pool无异于自杀”,是指对测试性能有影响,还是对整个数据库会产生影响,谢谢
#1
.alter system flush buffer_cache
.alter system flush shared_pool
这两语句的作用是清除缓冲区和共享池。
为什么要执行这2个语句,对删除的测试有什么影响吗?
当你删除了100万,这100万会进入缓冲区,所以清理的时间会变长,这很正常。
.alter system flush shared_pool
这两语句的作用是清除缓冲区和共享池。
为什么要执行这2个语句,对删除的测试有什么影响吗?
当你删除了100万,这100万会进入缓冲区,所以清理的时间会变长,这很正常。
#2
每次执行删除前都清除缓存,这样的话,每一次执行删除时的内存环境都一样,所以这样做了。
如果我连续执行2次清除缓冲,中间不删除数据,可第2次的时间比第一次还长,实际上感觉第一次清除缓冲根本没有效果
#3
执行这个语句的结果是将缓存在library cache和data dictionarycache 中的sql,pl/sql和数据字典定义都从共享池中清除了,在负载很重的生产库里执行flush shared_pool无异于自杀...慎用!
#4
你好,请问,你说的“执行flush shared_pool无异于自杀”,是指对测试性能有影响,还是对整个数据库会产生影响,谢谢