首页 > 数据库DBA > oracle知识 > oracle调优 >

Oracle 清除缓存调试SQL性能

作者: 初见博客 分类: oracle调优 发布时间: 2022-01-13 16:43

缓存的作用:
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;

下图是对连接池的说明:

37901793e7a6caeae6f0415fa94e58a1

对于多层架构的,如上图:应用服务器和数据块服务器通过连接池进行通信,对于连接池的这些信息被保留在SGA中,这条语句便是把这些连接信息清空。

下图是11g

alter_system

下图是12c

alter_system-1
清除缓存的影响
刷新数据库缓存后短时间内会影响数据库运行效率

官方对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

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注