Oracle调优之buffer pool相关
一个oracle block与data buffer中的一个buffer对应。
用户进程(server process)负责读取磁盘上的block到data buffer cache中,DEWn进程负责将脏块写到磁盘上。
一个buffer在data buffer中有4种状态
pined:多个进程想写这个块,但只有1个进程能获得锁。
claen :buffer中的数据和磁盘上的数据时一致的,这些块将优先被淘汰。
free/unused:没有被使用过,是空白内容。
dirty:不被某个进程使用使用,但buffer的内容和磁盘内容不一致
data buffer cache中用2个队列保存buffer,一个队列是LRU list,按照每个buffer被访问的时间排序,最近访问的buffer排在最前。一个队列是checkpoint queue,保存脏块,DBWn进负责将这些脏块写到磁盘中。
建议将参数db_block_checksum设为true,为每个block添加一个校验码,防止磁盘损坏引起数据丢失。
data buffer cache由多个相互独立的buffer pool组成,每个buffer对应一个block,不同的block size对应不同的buffer pool。
db_block_size决定了default,recycle,keep池中每个buffer的大小。
db_cache_size:default池的大小。
db_recycle_cache_size:recycle池的大小。
db_keep_cache_size:keep池的大小。
也可通过设置SGA_TARGET,实现自动管理。
关于各data buffer cache大小的建议
select a.name,a.SIZE_FOR_ESTIMATE,a.ESTD_PHYSICAL_READ_FACTOR,a.ESTD_PHYSICAL_READS from
v$db_cache_advice a order by a.name,a.SIZE_FOR_ESTIMATE;
查看buffer cache的命中率
SELECT NAME, VALUE
FROM V$SYSSTAT
WHERE NAME IN ('db block gets from cache', 'consistent gets from cache', 'physical reads cache');
并使用公式1 - (('physical reads cache') / ('consistent gets from cache' + 'db block gets from cache')计算
或者在sql语句中直接计算
select 1-(sum(decode(name,'physical reads',value,0))/
(sum(decode(name,'db block gets',value,0))+
(sum(decode(name,'consistent gets',value,0)))))
from v$sysstat;
在多buffer pool情况下,分别统计不同buffer pool的命中率
select name,1-(physical_reads/(db_block_gets+consistent_gets))
from v$buffer_pool_statistics
where db_block_gets+consistent_gets>0;
命中率需要和等待事件结合起来看性能情况。
大表的全扫描会降低buffer cache的命中率
查看段在buffer cache中的占用情况,利用V$BH
方式一:查看每个段有多少个块在buffer cache中
SELECT o.OBJECT_NAME, COUNT(*) NUMBER_OF_BLOCKS
FROM DBA_OBJECTS o, V$BH bh
WHERE o.DATA_OBJECT_ID = bh.OBJD
AND o.OWNER != 'SYS'
GROUP BY o.OBJECT_NAME
ORDER BY COUNT(*);
方式二:查看指定段占用buffer cache的比率
1.获取段的object_id
SELECT DATA_OBJECT_ID, OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OBJECT_NAME = UPPER('segment_name');
2.获取指定段占用了多少buffer
SELECT COUNT(*) BUFFERS
FROM V$BH
WHERE OBJD = data_object_id_value;
3.获取当前buffer cache中有多少个buffer
SELECT NAME, BLOCK_SIZE, SUM(BUFFERS)
FROM V$BUFFER_POOL
GROUP BY NAME, BLOCK_SIZE
HAVING SUM(BUFFERS) > 0;
4.利用第3步和第4步的结果就可以计算出该段在buffer cache中的占用情况。
对buffer cache调优的目标
server process能够在buffer cache中找到需要的数据
发生相应的等待事件的次数减少
调优的手段
降低sql语句对数据块的请求
增加buffer cache的容量
把不同访问模式的对方防到不同的pool中
将小表钉在内存中
直接读
主要事件
Free Buffer Inspected: server process为了在LRU链表上找到可用的内存数据块所所跳过的数据块的个数。
Free Buffer waits: server process通知DBWn写脏块的次数
Buffer busy waits: 找到buffer,但buffer被另一个进程占有,开始等待的次数。
000000000
查看Free Buffer Inspected产生的次数
select name,value from v$sysstat where name = 'free buffer inspected';
查看Free Buffer waits和Buffer busy waits发生的次数及耗用时间
select EVENT,TOTAL_WAITS,TIME_WAITED from v$system_event
where EVENT in('buffer busy waits','free buffer waits');
多个buffer pool
当对大表进行全表扫描时,可能会使其他buffer(温块)移除buffer pool,将这些大表设置使用recycle pool。
recycle pool的容量应小于default pool,recycle pool中的buffer应尽快移出。
将温块设置为使用keep pool。keep pool的容量应大于default pool。
alter table me.t_option storage(buffer_pool keep);
1个segment只能放在1个pool中。
v$cache,需要执行@?/rdbms/admin/catclust.sql脚本。与v$bh类型
select a.username,NAME,count(BLOCK#) from dba_users a join
v$cache b on a.USER_ID = b.owner#
where a.username != 'SYS'
group by OWNER#,a.username,NAME
order by a.username;
v$sess_io 记录了每个已连接session的读取情况的累计值
select b.USERNAME,a.BLOCK_GETS,a.CONSISTENT_GETS,a.PHYSICAL_READS
from v$sess_io a full join v$session b on a.SID=b.SID
where b.USERNAME is not null;
cache table
当使用全表扫描的方式查询一张表时,会将该表相应的buffer放在LRU list的末尾,以便尽快淘汰,但有些小表需要全表扫描而不希望被淘汰掉,这时就需要使用cache table将表对应的buffer放在LRU list的开头。可以通过创建表,修改表,和sql提示实现cache table。建议被cache table的表不要太多,并放到keep pool中。cache table只能延长buffer在buffer pool中的存活时间,而不能将buffer pin在buffer pool中。
可以在user_tables或all_tables或dba_tables中查询cache字段查看表是否被cache table。
Y :cache table N:没有被cache table
例:create table cache_test(id int) cache;
alter table cache_test cache;
配置多个DBWn进程
配置参数db_writer_processes
在多cpu,异步IO的OS上能显著提高性能。
参数disk_asynch_io是是否启用异步IO的开关 true:打开
什么时候需要增加DBWn进程?如果等待事件Free Buffer waits占有比较高比例时
转:http://springking.iteye.com/blog/643690
Oracle调优之buffer pool相关的更多相关文章
- Oracle调优总结(经典实践 重要)
转载:http://langgufu.iteye.com/blog/1974211 Problem Description:1.每个表的结构及主键索引情况2.每个表的count(*)记录是多少3.对于 ...
- Oracle调优总结
Oracle调优总结(经典实践 重要) https://blog.csdn.net/dtjiawenwang88/article/details/74892245 https://www.cnblog ...
- Oracle优化 -- 关于Database Buffer Cache相关参数DB_CACHE_SIZE的优化设置
select size_for_estimate, buffers_for_estimate ,ESTD_PHYSICAL_READ_factor,ESTD_PHYSICAL_READS from v ...
- Oracle调优之看懂Oracle执行计划
@ 目录 1.文章写作前言简介 2.什么是执行计划? 3.怎么查看执行计划? 4.查看真实执行计划 5.看懂Oracle执行计划 5.1 查看explain 5.2 explain执行顺序 5.3 访 ...
- innodb buffer pool相关特性
背景 innodb buffer pool作为innodb最重要的缓存,其缓存命中率的高低会直接影响数据库的性能.因此在数据库发生变更,比如重启.主备切换实例迁移等等,innodb buffer po ...
- oracle调优 浅析“会话管理开销”
调优之浅析"会话管理开销" [简单介绍] 在调优的过程中,对于会话的管理是比較普遍的问题,由于维护会话的开销相对是比較高的. [过程表现例如以下] ...
- (转) 【oracle调优】优化全表扫---cache整张表或索引
情景分析: 1)某查询必须要走全表扫描 2)该查询执行的频率相当高 3)对执行时间的要求也相当苛刻的话 4)数据库的IO比较吃紧 5)数据库的内存比较宽松 6)该表的大小没有大到离谱 以上情况下,可以 ...
- oracle调优使用到相关sql
select * from v$session where username is not null;select username,count(username) from v$session wh ...
- ORACLE调优深入理解AWR报告(转)
AWR报告分析可从以下几点入手: (1).Oacle主机资源开销分析及负载情况 (2).oracle top信息分析 Top 10 Foreground Events by Total Wait Ti ...
随机推荐
- 安装Spring报错An error occurred while collecting items to be installed
原因主要是eclipse和spring版本之间的匹配问题. An error occurred while collecting items to be installed session conte ...
- 完成users中的models
用户表中添加邮箱验证码数据表,轮播图数据表 from django.db import models from django.contrib.auth.models import AbstractUs ...
- [置顶]
kubernetes1.7新特性:PodDisruptionBudget控制器变化
背景概念 在Kubernetes中,为了保证业务不中断或业务SLA不降级,需要将应用进行集群化部署.通过PodDisruptionBudget控制器可以设置应用POD集群处于运行状态最低个数,也可以设 ...
- JMter中添加断点和关联
一. 断点 断言是什么呢,它是用来检查返回结果对不对的. 用来验证结果是否正确,如果正确的话,就代表这个请求的返回是正确的,如果没有的话就代表这个请求的结果和我们预期的不一致,这 ...
- vscode+Firefox实现前端移动真机测试
需要配件: 1.安装有火狐浏览器的移动端(手机); 2.安装有火狐浏览器和vscode的pc(电脑); 3.在vscode安装Live Server 插件 4.安装之后vscode右下角会有Go Li ...
- 根据显示器的分辨率,加载不同CSS样式表
<link rel="stylesheet" type="text/css" id="css"><script langu ...
- HihoCoder 1063 : 缩地 树形DP第二题(对象 边)
时间限制:12000ms 单点时限:1000ms 内存限制:256MB 描述 编织者是 Dota 系列中的一个伪核,拥有很强的生存能力和线上消耗能力.编织者的代表性技能是缩地.缩地带来的隐身.极限移动 ...
- Dapper.Contrib 开发.net core程序,兼容多种数据库
Dapper.Contrib 开发.net core程序,兼容多种数据库 https://www.cnblogs.com/wuhuacong/p/9952900.html 使用Dapper.Contr ...
- String.format()格式化日期(2)
在以前的开发中,日期格式化一直使用的是SimpleDateFormat进行格式化.今天发现String.format也可以格式化.当 然,两种方式的优劣没有进行深入分析. 1. 日期格式化 (2018 ...
- idea Java spring 入门 demo
根据这个 来实现 理解 https://www.cnblogs.com/xing901022/p/3963962.html 这里没有说如何导入包,现在我们用 idea 来实现 新建项目结构后 RUN ...