首页 / 更多教程 / 如何确定非分区表高水位虚高
如何确定非分区表高水位虚高
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何确定非分区表高水位虚高,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1527字,纯文字阅读大概需要3分钟。
内容图文
如何确定非分区表高水位虚高:
一般认为分配给表使用的数据块空间远大于表实际占用存储空间时,我们就认为表的高水位虚高,涉及该表的查询sql存在不必要的消耗,需要进行优化。
通过比较数据占用和分配数据块的空间比对来确定哪些表的高水位虚高:
sys用户执行(如果数据库支持statistics_level配置,一般9.2之后都支持):
SQL>exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO();
再执行:
SELECT a.owner || ‘.‘ || a.table_name "Table",
a.num_rows,
a.avg_row_len,
b.inserts,
b.deletes,
a.num_rows + nvl(b.inserts, 0) - nvl(b.deletes, 0) total_rows,
round(a.avg_row_len *(a.num_rows + nvl(b.inserts, 0) - nvl(b.deletes, 0)) / 1024 / 1024,4) "Calculate_Sizle(Mb)估算的大小",
c.bytes / 1024 / 1024 "Segment_Size(Mb)段大小",
(a.avg_row_len * (a.num_rows + nvl(b.inserts, 0) - nvl(b.deletes, 0))) /c.bytes "使用率"
FROM dba_tables a
LEFT JOIN all_tab_modifications b
ON a.owner = b.table_owner
AND a.table_name = b.table_name
INNER JOIN dba_segments c ON a.owner = c.owner
AND a.table_name = c.segment_name
WHERE a.last_analyzed IS NOT NULL
AND a.partitioned = ‘NO‘
--AND b.deletes
> 0
AND a.owner LIKE ‘%DLP114_SXU01%‘
AND a.table_name LIKE ‘DEBUG_MSG‘
--AND c.bytes /
1024 / 1024 > 100
--AND (a.avg_row_len * (a.num_rows + nvl(b.inserts, 0) - nvl(b.deletes, 0))) / c.bytes
< 0.3
ORDER BY b.deletes DESC;
注意: 如果数据库不支持statistics_level配置的话,请使用数据库用户对表单独执行ANALYZE后查看。
Sql中关键条件说明:
avg_row_len * (a.num_rows + nvl(b.inserts, 0) - nvl(b.deletes, 0))) / c.bytes < 0.3:表单条数据的平均占用空间*当前数据条数=表数据理论占用数据块大小,c.byte是表实际占用的数据块大小。用这两个比率来分析出表占用的数据块的实际使用率。
c.bytes / 1024 / 1024 > 100:表实际占用数据块大小,对于表实际占用很小的表来说,认为消耗是可以接受的,可以认为不具优化价值,可以选择忽略这些表的虚高。
原文:http://www.cnblogs.com/zihanxing/p/6852691.html
内容总结
以上是互联网集市为您收集整理的如何确定非分区表高水位虚高全部内容,希望文章能够帮你解决如何确定非分区表高水位虚高所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。