如何使用Oracle Exadata环境中的AWR诊断Smart Scan

酷墨君_9146

酷墨君_9146

2026-11-13

941人浏览

原创

Exadata中AWR通过cell table/index smart scan等待事件平均延时(应<2ms,>30ms表明路径受阻)、IO offload比率及实时视图综合诊断Smart Scan实效性。

如何使用oracle exadata环境中的awr诊断smart scan

Exadata环境中的AWR能直接反映Smart Scan是否生效、效果如何,但必须看对指标——只盯“等待事件平均时间”或“SQL执行时间”会漏掉关键信号。

查cell table smart scan和cell index smart scan等待事件的平均延时

这两个等待事件是Smart Scan的“心跳”。正常情况下,它们的AVERAGE_WAIT应稳定在2ms以下;超过10ms就该警惕,超过30ms基本可判定智能扫描路径受阻。

  • 不是所有SQL都触发这两个事件——只有走全表扫描、分区扫描且谓词可下推到存储层的语句才可能产生
  • 如果某SQL本该Smart Scan,却完全没出现这两个事件,说明根本没进入智能扫描路径(比如被Quarantine拦截、谓词含函数/绑定变量类型不匹配)
  • 用如下SQL快速定位异常快照:
SELECT s.snap_id, 
       TO_CHAR(s.begin_interval_time,'YYYY-MM-DD HH24:MI') snap_time,
       e.event_name,
       ROUND(e.time_waited_micro/1000/e.total_waits, 2) avg_ms,
       e.total_waits
FROM dba_hist_system_event e
JOIN dba_hist_snapshot s ON e.snap_id = s.snap_id AND e.dbid = s.dbid
WHERE e.event_name IN ('cell table smart scan', 'cell index smart scan')
  AND e.total_waits > 0
  AND s.begin_interval_time >= SYSDATE - 3
ORDER BY avg_ms DESC, s.snap_id DESC
FETCH FIRST 10 ROWS ONLY;

核对cell physical IO bytes eligible for predicate offload与实际传输量

这个指标代表“理论上可被存储节点过滤的数据量”,而cell physical IO interconnect bytes是“实际从存储传到数据库的字节数”。两者的差值,就是Smart Scan节省的IO。

  • 理想情况:cell physical IO interconnect bytes ≪ cell physical IO bytes eligible for predicate offload(比如后者是前者的1/10)
  • 异常情况:两者几乎相等 → Smart Scan未生效,全部数据块以Passthru模式传输
  • 常见诱因:SQL_ID被加入Quarantine、时区升级后谓词无法下推、存储索引失效(V$CELL_STATE中storageIndexEnabled为NO)

结合DBA_HIST_SQLSTAT下钻具体SQL的Smart Scan使用率

单条SQL是否真正受益,不能只看等待事件,得看它在历史快照中“有多少次执行用了Smart Scan”。关键字段是io_cell_offload_eligible_bytes和io_interconnect_bytes。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • 计算公式:(io_cell_offload_eligible_bytes - io_interconnect_bytes) / NULLIF(io_cell_offload_eligible_bytes, 0) → 越接近1.0越好
  • 注意:io_cell_offload_eligible_bytes = 0意味着该SQL从未满足Smart Scan条件(如走了索引唯一扫描、用了不可下推的函数)
  • 若某SQL在不同快照中该比率波动极大(比如从0.95降到0.05),重点检查是否被动态Quarantine、或执行计划突变导致谓词丢失

别忽略V$SQL和V$SESSION里的实时线索

AWR是“事后回放”,而实时诊断常需交叉验证。当发现AWR中Smart Scan指标异常时,立刻查当前会话:

  • SELECT sql_id, sql_text FROM v$sql WHERE sql_id = 'xxx' AND io_cell_offload_eligible_bytes > 0 —— 确认SQL本身支持offload
  • SELECT event, p1text, p1, p2text, p2 FROM v$session_wait WHERE sid = AND event LIKE 'cell%' —— 看是否卡在cell smart table scan的提交阶段(p1=cell hash,p2=wait count)
  • SELECT * FROM v$cell_state WHERE state != 'online' —— 排除存储节点临时离线或Quarantine状态未清除

真正难处理的,往往不是Smart Scan“没开”,而是它开了却“没省多少IO”——这时候问题通常藏在存储索引的列选择性、谓词写法(比如TO_CHAR(col) = '2024')、或Quarantine策略的粒度控制上,AWR只能告诉你“结果坏了”,定位根因还得靠这些实时视图和SQL重写验证。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

2023.08.16

1141

5

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

2023.09.15

3433

5

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

2023.09.18

3430

5

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

2023.09.19

1969

3

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2023.09.19

2553

7

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

2023.09.19

3589

4

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4949

19

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.08

257

5

oracle四舍五入怎么操作
oracle四舍五入怎么操作

oracle四舍五入操作可以使用ROUND函数来实现,其语法为“ROUND(number, decimal_places)”,其中,number是要进行四舍五入的数值,decimal_places是指定的小数位数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.14

946

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程