首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Oracle实例之HWM(高水位线)性能优化

Oracle实例之HWM(高水位线)性能优化

作者头像
星哥玩云
发布于 2022-08-17 08:20:02
发布于 2022-08-17 08:20:02
1.6K0
举报
文章被收录于专栏:开源部署开源部署

最近BI同事反馈说一张表的数据查询非常慢,这个表数据总共不到1W行数据,这么一说我们首先想到的是高水位带来的性能问题,即高水位线下占用过多数据块,而这些数据块其实是部分数据占用,大多数是空闲的数据块。

我们知道高水位线下的数据块在全表扫描时都要做,所以扫描的数据块可能远远多于实际的存数据的数据块。

一、表统计信息收集

要想得到准确的高水位信息,必须先收集统计信息,这样得到的才相对比较准确。

ANALYZE TABLE  table_name ESTIMATE STATISTICS;

ANALYZE TABLE  table_name  COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES FOR ALL INDEXED COLUMNS;

execute dbms_stats.gather_table_stats(ownname => 'OWNER', tabname => 'TABLE_NAME' , estimate_percent => null ,method_opt => 'for all indexed columns' ,cascade => true);

二、表信息查看

查看表的块、行信息

select t.TABLE_NAME,t.NUM_ROWS,t.BLOCKS,t.empty_blocks,t.LAST_ANALYZED from dba_tables t where table_name in ('TABLE_NAME');

SELECT COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)) USED_BLOCK FROM  TABLE_NAME;

上述查询结果显示,当前表行数是9651行,有716119个数据块被使用(HWM下的数据块),有0个未使用的数据块(HWM上的数据块)

实际数据占用的数据块数量为:152

综合可以看出,高水位线下其实有716119-152个数据块可以释放,这样每次全表扫描只需要扫描152个数据块即可。

通过查看段大小佐证记录数和表大小关系是否一致,通过下面的查看段大小为5.5G,记录9651行几乎不可能达到这个大小,所以基本可以断定个里面有很多空闲的块。

select segment_name,bytes/1024/1024/1024 TSize_GB from dba_segments where segment_name='table_name' ---5876219904

三、问题原因

什么情况会导致上面的问题呢,即高水位下存在很多未使用的数据块?一般是大表(插入很多记录后),经过批量删除delete操作,未释放高水位导致的。

1.全表扫描要读取高水位线下的所有数据块,无论是否含有数据。 2.如果在插入数据的时候使用了append关键字,即使高水位线下有空闲的数据库,也会从高水位线上面的数据库做分配,也就是高水位线会上升。

四、降低高水位方法

1. alter table table_name move; 此方法可释放高水位,但需要重建索引 2.alter table table_name shrink space; 此方法可释放高水位,但执行前需要开启行移动,alter table table_name enable row movement; 3.emp/imp的方式重建表数据 4.drop/create方式重建表 5.truncate表 6.alter  table  table_name  deallocate  unused  DEALLOCATE UNUSED为释放HWM上面的未使用空间,但是并不会释放HWM下面的自由空间,也不会移动HWM的位置. 五、高水位调整实施 1.统计信息收集(如上) 2.执行计划查看

SQL> set autotrace trace ; SQL> set timing on; SQL> SELECT count(*) FROM TABLE_NAME;

3.表移动

alter table table_name move;

报错:ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired查看被锁对象:select object_name,machine,s.sid,s.serial#from vlocked_object l,dba_objects o ,vsession swhere l.object_id = o.object_id and l.session_id=s.sid;

执行后再查看执行计划统计信息

看到统计信息访问的数据块已经降下来了,然后执行全表扫描,速度也是飞快。

4.索引重建

alter index  index_name  rebuild  online;

六、库高水位对象统计

①比较表的行数和表的大小关系。如果行数为0,而表的当前占用大小减去初始化时的大小(INITIAL_EXTENT)后依然很大,那么说明该表有高水位。

②行数和块数的比率,即查看一个块可以存储多少行数据。如果一个块存储的行数少于5行甚至更少,那么说明有高水位。注意,这两种方法都不是十分准确,需要再对查询结果进行筛选。需要注意的是,在查询表的高水位时,首先需要分析表,以得到最准确的统计信息。

SELECT D.OWNER,       ROUND(D.NUM_ROWS / D.BLOCKS, 2),       D.NUM_ROWS,       D.BLOCKS,       D.TABLE_NAME,  ROUND((d.BLOCKS*8-D.INITIAL_EXTENT/1024)/1024)  t_size   FROM DBA_TABLES D  WHERE D.BLOCKS > 10   AND ROUND(D.NUM_ROWS / D.BLOCKS, 2) < 5  AND d.OWNER NOT LIKE '%SYS%' ; 或: SELECT OWNER,       SEGMENT_NAME TABLE_NAME,       SEGMENT_TYPE,       GREATEST(ROUND(100 * (NVL(HWM - AVG_USED_BLOCKS, 0) /                       GREATEST(NVL(HWM, 1), 1)),                       2),                 0) WASTE_PER   FROM (SELECT A.OWNER OWNER,               A.SEGMENT_NAME,               A.SEGMENT_TYPE,               B.LAST_ANALYZED,               A.BYTES,               B.NUM_ROWS,               A.BLOCKS BLOCKS,               B.EMPTY_BLOCKS EMPTY_BLOCKS,               A.BLOCKS - B.EMPTY_BLOCKS - 1 HWM,               DECODE(ROUND((B.AVG_ROW_LEN * NUM_ROWS *                             (1 + (PCT_FREE / 100))) / C.BLOCKSIZE,                             0),                       0,                       1,                       ROUND((B.AVG_ROW_LEN * NUM_ROWS *                             (1 + (PCT_FREE / 100))) / C.BLOCKSIZE,                             0)) + 2 AVG_USED_BLOCKS,               ROUND(100 *                     (NVL(B.CHAIN_CNT, 0) / GREATEST(NVL(B.NUM_ROWS, 1), 1)),                     2) CHAIN_PER,               B.TABLESPACE_NAME O_TABLESPACE_NAME           FROM SYS.DBA_SEGMENTS A, SYS.DBA_TABLES B, SYS.TS$ C         WHERE A.OWNER = B.OWNER           AND SEGMENT_NAME = TABLE_NAME           AND SEGMENT_TYPE = 'TABLE'           AND B.TABLESPACE_NAME = C.NAME)  WHERE GREATEST(ROUND(100 * (NVL(HWM - AVG_USED_BLOCKS, 0) /                       GREATEST(NVL(HWM, 1), 1)),                       2),                 0) > 50   AND OWNER NOT LIKE '%SYS%'   AND BLOCKS > 100  ORDER BY WASTE_PER DESC;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
我的写作成长之路
2020年3月,我发表了自己的第一篇技术博客,那一年我在上大二。到今天为止,我已经坚持写作四年半多的时间,包括多个技术社区和写作平台,在这期间创作了包括博文和技术专栏、公号文章共300余篇,全网粉丝近1.5万,浏览量总计100万以上。回想我这几年的写作经历,贯穿了校园和工作时期,颇有些值得回味。刚好又到了一年的1024,于是就想向大家真诚的分享一下我的写作成长之路。
闫同学
2024/10/23
4402
关于技术写作过程的思考与总结
2024.4.14日腾讯云+社区组织了一次关于技术写作的交流,参与分享的嘉宾需要到北京与网友进行线下的交流。本次交流我也是提前一周才接收到的邀请,开始还是犹豫了一下是否要去,犹豫的原因是不知道说点什么,但最后经过考虑再三还是应邀了,因为我觉得首先对话题确实比较感兴趣,同时也是提升自己一个不错的机会。 行程回来后,我整理了所思、所想、所感分为以下几个部分介绍,希望能给大家做一个借鉴。
研究僧
2024/04/22
2560
技术写作 —— 一种独特的倒逼成长的方式
技术写作的目的和意义是什么?在我看来,技术写作是 一种独特的倒逼成长的方式,它能帮助我们在思维、表达、自律等多个方面实现成长。
陈明勇
2024/07/25
3762
技术写作 —— 一种独特的倒逼成长的方式
你在B站看番剧,别人在B站学Web开发
有网友提问:Web开发还有前途吗? 知乎高赞回答:“这世界已经是Web的了。” 这个回答,小异太有共鸣了。 记得乔布斯曾经说过,未来不再有互联网公司,因为未来所有的企业都会有互联网部门,WEB就是人类的未来。我们现在每天所看到的浏览器界面、小程序界面...,若是追本溯源,它们实质上就是一张张网页。  确实,“WEB在手,天下我有!”这句口号不是随便说说是的。Web开发工程师就像魔术师一般,敲击键盘就能施展魔法,给网站来个惊喜大变身。  每当看到那些漂亮新颖的网站的时候,小异总是忍不住F12一下,一览网页背后
程序猿DD
2023/04/04
4900
你在B站看番剧,别人在B站学Web开发
2016年总结
2016年,坚持做了几件事:1、坚持写博客;2、坚持维护公众号;3、坚持答疑解惑;4、坚持学习;5、坚持早起;6、坚持锻炼;7、坚持存钱……
牛老师讲GIS
2018/10/23
6820
2016年总结
CSDN TOP1“一个处女座的程序猿“如何通过写作成为百万粉丝博主?
昨晚有幸参加阿里云和InfoQ联合创办的创作者训练营,第一节课分享的老师是CSDN TOP1的“一个处女座的程序猿“。我把老师的分享整理起来,希望能对写博客迷惘你有所帮助,能快速找到自己的定位,大家都向着成为百万粉丝博主的目标去努力。
Lansonli
2022/07/28
7031
CSDN TOP1“一个处女座的程序猿“如何通过写作成为百万粉丝博主?
CSDN如何获得铁粉?
CSDN作为中国IT人士学习、成长、成功的平台,提供了获取高质量粉丝的机会。本博客将探讨如何通过CSDN获得铁粉的方法和重要性,以及铁粉功能的规则和意义。
猫头虎
2024/04/08
4340
CSDN如何获得铁粉?
犀牛鸟少年 | 华师大二附中余泽玮的科研进阶之旅
导 语 余泽玮同学现就读于华东师范大学第二附属中学,曾连续三年参与犀牛鸟中学科学人才培养计划。2022年在北航刘偲教授与华师大二附中王振堂老师的指导下,其项目《用深度学习自动生成音乐诱发老龄群体积极情绪》获项目终期评优唯一金奖。本文让我们跟随泽玮,了解他在犀牛鸟项目中的科研进阶之旅。 结缘犀牛鸟:初入信息技术科研领域 2020年,正在读初二的我发现了犀牛鸟中学科学人才培养计划,这个项目丰富的课程内容吸引我参与了科研基础课程的学习。一方面跟随高校老师学习基础知识,另一方面我还自学视频课程,特别是通过学习p
腾讯高校合作
2023/04/04
7290
犀牛鸟少年 | 华师大二附中余泽玮的科研进阶之旅
CSDN铁粉获取攻略
博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨
默 语
2024/11/20
1980
CSDN铁粉获取攻略
2022年终总结----大学生技术自媒体成长之路
我有一个习惯就是每一篇文章都喜欢做一个封面,这里是我做过的所有封面:(用的软件在以前的文章中提到过,感兴趣的话可以去看一下)
是Dream呀
2023/01/17
3450
2022年终总结----大学生技术自媒体成长之路
人才缺口达30万!程序员拿下这个证书有多香?!
“程序员能纯靠技术渡过中年危机吗?” ▲截图来源于知乎 知乎上的这个提问,吸引了大批码农留言,热赞均表示“能,很难”。因为难逃这两种结局: • 没精力学习,技术一迭代,被淘汰。 •  有技术,90%公司不需要,年纪大了被淘汰。 这一现象的背后反映了程序员的技术与岗位被高度垄断,即: 90%的资源集中在1%的互联网公司。 这也使得大部分程序员,刚一入职便看到了技术的尽头。 只是一味埋头学习显然不行,找到能让技术充分赋能的岗位,同样重要! 那么,程序员怎么才能接触前沿技术,并顺利入职匹配的岗位呢? 大厂高薪技
double
2022/03/10
2.4K0
大厂已经不收一本以下学历的员工了......
今年大家期待的金三银四似乎消失了,不少粉丝跟我反馈,投了上百份简历全都石沉大海。 再逛逛脉脉,映入眼帘的就是这样一条提问: 我想说难,很难!除非你厉害到公司愿意花钱挖你,否则就算你是IT大佬,学历不过关,机器也会直接把你过滤掉。 随着越来越多人涌入IT行业,程序员之间的内卷也愈发严重,除了技术卷,学历上更是卷得“要命”! 尤其在大厂的抢人大战中,他们往往只会高薪聘请少量学历高、技术硬的顶级人才,而把绝大多数基础岗位低价外包出去。 所以,底层程序员想要纯靠技术换取一个高薪未来的时代已经一去不返,早日提升
猿天地
2022/04/24
5540
大厂已经不收一本以下学历的员工了......
那个能力很强的程序员学历造假,被辞退了!
近日,大厂程序员在知乎吐槽“能力很强的同事学历造假,被辞了”,引发热议。 “ 本科 211,硕士去了哥伦比亚大学,因为 GPA 过低,第一学期就被开除。国外黑了两年,造了个假学历回国,竟然还过了背调。 不少网友震惊:大厂程序员已经卷到,211 学生都需要学历造假!? 其实,程序员学历匹配不上能力的问题一直存在。 前不久 32 万人参与的“是否开除学历造假但能力强的员工”投票中,竟有 26 万人反对开除,且纷纷抗议: 想靠技术来弥补学历劣势,真的好难! 的确,计算机行业的高薪诱惑及发展前景,让相关专业毕业生
崔庆才
2022/03/04
8380
30岁,被优化了。
2021,大厂裁员消息不断。在这股“结构优化”的浪潮里,不少程序员瑟瑟发抖,还没被裁,就开始惶恐找不到下一份工作。 在脉脉,某大厂技术leader发帖吐槽“30岁被裁,6个月了,至今未找到工作”,引起广泛共鸣。 过去180天,发起1496次沟通,投了347次简历,收到97份面试邀请。 然而,想去的岗位均以学历过低为由拒绝了他… 不少网友唏嘘:没有学历,连拼能力的资格都没有了! 的确,在这个本科生“烂大街”的时代,大厂的实习生,清一色都是双一流、985、世界排名前100的名校,正式的校招生更是不逞多让。
芋道源码
2022/03/04
4120
阿里月薪5万疯狂扩招程序员,看到要求我傻眼了!
本科211,硕士去了哥伦比亚大学,因为GPA过低,第一学期就被开除。国外黑了两年,造了个假学历回国,竟然还过了背调。
Python编程与实战
2021/08/25
9800
阿里月薪5万疯狂扩招程序员,看到要求我傻眼了!
人才缺口达30万!java程序员拿下这个证书有多吃香?!
近日,一程序员在脉脉自曝“年薪37W带12人团队,因学历内推腾讯被拒”,引发争议。 末流院校,带12人前端团队,到手37w股票20w,过硬的编程技术让他觉得可以出去“闯闯”;内推到腾讯,电话里聊得挺好,结果第二天说学历不够不给安排面试…… 不少网友唏嘘:心态崩了,这年头连内推都开始卷学历了?! 其实,现实早已如此,而且不只内推,任何程序员职场进阶的关键时刻,审查技术的同时,学历都会优先被拿出来拷问:   ▷  想升职加薪进大厂   ▷  想接触核心业务施展技术抱负   ▷  想躲避末位淘汰,顺利渡过中年危机
java思维导图
2022/03/24
6510
【年度总结】关于三掌柜2023全年回顾和总结
面临严峻的技术圈“寒潮”,无人能够幸免,虽然我是主动更换工作,但是我也在换工作的时候遇到了互联网寒冬,亲自体验到了这种萧条的影响有多么的大。不过好在我在2022年底就已经入职工作,只是到了2023年才满6个月,这6个月的工作得到了领导和同事的肯定,顺利转正。本以为转正之后,可以过一段轻松的开发日子,结果公司上层出了问题,一把手被“双规”,至此松懈的开发日子到头了,总行特派的审计小组从4月底入驻,截止目前依然没有撤走,各种搞事情,查问题,搞得上上下下疲于应对各种审计操作。不管别的,总之我顺利转正了,饭碗保住了,天塌下来有位置高的顶着,哈哈。
三掌柜
2023/12/24
6754
【年度总结】关于三掌柜2023全年回顾和总结
前端入行两年--教会了我这些道理
光阴似箭,日月如梭。不得不感慨时间过得很快,2017差不多结束了,一下子我从事前端开发的时间已经两年了。这两年可以说是一波三折,回想这两年的经历,让我忍不住了写下了这篇文章,记录自己在这两年经历的种种种种。这篇文章,打算当做自己的一个经历记录,而对于看这篇文章的你,希望你们能从我的经历里面吸取教训,希望即将步入前端和已经从事前端的你,不要想我这样一波三折,在前端的路走得更好。
守候i
2018/08/22
4980
印象最深的都是关于 IoTConsensus 共识协议?听听新晋 Committer 怎么说!
2022 年 12 月 19 日、28 日,经 Apache IoTDB 社区投票,张洪胤、朱海铭成为 Apache IoTDB Committer,而这两位同学都深度参与了 1.0 版本物联网共识协议 IoTConsensus 的开发中。今天将和大家分享他们两位与 Apache IoTDB 的故事。
Apache IoTDB
2023/03/21
7240
印象最深的都是关于 IoTConsensus 共识协议?听听新晋 Committer 怎么说!
自学计算机转行成功,Committer顾凌锐做对了什么?
欢迎来到全新栏目【开源星风采】!来这里,聆听社区小伙伴成长背后的故事,见证他们每一次进步的瞬间!
OpenMMLab 官方账号
2023/10/08
3061
自学计算机转行成功,Committer顾凌锐做对了什么?
推荐阅读
相关推荐
我的写作成长之路
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档