3. 理解DBCache;
a. 主要为了提高会话访问数据局文件中数据的效率,对性能影响极大的组件。
i. block为单位存放,共享内存(shmget,shmat等获取),是SGA统一分配的一个组件;
ii. SGA以GRANULE为单位,一般为16M,较小的为4M,每个GRNANULL包括多个Buffer;
iii. 多种链,分为两类:LRU链和HASH链;
iv. LRU的热块移动,8i后改为计数器,不再移动;db_percent_hot_default,默认为50%,可修改,但是谨慎;
v. 文件号和块号进行寻址;散列算法,定位唯一的bucket,但是不同数据块可能得到相同的散列;这种可能性不大;
vi. 一个数据块的不同版本一般在同一链条上;如果搜索很长时间都无法找到可用的cache,需要定义一个最大深度,一旦超过深度就放弃上搜索,记录一个标志位,通知dbwr刷新脏数据到磁盘;大于maxdirtyqueue,也需要刷新
vii. 目前内存大,使用多个DBWR进行写。
viii. 如果CPU资源不到瓶颈,设置DBWR数量超过CPU数量可提高DBWR;
ix. DBWR足够,使用statspack或者AWR报告;
x. DBcache命中率为90%可介绍,企业级95%;
xi. 可以让数据和索引放在Keeppool中,能够提供响应速度;提高了CPU使用率;
b. DB Cache优化要点:
i. 理解瓶颈的本质;
ii. 调整大小需要仔细评估,收益和风险;
4. 理解共享池:
a. 共享池
i. Show sga; v$sgastat;
ii. KGH 堆管理,chunk,避免碎片化-freelist;
1) 重启实例;
2) 分配较大共享内存;
iii. 使用率高比较好;如果争用,加大session_cached_cursors到200;
iv. ORA-4031-内存不足,大量并发现,共享池的大部分资源被锁住,无法释放,那么就无法分配较大的内存;
v. 10g开始ASMM机制自动管理共享内存,不足会从其他缓存释放空间;不再设置db_cache_size,shared_pool_size,只用设置SGA就足够;但会根据业务的不一样,出现SGA的内存性能抖动,可关闭ASSM;
vi. 子池-解决了共享池分配和回收变成串行化的问题,但每个子池容易出现碎片化的问题;可以减少子池的使用或者禁用子池;
vii. Row cache=字典缓冲;
b. 共享池和游标
i. 文本相同,一般共享;除非在不同用户schema下;从sql_shared_cursor字段可以看出原因;
ii. 两个SQL执行计划不同;尽管sql相同,需使用不同的执行计划;ACS
iii. 预读性行为:db_block_prefetch_limit、_db_block_prefetch_quota,_table_lookup_prefetch_size;
iv. 共享池数量过大过小都不行,根据应用来定;
v. 游标共享和绑定变量:9i引入绑定变量窥探技术,BVP。根据绑定变量值进行CBO开销生成执行计划。硬解析发生;执行计划改变,RAC节点的执行计划不同。11G 引入ACS 自适应游标共享,可能导致子游标过多的情况;解决了游标共享的问题,页解决了因绑定变量值不同而采取不同计划的问题。
vi. Select count(*), event from v$session_wait group by event order by count(*);
vii. 游标Open_cursors数量为3000,有时候打开的数量远大于正在使用的数量,是因为软关闭,游标保存在游标缓冲区中。9.2.0.5前Open_cursor双重作用(限制+缓冲区的大小);以后因为可使用session_cached_cursors会话,就纯粹限制;
viii. session_cached_cursors和Open_cursors:UGA中游标被放入缓冲池,在一个游标解析3次后,被回话放入缓冲区中。
ix. 绑定变量减少硬解析,使用游标缓存目的是减少软解析。调优的OLTP系统中,session cache的命中率可以达到90甚至95%;
x. 信号灯是重量级的锁,而mutex(计数器+消息队列)和闩是轻量级的锁;
xi. 4031问题,是由于共享池碎片化问题:可以增大lm_locks和lm_ress参数;使用绑定变量,涉及修改应用;
xii. 定期在系统空闲时刷新共享池,可提高共享池的运行效率;
xiii. 共享池响应速度下降:总等待时间不到20%,平均等待超过200ms,正常应该几个ms:共享池过小,共享池resize操作,有人在编译重要的存储过程或者视图;kill掉根源session;
xiv. 共享池优化:
1) 共享池本身配置;游标共享;缓解共享池的碎片;,最后是分析bug和补丁;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
Oracle数据库调整内存应该注意的几个问题
听见风的声音
297次阅读
2025-03-18 09:43:11
记一次ORA600内部错误故障分析与修复实录
Digital Observer
278次阅读
2025-03-05 09:33:15
数据库的易用性是多维度的
白鳝的洞穴
116次阅读
2025-03-06 09:26:58
Oracle 物理 DataGuard 机制全面解析(最佳参考)
Albert Tan DBA 之路
91次阅读
2025-03-10 17:28:06
Oracle 10.2.0.5 DataGuard主从搭建-呆瓜式
Albert Tan DBA 之路
51次阅读
2025-03-12 10:05:53
rac开启系统防火墙导致其中一个节点无法启动
dm5250
51次阅读
2025-03-03 18:19:15
Oracle故障处理秘籍(三)
呆呆的私房菜
47次阅读
2025-02-28 15:08:18
Oracle大表数据导出指南
yuki
39次阅读
2025-03-20 16:27:24
紧急救援!SCN调整秘籍(二)
呆呆的私房菜
37次阅读
2025-03-25 10:37:52
简单到不敢相信!Oracle 数据库日志收集方法
青年数据库学习互助会
35次阅读
2025-03-03 09:53:10