首页 > 数据库DBA > oracle知识 > oracle调优 >
Oracle 清除缓存调试SQL性能
缓存的作用:
SQL第一次执行的时候,往往比以后几次的执行时间长。这是因为Oracle缓存的作用,第一次执行以后放入缓存,以后执行的速度会很快。
但是这样就没有办法准确的反应SQL优化的效果。
生产环境上慎用,有可能执行后,服务器短时间内的cpu,io会遇到瓶颈。
执行后,将使library cache和data dictionary cache以前保存的sql执行计划全部清空,但不会清空共享sql区或者共享pl/sql区里面缓存的最近被执行的条目。
刷新共享池可以帮助合并碎片(small chunks),释放少数共享池资源,暂时解决shared_pool中的碎片问题。
但是,这种做法通常是不被推荐的,原因如下:
·Flush Shared Pool会导致当前未使用的cursor被清除出共享池,如果这些SQL随后需要执行,那么数据库将经历大量的硬解析,系统将会经历严重的CPU争用,数据库将会产生激烈的Latch竞争。
·如果应用没有使用绑定变量,大量类似SQL不停执行,那么Flush Shared Pool可能只能带来短暂的改善,数据库很快就会回到原来的状态。
·如果Shared Pool很大,并且系统非常繁忙,刷新Shared Pool可能会导致系统挂起,对于类似系统尽量在系统空闲时进行。
如何清除缓存:
--清空共享池
alter system flush shared_pool;
--系统全局区域 (SGA) 中的缓冲区高速缓存中清除所有数据
alter system flush buffer_cache
--通过连接池进行通信,对于连接池的这些信息被保留在SGA中,这条语句便是把这些连接信息清空(生产环境慎用)
ALTER SYSTEM FLUSH GLOBAL CONTEXT;
下图是对连接池的说明:
对于多层架构的,如上图:应用服务器和数据块服务器通过连接池进行通信,对于连接池的这些信息被保留在SGA中,这条语句便是把这些连接信息清空。
下图是11g
下图是12c
清除缓存的影响
刷新数据库缓存后短时间内会影响数据库运行效率
官方对11g相关参数的介绍:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_2013.htm#i2053602
官方对12c相关参数的介绍:
https://docs.oracle.com/database/121/SQLRF/statements_2017.htm#SQLRF00902