下面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
分享到:
相关推荐
kill system session(解决oracle死锁)
当我们用alter system kill session ‘sid,serial#’进行清除时,这些session的状态又变成了killed,这些就由Pmon进程来慢慢进行清除了,而你恰恰又是个急脾气。 3、 系统忽然慢了现来,你发现是某个session在做怪...
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; System altered. SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; System altered. SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; System altered. 启动数据库...
囊括了oracle所有权限管理的命令 oracle权限全集 alter any cluster 修改任意簇的权限 alter any index 修改任意索引的权限 alter any role 修改任意角色的权限 alter any sequence 修改任意序列的权限 alter ...
alter system set db_recovery_file_size=20G; SQL> shutown immediate SQL> conn / as sysdba SQL> startup mount SQL> alter database archivelog; 启动归档 SQL> alter database open; SQL> archive...
alter system set sec_case_sensitive_logon=false ; --Oracle11g中Exp空表的问题:禁用插入数据时才分配空间功能 show parameter deferred_segment_creation alter system set deferred_segment_creation=false; ...
oracle 的alter日志切割脚本,有需要的可自行改造
1:ALTER SYSTEM KILL SESSION 关于KILL SESSION Clause ,官方文档描述alter system kill session实际上不是真正的杀死会话,它只是将会话标记为终止。等待PMON进程来清除会话。 可以使用如下方式来快速回滚事物、...
与8i不同的是,原来都将初始化参数放到一个文本文件中,并且在数据库启动的时候读取,Oracle9i却可以通过ALTER DATABASE和ALTER SYSTEM命令复位全部的Oracle参数。对于需要停止和重新启动Oracle数据库来修改参数来说...
su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp" 累计备份的SH文件:exp_cumu.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=...
废话不多说 上语句: 查询锁表语句: select object_name,...alter system kill session 'sid,serial#'; 例如: alter system kill session '20,182'; 如果杀不掉可以加个 immediate 立即杀掉 试试; alter sys
设置 file_dir file_name 参数 导出文件内容如最后附所视 <br> 局限性 要设置utl_file_dir(alter system set utl_file_dir=) ,file_dir要包括在 文件生成在服务端 <br> 其实可以封装成过程,...
1、 启用快速恢复区域 将 oracle 数据库置于“安装模式”以启用快速恢复区域,以存储 rman 备份 ...SQL> alter system set db_recovery_file_dest=/opt/oracle/fast_recovery_area; SQL> startup force
碎片处理工具,处理碎片至使oracle数据库不能启动, 解决方法: 进入dos: 以DBA用户登录,具体命令是 sqlplus /NOLOG SQL>connect sys/change_on_install as sysdba 提示:已成功 SQL>shutdown normal 提示:...
sql> alter system switch logfile; 2.forcing checkpoints sql> alter system checkpoint; 3.adding online redo log groups sql> alter database add logfile [group 4] sql> ('/disk3/log4a.rdo','/...
sql> alter system switch logfile; 2.forcing checkpoints sql> alter system checkpoint; 3.adding online redo log groups sql> alter database add logfile [group 4] sql> ('/disk3/log4a.rdo','/disk4/...
oracle系统状态trace文件分析器 当系统hang住时,或者进程间有阻塞时,你可以产生下面两种跟踪文件,一种是进程状态跟踪文件,一种是系统状态跟踪文件: process state dumps ==> 一个进程的所有对象状态,...
select SESS.sid, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME, AO.OBJECT_NAME, LO.LOCKED_MODE from V$LOCKED_OBJECT LO, DBA_OBJECTs AO, V$SESSION SESS where AO.OBJECT_ID = LO.OBJECT_ID and lo....
习题 Ch3 (1) CREATE SPFILE FROM PFILE=path (2) CREATE PFILE FROM SPFILE (3) SELECT NAME,VALUE FROM V$PARAMETER (4) ALTET SESSION SET NLS_DATE_FORMAT=’YYYY-...ALTER SYSTEM ARCHIVE LOG START ……
oracle 常用命令大全 oracle dba 常用命令 1 运行 SQLPLUS 工具 sqlplus 2 以 OS 的默认身份连接 / as sysdba ...show user 4 直接进入 SQLPLUS 命令提示符 ...alter user scott account unlock(lock);