首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 缓冲区缓存调优实战:命中率计算、I/O 争用监控与消除

     編輯:Oracle 資料庫基礎

一、缓冲区活动采集与命中率计算

SELECT NAME, VALUE
FROM V$SYSSTAT
WHERE NAME IN ('db block gets', 'consistent gets', 'physical reads');

-- 样本输出
NAME                   VALUE
---------------------- ------
db block gets           3,437
consistent gets        30,500
physical reads          1,963

命中率公式

Hit Ratio = 1 - (Physical Reads / (DB Block Gets + Consistent Gets))

本例:1 - 1963 / (3437 + 30500) = 92% ✅ 优秀 (OLTP 目标 > 90%)。

调优指引

  • 命中率 < 60-70%:增大 DB_BLOCK_BUFFERS (手动 SGA) 或 DB_CACHE_SIZE (自动 SGA)。
  • 命中率极高 (> 99%) 且内存压力大:可适度缩减缓冲区,最小 4 块。

二、I/O 争用分类与监控

争用类型成因消除手段
并行 I/O 争用多进程同一时刻访问同一物理设备分离表与索引到不同磁盘/ASM 磁盘组
干扰争用顺序写 (归档/备份) 阻塞随机读归档日志、备份文件、数据文件三路径物理隔离

三、磁盘活动监控 SQL

SELECT DF.NAME, FS.PHYRDS, FS.PHYWRTS
FROM V$DATAFILE DF, V$FILESTAT FS
WHERE DF.FILE# = FS.FILE#;
  • PHYRDS:物理读次数
  • PHYWRTS:物理写次数
  • 单盘总 I/O = 该盘上所有数据文件 PHYRDS + PHYWRTS 之和,须控制在存储阵列/OS 最优阈值内。

四、I/O 优化三板斧 (顺序不可逆)

  1. 内存优化先行:缓冲区命中率达标,减少物理 I/O 需求。
  2. 减少磁盘争用:表/索引/临时/归档/控制文件按 I/O 特性分离布局。
  3. 有效分配数据块空间:PCTFREE/PCTUSED/FREELISTS 减少行迁移/链接,降低额外 I/O。
  4. 避免动态空间管理:预分配段空间,使用本地管理表空间 (LMT) + 自动段空间管理 (ASSM)。

五、实战检查清单

检查项标准异常处理
缓冲区命中率> 90% (OLTP)增 DB_CACHE_SIZE / 调整 SQL 减少逻辑读
单数据文件物理读/写均衡分布重组表空间、ASM 重平衡
行迁移/链接比例< 1%ANALYZE TABLE ... LIST CHAINED ROWS → 迁移重组
TEMP 表空间使用峰值不溢出增大 TEMP / 调优排序/Hash SQL

总结:缓冲区命中率是「总开关」,I/O 争用监控是「分表器」,二者结合才能精准定位瓶颈并量化调优收益。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved