千家信息网

微课sql优化(2)-为什么需要收集统计信息

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,1、为什么需要收集统计信息Cost-based optimizer (CBO),Based on object statistics,优化器统计信息描述数据库中的对象的详细信息, 查询优化器使用这些统
千家信息网最后更新 2024年11月11日微课sql优化(2)-为什么需要收集统计信息

1、为什么需要收集统计信息


Cost-based optimizer (CBO),Based on object statistics,优化器统计信息描述数据库中的对象的详细信息, 查询优化器使用这些统计信息为每个SQL语句选择最佳执行计划。 数据库将优化器统计信息存储在数据字典中。您可以使用数据字典视图访问这些统计信息。 由于数据库中的对象可能会不断更改,因此必须定期更新统计信息,以便准确描述这些对象。Oracle数据库自动维护优化器统计信息。 11g: Scheduled Maintenance Window Times In 11g daily maintenance windows are provided. by default these are defined as : Weeknights: Starts at 10 p.m. and ends at 2 a.m. Weekends: Starts at 6 a.m. is 20 hours long. 10g: With Oracle Database 10g the default maintenance window is configured to cover the following periods: 10 pm to 6 am every weekday All weekend (Friday 10 pm to Monday 6 am) 可以使用该DBMS_STATS软件包手动维护优化器统计信息。

2、哪些表需要收集统计信息


自动统计任务能满足大部分数据库的业务需求,但存在特殊情况需要手工收集统计信息, 1、业务表数据被delete、truncate、impdp/imp大批量数据变理时。 2、数据变更量超过10%时。 查询哪些表需要收集统计信息 col table_name for a30 col object_type for a30 select owner, table_name, object_type, stale_stats, to_char(LAST_ANALYZED,'yyyy-mm-dd hh34:mi') last_analyzed from dba_tab_statistics where owner = 'HT' and (stale_stats = 'YES' or last_analyzed is null);

3、练习题1、测试统计信息阈值: 变更量超过10%


  • 创建测试表:
create table ht.test as select * from dba_objects;
  • 收集统计信息:
exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'HT',tabname => 'TEST',method_opt => 'for all columns size repeat',no_invalidate => FALSE,degree => 4,cascade => TRUE);
  • 删除10%数据:
SQL> DELETE FROM ht.TEST WHERE ROWNUM<=(select count(1) from ht.TEST)*0.1; 8632 rows deleted. SQL> commit; Commit complete. exec dbms_stats.flush_database_monitoring_info; --刷新变更信息
  • 查看数据变更信息
set line 200 col table_owner for a10 col table_name for a30 col pname for a20 col spname for a20 select table_owner,table_name,partition_name pname,subpartition_name spname,inserts,updates,deletes from dba_tab_modifications where table_owner='HT'; TABLE_OWNE TABLE_NAME PNAME SPNAME INSERTS UPDATES DELETES ------ --- --- --- ---- ---------------- ----------- -------------- -- -- ---------- -- ---------- -- -- -- ---------- HT TEST 0 0 8632
  • 查看统计信息是否过期
col table_name for a30 col object_type for a30 COL last_analyzed for a20 select owner, table_name, object_type, stale_stats, to_char(LAST_ANALYZED,'yyyy-mm-dd hh34:mi') last_analyzed from dba_tab_statistics where owner = 'HT' AND TABLE_NAME='TEST'; OWNER TABLE_NAME OBJECT_TYPE STALE_STA LAST_ANALYZED ---------- ---------------------- ------------------------------ --------- -------------------- HT TEST TABLE NO 2017-08-18 21:26
  • 再删除一行数据:
DELETE FROM ht.TEST WHERE ROWNUM=1; exec dbms_stats.flush_database_monitoring_info; --刷新变更信息
  • 再次查看统计信息是否过期
col table_name for a30 col object_type for a30 COL last_analyzed for a20 select owner, table_name, object_type, stale_stats, to_char(LAST_ANALYZED,'yyyy-mm-dd hh34:mi') last_analyzed from dba_tab_statistics where owner = 'HT' AND TABLE_NAME='TEST';

4、小结


哪些情况需要从新收集统计信息, 1、业务表数据被delete、truncate、impdp/imp大批量数据变更时。 2、数据变更量超过10%时,统计信息状态标记为过期
信息 统计 数据 数据库 业务 对象 大批量 字典 情况 a.m. 查询 测试 特殊 一行 不断 任务 再次 大部分 定期更新 小结 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全教育知识资料小学生 张家口廊坊金蝶网络技术 如何参与国家网络安全周 安宁创新软件开发价格信息 12306订票服务器什么样 业务网络技术高手 豆客服务器能玩cs吗 上海软件开发驻场哪里好 不属于电子书数据库的有哪些 中关村软件开发 网络安全责任的基本原则 深度学习服务器显卡 怎样运行一个数据库管理系统 软通软件开发对专业有要求吗 华为服务器管理口ip忘了 软件开发与项目管理专科大学 软件开发工程师培训哪家好 江苏安卓智能产品软件开发 大数据在网络安全 我的世界多人联机无法进入服务器 软件开发行为规范 互联网未来科技大会 上海电力系统软件开发 面试数据库和redis sql 系统带数据库吗 服务器连续十年销量第一 如何控制服务器云终端 海曙应用软件开发平台 互联网金融科技行业发展前景 计算机一级网络技术考试答案
0