易网时代-编程资源站
Welcome
微信登录
首页
/
数据库
/
MySQL
/
Oracle 基础管理:alter system flush “oracle的缓存”
下面3条语句,旨在刷新Oracle的缓存。这里总结一下。
1)alter system flush global context下图说明:对于多层架构的,如上图:应用服务器和数据块服务器通过连接池进行通信,对于连接池的这些信息被保留在SGA中,这条语句便是把这些连接信息清空。2)alter system flush shared_pool将使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可能会导致系统挂起,对于类似系统尽量在系统空闲时进行。下面测试一下,刷新对共享池碎片的影响:
SQL>
select
count
(*)
from
x$ksmsp;
COUNT
(*)
----------
41637
SQL>
alter
system flush shared_pool;
系统已更改。
SQL>
select
count
(*)
from
x$ksmsp;
COUNT
(*)
----------
9276
3)alter system flush buffer_cache 为了最小化cache对测试实验的影响,需要手动刷新buffer cache,以促使oracle重新执行物理访问(统计信息里面的:physical reads)。 测试环境
SQL>
select
count
(*)
from
tt;
COUNT
(*)
----------
1614112
SQL> show
user
;
USER
为
"HR"
SQL>
exec
dbms_stats.gather_table_stats(
"HR"
,
"TT"
);
PL/SQL 过程已成功完成。
SQL>
select
blocks,empty_blocks
from
dba_tables
where
table_name=
"TT"
and
owner=
"HR"
;
BLOCKS EMPTY_BLOCKS
---------- ------------
22357 0
表TT共有22357个block
借助x$bh,观察state=0的情况
SQL>
select
count
(*)
from
x$bh
where
state=0;
COUNT
(*)
----------
0
SQL>
alter
system flush buffer_cache;
系统已更改。
SQL>
select
count
(*)
from
x$bh
where
state=0;
COUNT
(*)
----------
40440
state=0表示buffer状态是free,flush cache后,所有的buffer都被标志为free 观察flush cache后,对查询的影响:
SQL>
set
autot
on
statistics
SQL>
select
count
(*)
from
tt;
COUNT
(*)
----------
1614112
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
22288 consistent gets
22277 physical reads
0 redo
size
416 bytes sent via SQL*Net
to
client
385 bytes received via SQL*Net
from
client
2 SQL*Net roundtrips
to
/
from
client
0 sorts (memory)
0 sorts (disk)
1
rows
processed
SQL> /
COUNT
(*)
----------
1614112
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
22288 consistent gets
0 physical reads
0 redo
size
416 bytes sent via SQL*Net
to
client
385 bytes received via SQL*Net
from
client
2 SQL*Net roundtrips
to
/
from
client
0 sorts (memory)
0 sorts (disk)
1
rows
processed
SQL>
alter
system flush buffer_cache;
系统已更改。
SQL>
select
count
(*)
from
tt;
COUNT
(*)
----------
1614112
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
22288 consistent gets
22277 physical reads
0 redo
size
416 bytes sent via SQL*Net
to
client
385 bytes received via SQL*Net
from
client
2 SQL*Net roundtrips
to
/
from
client
0 sorts (memory)
0 sorts (disk)
1
rows
processed
MySQL 数据库查询随机数量条目的效率问题及解决办法理解redo(2)redo内容:change vector和redo entries相关资讯 Oracle基础
Oracle基础介绍及常用相关SQL*PLUS (03月11日)
Oracle 角色的两个特性和误区 (09/04/2012 05:56:16)
Oracle rac11.2.0.3.0的vip在重启 (09/02/2012 10:00:39)
Oracle中删除用户遇到的问题 (09/08/2012 20:01:42)
IMP-00008: unrecognized (09/02/2012 10:03:25)
在Oracle数据库上设置限制ip地址访 (09/02/2012 09:59:55)
本文评论 查看全部评论 (0)
表情: 姓名:
匿名
字数
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图