statspack的IO操作及Buffer Hit Rate
--物理讀寫操作
select distinct to_char(snap_time, 'yyyy-mm-dd HH24:MI:SS') datetime,
(newreads.value - oldreads.value) reads,
(newwrites.value - oldwrites.value) writes
from perfstat.stats$sysstat oldreads,
perfstat.stats$sysstat newreads,
perfstat.stats$sysstat oldwrites,
perfstat.stats$sysstat newwrites,
perfstat.stats$snapshot sn
where newreads.snap_id = sn.snap_id
and newwrites.snap_id = sn.snap_id
and oldreads.snap_id = sn.snap_id - 1
and oldwrites.snap_id = sn.snap_id - 1
and oldreads.statistic# = 42 --42 physical reads
and newreads.statistic# = 42
and oldwrites.statistic# = 46 --46 physical writes
and newwrites.statistic# = 46
and (newreads.value - oldreads.value) > 0
and (newwrites.value - oldwrites.value) > 0
and snap_time > to_date('2008-07-08 18:00:00', 'yyyy-mm-dd hh24:mi:ss')
;
--Buffer命中率
select substr(to_char(snap_time, 'yyyy-mm-dd HH24:MI'), 12),
round(100 * (((a.value - e.value) + (b.value - f.value)) -
(c.value - g.value)) /
((a.value - e.value) + (b.value - f.value))) "BUFFER HIT RATIO"
from perfstat.stats$sysstat a,
perfstat.stats$sysstat b,
perfstat.stats$sysstat c,
perfstat.stats$sysstat d,
perfstat.stats$sysstat e,
perfstat.stats$sysstat f,
perfstat.stats$sysstat g,
perfstat.stats$snapshot sn
where a.snap_id = sn.snap_id
and b.snap_id = sn.snap_id
and c.snap_id = sn.snap_id
and d.snap_id = sn.snap_id
and e.snap_id = sn.snap_id - 1
and f.snap_id = sn.snap_id - 1
and g.snap_id = sn.snap_id - 1
and a.statistic# = 40
and e.statistic# = 40
and b.statistic# = 41
and f.statistic# = 41
and c.statistic# = 42
and g.statistic# = 42
and d.statistic# = 46
and snap_time > to_date('2008-07-08 18:00:00', 'yyyy-mm-dd hh24:mi:ss')
;
/*
40 db block gets
41 consistent gets
42 physical reads
46 physical writes
*/
--buffer 命中率計算公式
公式一:
select name,
((consistent_gets + db_block_gets) - physical_reads) /
(consistent_gets + db_block_gets) * 100 "Hit Ratio%"
from v$buffer_pool_statistics
where physical_reads > 0;?
公式二:
Hit Ratio = 1 - ((physical reads - physical reads direct - physical reads direct (lob)) /
(db block gets + consistent gets - physical reads direct - physical reads direct (lob))
公式三:
hit ratio = 1 - [physical reads/(block gets + consistent gets)]
SELECT NAME,
PHYSICAL_READS,
DB_BLOCK_GETS,
CONSISTENT_GETS,
1 - (PHYSICAL_READS / (DB_BLOCK_GETS + CONSISTENT_GETS)) "Hit Ratio"
FROM V$BUFFER_POOL_STATISTICS
WHERE NAME = 'DEFAULT';
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人