微课sql优化(5)、统计信息收集(3)-关于默认采样率
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,1、关于默认采样率在不同版本的Oracle上统计信息收集的默认值不一定相同,例如: ESTIMATE_PERCENT :默认值: 9i:100% 10g:DBMS_STATS.AUTO_SAMPLE_
千家信息网最后更新 2025年01月21日微课sql优化(5)、统计信息收集(3)-关于默认采样率
在不同版本的Oracle上统计信息收集的默认值不一定相同,例如: ESTIMATE_PERCENT :默认值: 9i:100% 10g:DBMS_STATS.AUTO_SAMPLE_SIZE(使用非常小的估计百分比) 11g:DBMS_STATS.AUTO_SAMPLE_SIZE(使用较大的估算百分比 - 100%) METHOD_OPT:默认值 : 9i:"FOR ALL COLUMNS SIZE 1",实际上没有详细的列统计。 10g和11g:"FOR ALL COLUMNS SIZE AUTO" - 此设置意味着DBMS_STATS决定哪些列添加直方图,制定更好的计划。 在11g中,使用ESTIMATE_PERCENT的默认值100%,统计信息收集尽可能准确。收集统计信息时间限制,在以前的版本中,100%的样本是不可能的,但是11g实现了一种新的哈希算法来计算统计数据而不是排序(在9i和10g中,"慢"部分通常是排序),这显着提高了收集时间和资源使用。
exec DBMS_STATS.DELETE_TABLE_STATS('HT','A_AMT'); exec dbms_stats.gather_table_stats('HT','A_AMT'); set line 200 col owner for a10 col table_name for a20 col LAST_ANALYZED for a30 SELECT owner, table_name, num_rows, sample_size, trunc(sample_size / num_rows * 100) estimate_percent, to_char(LAST_ANALYZED,'yyyy-mm-dd hh34:mi:ss') LAST_ANALYZED FROM DBA_TAB_STATISTICS WHERE owner='HT' and table_name='A_AMT'; oracle 10g测试结果 SQL> exec dbms_stats.gather_table_stats('HT','A_AMT'); PL/SQL procedure successfully completed. SQL> set line 200 SQL> col owner for a10 col table_name for a20 col LAST_ANALYZED for a30 SELECT owner, table_name, num_rows, sample_size, trunc(sample_size / num_rows * 100) estimate_percent, to_char(LAST_ANALYZED,'yyyy-mm-dd hh34:mi:ss') LAST_ANALYZED FROM DBA_TAB_STATISTICS WHERE owner='HT' and table_name='A_AMT';SQL> SQL> SQL> 2 3 4 5 6 7 8 OWNER TABLE_NAME NUM_ROWS SAMPLE_SIZE ESTIMATE_PERCENT LAST_ANALYZED ---------- -------------------- ---------- ----------- ---------------- ------------------------------ HT A_AMT 59968 59968 100 2017-09-22 02:07:47 SQL> !date Fri Sep 22 02:08:00 CST 2017 SQL> select version from v$instance; VERSION --------------------------------------------------- 10.2.0.5.0 SQL> oracle 11g测试结果 OWNER TABLE_NAME NUM_ROWS SAMPLE_SIZE ESTIMATE_PERCENT ---------- -------------------- ---------- ----------- ---------------- HT A_AMT 59968 59968 100
1、 Oracle 10g可能 使用非常小的估计百分比,建议手工100%收集,至少30%。 2、 在11g中,使用ESTIMATE_PERCENT的默认值100%,统计信息收集尽可能准确。-- 11g:DBMS_STATS.AUTO_SAMPLE_SIZE(使用较大的估算百分比 - 100%) 3、直方图收集: METHOD_OPT:默认值 , 10g和11g:"FOR ALL COLUMNS SIZE AUTO" - 此设置意味着DBMS_STATS决定哪些列添加直方图,制定更好的计划。 4、了解 统计信息收集: table statistics 、 index statistics 、 column statistics,各指标内容及作用 。
1、关于默认采样率
在不同版本的Oracle上统计信息收集的默认值不一定相同,例如: ESTIMATE_PERCENT :默认值: 9i:100% 10g:DBMS_STATS.AUTO_SAMPLE_SIZE(使用非常小的估计百分比) 11g:DBMS_STATS.AUTO_SAMPLE_SIZE(使用较大的估算百分比 - 100%) METHOD_OPT:默认值 : 9i:"FOR ALL COLUMNS SIZE 1",实际上没有详细的列统计。 10g和11g:"FOR ALL COLUMNS SIZE AUTO" - 此设置意味着DBMS_STATS决定哪些列添加直方图,制定更好的计划。 在11g中,使用ESTIMATE_PERCENT的默认值100%,统计信息收集尽可能准确。收集统计信息时间限制,在以前的版本中,100%的样本是不可能的,但是11g实现了一种新的哈希算法来计算统计数据而不是排序(在9i和10g中,"慢"部分通常是排序),这显着提高了收集时间和资源使用。
2、统计信息收集了什么,有什么作用
- table statistics
index statistics
如果需要使用索引,CBO 需要索引的前导列在查询条件中使用,如果没有查询条件或索引列包含所有查询结果,CBO更倾向使用全索引扫描或全表扫描。 BLEVEL: 从根结点到叶子结点的高度,用来计算叶子结点查找的成本。0表明根块和叶块是一样的。 LEAF_BLOCKS: 用于计算 full index scane及index range scan的成本 。 CLUSTERING_FACTOR : 基于索引的值计算表中记录的顺序程度。如果该值接近块的数量,表中记录有序存储。在这种情况下,索引条目在单个叶块往往指向相同的数据块中的行。如果该值接近表的行数,表示记录无序存储。在这种情况下,不太可能在同一叶块索引条目指向相同的数据块中的行。 DISTINCT_KEYS : 不同的索引值数量。在主键约束和唯一索引中,该值等于表记录数。 AVG_LEAF_BLOCKS_PER_KEY : 叶块的平均数量在每一个不同的值出现在索引中,四舍五入为最接近的整数。实施独特的索引和主键约束,这个值总是1(一个)。索引值在不同叶子结点出现的平均数量,在唯一索引和主键约束中,该值为总是这1。 AVG_DATA_BLOCKS_PER_KEY : 表中数据块指向同一索引值的平均数量。 NUM_ROWS : 索引中的行数
column statistics
NUM_DISTINCT : 计算选择性。(例: 1/NDV) LOW_VALUE and HIGH_VALUE: 对所有数据类型,CBO假设在高值和低值之间是均匀分布的。这些值用于计算范围扫描的选择性。 NUM_NULLS: 对存在空值的列,使用is null 和is not null查询时,计算选择性 DENSITY: 未收集直方图 Density = 1 / Number of distinct NON null values The number of distinct NON-null values for a column (COL1) on table TABLE1 can be obtained as follows: select distinct count(COL1) from TABLE1 where COL1 is not null; 收集直方图 A non-popular value is one that does not span multiple bucket end points. A popular value is one that spans multiple end points. For non-popular values the density is calculated as the number of non-popular values divided by the total number of values. Formula: Density = Number of non-popular values ---------------------------- total number of values We only use the density statistic for non-popular values. Popular values calculate the selectivity of a particular column values by using histograms as follows: The Selectivity for popular values is calculated as the number of end points spanned by that value divided by the total number of end points. Formula: Selectivity = Number of end points spanned by this value ------------------------------------------ total number of end points
3、练习3:10g和11g自动采样率测试
exec DBMS_STATS.DELETE_TABLE_STATS('HT','A_AMT'); exec dbms_stats.gather_table_stats('HT','A_AMT'); set line 200 col owner for a10 col table_name for a20 col LAST_ANALYZED for a30 SELECT owner, table_name, num_rows, sample_size, trunc(sample_size / num_rows * 100) estimate_percent, to_char(LAST_ANALYZED,'yyyy-mm-dd hh34:mi:ss') LAST_ANALYZED FROM DBA_TAB_STATISTICS WHERE owner='HT' and table_name='A_AMT'; oracle 10g测试结果 SQL> exec dbms_stats.gather_table_stats('HT','A_AMT'); PL/SQL procedure successfully completed. SQL> set line 200 SQL> col owner for a10 col table_name for a20 col LAST_ANALYZED for a30 SELECT owner, table_name, num_rows, sample_size, trunc(sample_size / num_rows * 100) estimate_percent, to_char(LAST_ANALYZED,'yyyy-mm-dd hh34:mi:ss') LAST_ANALYZED FROM DBA_TAB_STATISTICS WHERE owner='HT' and table_name='A_AMT';SQL> SQL> SQL> 2 3 4 5 6 7 8 OWNER TABLE_NAME NUM_ROWS SAMPLE_SIZE ESTIMATE_PERCENT LAST_ANALYZED ---------- -------------------- ---------- ----------- ---------------- ------------------------------ HT A_AMT 59968 59968 100 2017-09-22 02:07:47 SQL> !date Fri Sep 22 02:08:00 CST 2017 SQL> select version from v$instance; VERSION --------------------------------------------------- 10.2.0.5.0 SQL> oracle 11g测试结果 OWNER TABLE_NAME NUM_ROWS SAMPLE_SIZE ESTIMATE_PERCENT ---------- -------------------- ---------- ----------- ---------------- HT A_AMT 59968 59968 100
4、小结
1、 Oracle 10g可能 使用非常小的估计百分比,建议手工100%收集,至少30%。 2、 在11g中,使用ESTIMATE_PERCENT的默认值100%,统计信息收集尽可能准确。-- 11g:DBMS_STATS.AUTO_SAMPLE_SIZE(使用较大的估算百分比 - 100%) 3、直方图收集: METHOD_OPT:默认值 , 10g和11g:"FOR ALL COLUMNS SIZE AUTO" - 此设置意味着DBMS_STATS决定哪些列添加直方图,制定更好的计划。 4、了解 统计信息收集: table statistics 、 index statistics 、 column statistics,各指标内容及作用 。
索引
数据
统计
数量
信息
直方图
不同
百分
百分比
结点
查询
相同
叶子
指向
结果
选择性
测试
选择
驱动
较大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
农民工网络安全进行时
农商行网络安全讲话
网络安全写作文100字
数据库的连接信息保存在哪里
上海啸南网络技术电话
传统软件开发模型中不包括
第20届网络安全周
保障网络安全意识反思
网络技术人员先进事迹
互联网科技加农业
计算机网络技术专业实习周记大全
互联网科技怎么起名
恒意网络技术服务部
mysql数据库丢入容器
网络安全指数计算无量纲化
数据库启动后又自动关闭了
英雄联盟服务器崩溃9.3
我的世界服务器怎么允许活塞
eps数据库包括哪些内容
萨尔服务器
网络安全产品平台
赤壁市暧琪网络技术工作室
数据库查找表中的数据结构
软件开发环境英文简写
日常网络安全生活
常州营销软件开发销售
列国志数据库app
电脑网络安全黑板报边框
计算机三级网络技术重点章节
仿真教学软件开发平台