当前位置: 首页 > news >正文

Oracle统计信息问题排查常用SQL

Oracle统计信息问题排查常用SQL

  • 对表的基本情况分析
  • 统计信息收集作业分析
  • 最近一次的统计信息收集
  • 修改触发统计信息收集的阈值

对表的基本情况分析

是否为临时表:

select owner,table_name,temporary from dba_tables where table_name='xxx';

是否为分区表:

select owner,table_name,partitioned from dba_tables where table_name='xxx';

检查表的大小:

select sum(bytes)/1024/1024/1024 as size_gb from dba_segments where segment_name='xxx';

查看特定用户下统计信息被锁定的表:

select owner,table_name,partition_name,stattype_locked from dba_tab_statistics 
where stattype_locked is not null and owner='xxx';

查看特定用户下统计信息已经过期的表:

select owner,table_name,partition_name from dba_tab_statistics 
where stattype_locked is null and stale_stats='YES' and owner='xxx';select table_name,partition_name from user_tab_statistics 
where stattype_locked is null and STALE_STATS='YES';

其中,stattype_locked表示锁定的统计信息类型(data/cache/all),stale_stats表示统计信息是否过期。

统计信息收集作业分析

查看统计信息自动收集作业是否开启:

select client_name,status from dba_autotask_client where client_name like '%stats%';select client_name,status from dba_autotask_client where client_name='auto optimizer stats collection';

查看历史统计信息自动收集记录:

select client_name,window_name,window_start_time,window_duration,window_end_time
from dba_autotask_client_history 
where client_name='auto optimizer stats collection'
order by window_start_time;

查看统计信息收集的具体操作:

select owner,program_name,program_type,program_action,enabled
from dba_scheduler_programs where program_name='GATHER_STATS_PROG';

查看统计信息自动收集作业窗口:

select window_name,repeat_interval,duration from dba_scheduler_windows where enabled='TRUE';

查看用户创建的统计信息收集定时作业:

select owner,job_name,enabled,state,program_name,job_action,schedule_name,
last_start_date,last_run_duration,next_run_date,run_count
from dba_scheduler_jobs where job_name='xxx';

最近一次的统计信息收集

查看指定表最近一次统计信息收集的时间和记录的行数:

--非分区表
select table_name,last_analyzed,num_rows 
from dba_tables where table_name='xxx';--分区表
select table_owner,table_name,partition_name,last_analyzed,num_rows 
from dba_tab_partitions where table_name='xxx' order by partition_name;

查看指定表从最近一次统计信息收集以来的数据变化量:

select * from dba_tab_modifications where table_name='xxx';select table_name,partition_name,inserts,updates,deletes,truncated,drop_segments
from dba_tab_modifications where table_name='xxx' 
order by partition_name;

其中,INSERTS/UPDATES/DELETES分别表示从上一次收集表统计信息以来插入/更新/删除的次数,TRUNCATED表示是否被TRUNCATE过,DROP_SEGMENTS表示被DROP过的分区和子分区的段数。

通过计算表被插入、更新和删除的总行数与num_rows的比值是否超过10%,可以大致估算是否会触发统计信息自动收集。

修改触发统计信息收集的阈值

查看自动统计信息收集触发的阈值(默认为10%):

--全局参数值
SELECT dbms_stats.get_prefs(pname => 'STALE_PERCENT') FROM dual;--指定用户表
SELECT dbms_stats.get_prefs(pname => 'STALE_PERCENT',ownname => 'xxx',tabname => 'xxx') FROM dual;

其中STALE_PERCENT是指DML操作导致表的行记录被修改/增删的比例。

修改自动统计信息收集触发的阈值为5%:

--修改全局级别的参数值
EXEC dbms_stats.set_global_prefs(pname => 'STALE_PERCENT',pvalue => 5);
--set_global_prefs对所有表生效,对新建的表也生效--修改全库级别的参数值
EXEC dbms_stats.set_database_prefs(pname => 'STALE_PERCENT',pvalue => 5);  
--set_database_prefs默认不影响Oracle内置表,对新建的表不生效--修改指定用户表的参数值
EXEC dbms_stats.set_table_prefs(ownname => 'xxx',tabname => 'xxx',pname => 'STALE_PERCENT',pvalue => 5);

References
[1] https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_STATS.html#GUID-2C00FE80-1553-404C-85B6-220895561FE8
[2] https://www.modb.pro/db/543228

http://www.lryc.cn/news/182593.html

相关文章:

  • css圣杯布局和双飞翼布局
  • 机器学习笔记 - 深入研究spaCy库及其使用技巧
  • 网站强制跳转至国家反诈中心该怎么办?怎么处理?如何解封?
  • 2023年10月4日
  • MacBook 录制电脑内部声音
  • mysql主从复制和读写分离
  • 【计算机网络】网络层-数据平面(学习笔记)
  • el-collapse 嵌套中 el-checkbox作为标题,选中复选框与el-tree联动
  • Ubuntu中还换源 sudo apt-get update更新失败
  • flutter播放rtmp视频
  • stm32 - 中断
  • 【洛谷 P1216】[USACO1.5] [IOI1994]数字三角形 Number Triangles 题解(动态规划)
  • 十四天学会C++之第四天(面向对象编程基础)
  • 复习Day09:哈希表part02:141.环形链表、142. 环形链表II、454.四数相加II、383赎金信
  • Internet通过TCP/IP协议可以实现多个网络的无缝连接
  • 互联网Java工程师面试题·Dubbo 篇·第二弹
  • (c语言)经典bug
  • 用于工业物联网和自动化的 Apache Kafka、KSQL 和 Apache PLC4
  • 1.1.1开发基础-硬件-万用表
  • Mysql内置函数、复合查询和内外连笔记
  • 【VUE·疑难问题】定义 table 中每行的高度(使用 element-UI)
  • 【重拾C语言】四、循环程序设计(后判断条件循环、先判断条件循环、多重循环;典例:计算平均成绩、打印素数、百钱百鸡问题)
  • Linux 安装 Gitlab
  • stm32-SPI协议
  • 想要精通算法和SQL的成长之路 - 并查集的运用和案例(省份数量)
  • 解决内网拉取企微会话存档代理问题的一种办法
  • 二十二,加上各种贴图
  • 新版校园跑腿独立版小程序源码 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务
  • SpringBoot banner 样式 自动生成
  • 回收站里面删除的照片如何恢复?