Oracle统计信息相关

news/2025/10/21 16:41:30/文章来源:https://www.cnblogs.com/small-wei/p/19155794

以下是检查 Oracle 统计信息更新时间的常用方法:

1. 查看表级统计信息更新时间

-- 查看用户表统计信息
SELECT table_name, num_rows,last_analyzed,TO_CHAR(last_analyzed, 'YYYY-MM-DD HH24:MI:SS') as analyze_time,stale_stats
FROM user_tables
WHERE table_name = '表名'
ORDER BY last_analyzed DESC;-- 查看所有表(含系统时间戳)
SELECT owner,table_name,num_rows,blocks,last_analyzed,ROUND((SYSDATE - last_analyzed) * 24) as hours_ago
FROM dba_tables
WHERE owner = '用户名'
ORDER BY last_analyzed;

2. 查看索引统计信息更新时间

-- 查看索引统计信息
SELECT index_name,table_name,last_analyzed,num_rows,distinct_keys,TO_CHAR(last_analyzed, 'YYYY-MM-DD HH24:MI:SS') as analyze_time
FROM user_indexes
WHERE table_name = '表名'
ORDER BY last_analyzed DESC;-- 查看所有索引统计信息
SELECT owner,index_name,table_name,last_analyzed,DENSE_RANK() OVER (PARTITION BY owner ORDER BY last_analyzed DESC) as rank
FROM dba_indexes
WHERE owner = '用户名'
ORDER BY last_analyzed DESC;

3. 查看列统计信息(直方图)

-- 查看列的统计信息
SELECT table_name,column_name,num_distinct,num_nulls,last_analyzed,histogram
FROM user_tab_columns
WHERE table_name = '表名'
ORDER BY last_analyzed DESC;-- 查看直方图统计信息
SELECT table_name,column_name,endpoint_number,endpoint_value,last_analyzed
FROM user_tab_histograms
WHERE table_name = '表名'
ORDER BY table_name, column_name, endpoint_number;

4. 查看分区统计信息

-- 查看分区表统计信息
SELECT table_name,partition_name,num_rows,last_analyzed,ROUND((SYSDATE - last_analyzed) * 24, 2) as hours_ago
FROM user_tab_partitions
WHERE table_name = '表名'
ORDER BY last_analyzed DESC;-- 查看子分区统计信息
SELECT table_name,partition_name,subpartition_name,num_rows,last_analyzed
FROM user_tab_subpartitions
WHERE table_name = '表名'
ORDER BY last_analyzed DESC;

5. 统计信息是否过期(STALE_STATS)

-- 查看过期统计信息
SELECT owner,table_name,stale_stats,last_analyzed,CASE WHEN stale_stats = 'YES' THEN '统计信息过期'WHEN stale_stats = 'NO' THEN '统计信息有效'ELSE '未分析'END as status
FROM dba_tab_statistics
WHERE owner = '用户名'
AND stale_stats = 'YES'  -- 只看过期的
ORDER BY last_analyzed;-- 查看所有表状态
SELECT owner,COUNT(*) as total_tables,SUM(CASE WHEN stale_stats = 'YES' THEN 1 ELSE 0 END) as stale_tables,SUM(CASE WHEN last_analyzed IS NULL THEN 1 ELSE 0 END) as never_analyzed
FROM dba_tab_statistics
WHERE owner = '用户名'
GROUP BY owner;

6. 汇总脚本

-- 统计信息健康度报告
SELECT owner,table_name,num_rows,blocks,last_analyzed,stale_stats,CASE WHEN last_analyzed IS NULL THEN '从未分析'WHEN stale_stats = 'YES' THEN '已过期'WHEN (SYSDATE - last_analyzed) > 7 THEN '超过7天未更新'WHEN (SYSDATE - last_analyzed) > 1 THEN '超过1天未更新'ELSE '最近更新'END as analyze_status,ROUND((SYSDATE - last_analyzed) * 24, 2) as hours_since_analyze
FROM dba_tab_statistics
WHERE owner = '用户名'
AND (stale_stats = 'YES' OR last_analyzed IS NULL OR (SYSDATE - last_analyzed) > 1)
ORDER BY last_analyzed NULLS FIRST;

7. 检查统计信息收集任务

-- 查看自动统计信息收集窗口
SELECT window_name,REPLACE(REPLACE(resource_plan, '<![CDATA[', ''), ']]>', '') as resource_plan,enabled,next_start_date,repeat_interval
FROM dba_scheduler_windows
WHERE window_name LIKE 'MON%' OR window_name LIKE 'WEE%'
ORDER BY window_name;-- 查看统计信息收集作业状态
SELECT job_name,enabled,state,next_run_date,repeat_interval
FROM dba_scheduler_jobs
WHERE job_name LIKE '%GATHER%STATS%';-- 查看最近执行的统计信息收集任务
SELECT job_name,job_action,run_date,SUCC_DONE
FROM dba_scheduler_job_run_details
WHERE job_name LIKE '%GATHER%STATS%'
ORDER BY run_date DESC
FETCH FIRST 20 ROWS ONLY;

8. 检查统计信息锁

-- 查看表是否被锁定统计信息
SELECT owner,table_name,stattype_locked
FROM dba_tab_statistics
WHERE owner = '用户名'
AND stattype_locked IS NOT NULL;-- 查看索引是否被锁定统计信息
SELECT owner,index_name,table_name,stattype_locked
FROM dba_ind_statistics
WHERE owner = '用户名'
AND stattype_locked IS NOT NULL;

9. 对比不同时间点的统计信息

-- 对比历史统计信息(使用AWR)
SELECT snap_id,begin_interval_time,end_interval_time,table_name,num_rows
FROM dba_hist_tab_stat_history
WHERE owner = '用户名'
AND table_name = '表名'
ORDER BY snap_id DESC;

10. 实用诊断脚本

-- 完整的统计信息诊断报告
SELECT '表统计信息' as type,owner,table_name as object_name,last_analyzed,stale_stats,ROUND((SYSDATE - last_analyzed) * 24, 2) as hours_ago
FROM dba_tab_statistics
WHERE owner = '用户名'
AND (stale_stats = 'YES' OR last_analyzed IS NULL)UNION ALLSELECT '索引统计信息' as type,owner,index_name as object_name,last_analyzed,'' as stale_stats,ROUND((SYSDATE - last_analyzed) * 24, 2) as hours_ago
FROM dba_ind_statistics
WHERE owner = '用户名'
AND last_analyzed IS NULLORDER BY hours_ago DESC NULLS FIRST;

11. 快速检查特定表

-- 一键查看表的所有统计信息
SELECT t.table_name,t.num_rows as table_rows,t.blocks as table_blocks,t.last_analyzed as table_analyzed,t.stale_stats as table_stale,COUNT(i.index_name) as index_count,MAX(i.last_analyzed) as latest_index_analyzed
FROM user_tables t
LEFT JOIN user_indexes i ON t.table_name = i.table_name
WHERE t.table_name = '表名'
GROUP BY t.table_name, t.num_rows, t.blocks, t.last_analyzed, t.stale_stats;

12. 检查统计信息收集配置

-- 查看统计信息收集参数
SELECT name, value, description
FROM v$parameter
WHERE name IN ('optimizer_use_pending_statistics','optimizer_dynamic_sampling','optimizer_capture_sql_plan_baselines','statistics_level','preferred_aggregate_function'
);-- 查看数据库统计信息
SELECT * FROM dba_optstat_operations
ORDER BY end_time DESC
FETCH FIRST 10 ROWS ONLY;

常用场景示例

场景1:检查未更新统计信息的表

SELECT owner, table_name, last_analyzed
FROM dba_tables
WHERE owner = '用户名'
AND (last_analyzed IS NULL OR last_analyzed < SYSDATE - 7)
ORDER BY last_analyzed NULLS FIRST;

场景2:检查大表的统计信息

SELECT owner, table_name, num_rows, last_analyzed
FROM dba_tables
WHERE owner = '用户名'
AND num_rows > 1000000
ORDER BY num_rows DESC;

场景3:SQL执行计划改变前后的对比

-- 记录当前统计信息时间
SELECT table_name, last_analyzed 
FROM user_tables 
WHERE table_name IN ('表1', '表2');-- 重新收集统计信息后对比

更新统计信息

-- 收集表统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => '用户名', tabname => '表名');-- 收集所有对象统计信息
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '用户名');-- 收集数据库统计信息
EXEC DBMS_STATS.GATHER_DATABASE_STATS();-- 收集统计信息并查看进展
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => '用户名',tabname => '表名',estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL COLUMNS SIZE AUTO',cascade => TRUE
);

关键点:

  • last_analyzed 越新越好
  • stale_stats = 'YES' 表示可能过期
  • 大表建议开启自动统计信息收集
  • 被锁定的统计信息需要手动处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏,专业制造与工程应用深度解析

2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏,专业制造与工程应用深度解析 行业背景与发展趋势 随着城市化进程加速和基础设施建设不断完善,栏杆护栏行业迎来了新的发展机遇。作为公共安全…

Consul 与 Prometheus 集成实战:服务自动发现与监控配置指南(含 ThinkPHP8 示例)

Consul 与 Prometheus 集成实战:服务自动发现与监控配置指南(含 ThinkPHP8 示例)本文详细讲解 Consul 与 Prometheus 的集成方案,解决传统 Prometheus 监控需手动配置 Target 的繁琐问题。核心借助 Consul 的服务注…

完整教程:笔记本键盘失灵别慌!3种方法快速禁用(附恢复技巧)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年工业设备安装厂家权威推荐榜:管道/电气/暖通空调/空压系统/纯水系统/厂房通风/车间配电/机械设备安装服务深度解析

2025年工业设备安装厂家权威推荐榜:管道/电气/暖通空调/空压系统/纯水系统/厂房通风/车间配电/机械设备安装服务深度解析 工业设备安装行业发展趋势 随着制造业转型升级步伐加快,工业设备安装行业正迎来新一轮发展机…

阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态

阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态

2025 年最新防伪溯源服务商权威推荐榜单:AI 技术赋能 + 软硬件一体优选指南及品牌选择攻略防伪溯源标签/AI防伪溯源/防伪溯源数字标签推荐

引言 在当前市场环境下,假冒伪劣产品依旧肆虐,从食品药品到电子数码,多个行业深受其害,不仅严重侵害消费者合法权益,更让正规企业面临品牌信誉受损、经济损失惨重的困境。传统防伪技术因静态化、易仿制的短板,已…

题解:P1196 [NOI2002] 银河英雄传说

P1196 [NOI2002] 银河英雄传说 这是一道绿题 核心考察点只有一个: 那就是带权并查集\(\mathcal{Part\ I}\) 我们检查题意不难发现这道题的要求无非两个: $\ \ $ 1 ) 维护多个链的不断合并,但是以链中某节点作为索引…

配置即权限:从传统开源 RBAC 框架到 SPARK 的六层资料护盾,告别改权限就要改代码的魔咒

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年TYPE-C母座厂家权威推荐榜:防水/板上/沉板/立插/卧式/侧贴/贴片式/插件式全系列,5A大电流高速TID认证接口一站式供应

2025年TYPE-C母座厂家权威推荐榜:防水/板上/沉板/立插/卧式/侧贴/贴片式/插件式全系列,5A大电流高速TID认证接口一站式供应 随着电子设备向轻薄化、多功能化方向发展,TYPE-C接口凭借其正反插拔、高速传输和大功率充…

Oracle下查询数据库SQL ID

以下是常用查询SQLID的方法: 1. 通过 V$SQL 视图查询(常用) -- 根据SQL文本模糊查询SQLID SELECT sql_id, sql_text, executions, elapsed_time/1000000/executions as avg_elapsed_sec FROM v$sql WHERE sql_text …

深入解析:【数据结构】顺序表0基础知识讲解 + 实战演练

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年流量控制阀厂家推荐排行榜,液压流量控制阀,气动流量控制阀,高压流量控制阀,精密流量控制阀批发公司推荐

2025年流量控制阀厂家推荐排行榜:液压、气动与高压精密控制技术深度解析 在工业自动化与过程控制领域,流量控制阀作为关键执行元件,其性能直接影响整个系统的稳定性与效率。随着工业4.0和智能制造的深入推进,流量控…

楼里网站开发完成,产品进入交代期

在产品一期的过程中手忙脚乱,到产品二期已经从从容容游刃有余,要做的事情还有不少,走一步算一步。👏 哈喽大家好,在安静了一段时间之后,楼里产品系列二期,于2025年10月21日正式收尾。 ✅ 开发的时间周期不到一…

比特币挖矿盈利能力9月下降超7%

根据某投资机构报告,9月份比特币挖矿盈利能力下降超过7%,主要原因是网络算力上升和比特币价格下跌。北美上市矿企产量降至3401枚比特币,每EH/s收入从8月的5.6万美元降至5.2万美元。比特币挖矿盈利能力9月下降超7% 核…

LobeHub UI Kit

LobeHub UI Kit 漫思

实用指南:Chromium 138 编译指南 - Android 篇:配置depot_tools(四)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Nimm Game

模型介绍 Nim Game 是博弈论中最著名且最重要的模型之一,规则如下:有 \(n\) 堆物品,每堆分别有 \(a_1,a_2,\cdots,a_n\) 个; 两名玩家轮流操作; 每次只能从某一堆中取任意数量的物品(至少 \(1\) 个,至多取完该堆…

2025年陶瓷过滤机厂家权威推荐榜:真空/盘式/矿用/全自动/真空带式陶瓷过滤机,固液分离设备,尾矿处理设备,圆盘过滤机专业选购指南

2025年陶瓷过滤机厂家权威推荐榜:真空/盘式/矿用/全自动/真空带式陶瓷过滤机,固液分离设备,尾矿处理设备,圆盘过滤机专业选购指南 行业背景与发展趋势 固液分离技术作为现代工业生产中不可或缺的关键环节,在矿山、…

基于C++的远程键盘监控器设计与实现 - 教程

基于C++的远程键盘监控器设计与实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

2025年医药冷链运输厂家权威推荐榜:药品/临床样本/CAR-T/蛋白/诊断试剂/生物制品/血液/细胞/芯片全程温控,冷藏车/冷藏箱/保温箱/干冰/液氮及国际冷链进出口专业服务

2025年医药冷链运输厂家权威推荐榜:药品/临床样本/CAR-T/蛋白/诊断试剂/生物制品/血液/细胞/芯片全程温控,冷藏车/冷藏箱/保温箱/干冰/液氮及国际冷链进出口专业服务 随着生物医药产业的快速发展,医药冷链运输行业正…