oracle表稅片整理,oracle_Oracle表碎片整理操作步骤详解,高水位线(HWL)下的许多数据 - phpStudy...
Oracle表碎片整理操作步骤详解
高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说oracle要做许多的无用功!因此oracle提供了shrink space碎片整理功能。对于索引,可以采取rebuild online的方式进行碎片整理,一般来说,经常进行DML操作的对象DBA要定期进行维护,同时注意要及时更新统计信息!
一:准备测试数据,使用HR用户,创建T1表,插入约30W的数据,并根据object_id创建普通索引,表占存储空间34M
SQL> conn /as sysdba
已连接。
SQL> select default_tablespace from dba_users where username='HR';
DEFAULT_TABLESPACE
------------------------------------------------------------
USERS
SQL> conn hr/hr
已连接。
SQL> insert into t1 select * from t1;
已创建 74812 行。
SQL> insert into t1 select * from t1;
已创建 149624 行。
SQL> commit;
提交完成。
SQL> create index idx_t1_id on t1(object_id);
索引已创建。
SQL> exec dbms_stats.gather_table_stats('HR','T1',CASCADE=>TRUE);
PL/SQL 过程已成功完成。
SQL> select count(1) from t1;
COUNT(1)
----------
299248
SQL> select sum(bytes)/1024/1024 from dba_segments where segment_name='T1';
SUM(BYTES)/1024/1024
--------------------
34.0625
SQL> select sum(bytes)/1024/1024 from dba_segments where segment_name='IDX_T1_ID';
SUM(BYTES)/1024/1024
--------------------
6
二:估算表在高水位线下还有多少空间可用,这个值应当越低越好,表使用率越接近高水位线,全表扫描所做的无用功也就越少!
DBMS_STATS包无法获取EMPTY_BLOCKS统计信息,所以需要用analyze命令再收集一次统计信息
SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name ='T1';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
4302 0 299248
SQL> analyze table t1 compute statistics;
表已分析。
SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name ='T1';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
4302 50 299248
SQL> col table_name for a20
SQL> SELECT TABLE_NAME,
2 (BLOCKS * 8192 / 1024 / 1024) -
3 (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB"
4 FROM USER_TABLES
5 WHERE table_name = 'T1';
TABLE_NAME Data lower than HWM in MB
-------------------- -------------------------
T1 5.07086182
三: 查看执行计划,全表扫描大概需要消耗CPU 1175
SQL> explain plan for select * from t1;
已解释。
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 299K| 28M| 1175 (1)| 00:00:15 |
| 1 | TABLE ACCESS FULL| T1 | 299K| 28M| 1175 (1)| 00:00:15 |
--------------------------------------------------------------------------
四:删除大部分数据,收集统计信息,全表扫描依然需要消耗CPU 1168
SQL> delete from t1 where object_id>100;
已删除298852行。
SQL> commit;
提交完成。
SQL> select count(*) from t1;
COUNT(*)
----------
396
SQL> exec dbms_stats.gather_table_stats('HR','T1',CASCADE=>TRUE);
PL/SQL 过程已成功完成。
SQL> analyze table t1 compute statistics;
表已分析。
SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name ='T1';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
4302 50 396
SQL> explain plan for select * from t1;
已解释。
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 396 | 29700 | 1168 (1)| 00:00:15 |
| 1 | TABLE ACCESS FULL| T1 | 396 | 29700 | 1168 (1)| 00:00:15 |
--------------------------------------------------------------------------
五:估算表在高水位线下还有多少空间是无数据的,但在全表扫描时又需要做无用功的数据
SQL> SELECT TABLE_NAME,
2 (BLOCKS * 8192 / 1024 / 1024) -
3 (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB"
4 FROM USER_TABLES
5 WHERE table_name = 'T1';
TABLE_NAME Data lower than HWM in MB
-------------------- -------------------------
T1 33.5791626
六:对表进行碎片整理,重新收集统计信息
SQL> alter table t1 enable row movement;
表已更改。
SQL> alter table t1 shrink space cascade;
表已更改。
SQL> select sum(bytes)/1024/1024 from dba_segments where segment_name='T1';
SUM(BYTES)/1024/1024
--------------------
.125
SQL> select sum(bytes)/1024/1024 from dba_segments where segment_name='IDX_T1_ID
';
SUM(BYTES)/1024/1024
--------------------
.0625
SQL> SELECT TABLE_NAME,
2 (BLOCKS * 8192 / 1024 / 1024) -
3 (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB"
4 FROM USER_TABLES
5 WHERE table_name = 'T1';
TABLE_NAME Data lower than HWM in MB
-------------------- -------------------------
T1 33.5791626
SQL> exec dbms_stats.gather_table_stats('HR','T1',CASCADE=>TRUE);
PL/SQL 过程已成功完成。
这个时候,只剩下0.1M的无用功了,执行计划中,全表扫描也只需要消耗CPU 3
SQL> SELECT TABLE_NAME,
2 (BLOCKS * 8192 / 1024 / 1024) -
3 (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB"
4 FROM USER_TABLES
5 WHERE table_name = 'T1';
TABLE_NAME Data lower than HWM in MB
-------------------- -------------------------
T1 .010738373
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 396 | 29700 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T1 | 396 | 29700 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
总共只有5个块,空块却有50个,明显empty_blocks信息过期
SQL> select blocks,empty_blocks,num_rows from user_tables where table_name='T1';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
5 50 396
SQL> analyze table t1 compute statistics;
表已分析。
SQL> select blocks,empty_blocks,num_rows from user_tables where table_name='T1';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
5 3 396
相关阅读:
c++验证哥德巴赫猜想
对学Oracle数据库初学者的开场篇
基于Android实现3D翻页效果
Android列表对话框用法实例分析
在C语言中转换时间的基本方法介绍
脚本合并提升javascript性能示例
jquery获取复选框被选中的值
详解:一张桌面看懂Win10 11个新特性
win10预览版修改注册表后无法升级解决办法
分享下Asp.Net面试题目及答案集合
java中文乱码之解决URL中文乱码问题的方法
HTML语法大全_html语言语法大全(必看)
iOS中UIWebView网页加载组件的基础及使用技巧实例
s:set 和 s:date 使用, 在jsp判断日期
oracle表稅片整理,oracle_Oracle表碎片整理操作步骤详解,高水位线(HWL)下的许多数据 - phpStudy...相关推荐
- ios php 表单提交图片上传,axios发送post请求提交图片表单步骤详解
这次给大家带来axios发送post请求提交图片表单步骤详解,axios发送post请求提交图片表单的注意事项有哪些,下面就是实战案例,一起来看一下. DOME 接口const userUploadA ...
- oracle通过dblink连接mysql配置详解(全Windows下)
oracle通过dblink连接mysql配置详解(全Windows下) 关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也 ...
- oracle加密传输的种子,oracle net manager 数据传输安全步骤详解
简介 Net Manger可以管理服务命名和监听程序. 所谓监听程序就是一个Oracle服务器上进程,负责监听/响应客户端对Oracle服务的请求.之前我们在安装数据库实例时,同时已经安装了一个监听程 ...
- 抢鲜体验:Oracle 19C单实例数据库安装步骤详解
抢鲜体验:Oracle 19C单实例数据库安装步骤详解 原创: 李宏达 数据和云 今天 作者:李宏达,云和恩墨北区交付工程师. 大家一直期待的 Oracle Database 19c 今天已经提供公开 ...
- Linux系统安装oracle客户端步骤详解
Linux系统安装oracle客户端步骤详解 项目需要在linux系统上安装oracle客户端访问windows下安装的数据库,所以写了这篇文章,在安装时候搜索了很多博客,但是我发现大部分都是有问题的 ...
- 2.6顺序表和链表的优缺点(区别、特点)详解
顺序表和链表由于存储结构上的差异,导致它们具有不同的特点,适用于不同的场景.本节就来分析它们的特点,让读者明白 "在什么样的场景中使用哪种存储结构" 更能有效解决问题. 通过系统地 ...
- easycode 表配置_idea的easyCode的 MybatisPlus模板的配置详解
EasyCode 插件 EasyCode 插件 是一款根据表结构生成代码的很方便的Idea插件, 强烈推荐. 并且可以自定义模板来控制生成的类 我在使用的过程中发现一些问题,现在把解决办法记录下来, ...
- python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)
链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...
- 计算机碎片整理,计算机磁盘碎片整理
出国留学网小编为你整理"2017计算机资格WindowsXP考点磁盘碎片整理"哦,介绍了WindowsXP等相关内试题,欢迎广大网友前来学习,希望对你有所帮助!更多资讯关注本网站的 ...
最新文章
- H5小游戏 - canvas涂鸦板
- 深度学习优化算法大全系列3:NAG(Nesterov Acceleration Gradient)
- 无继承情况下的对象构造
- 模拟退火算法介绍和实例实现
- Java安全生态-Java加解密API详解-Java安全框架官方文档翻译:对称/非对称加密、数字签名、数字证书、安全通信、密钥库等
- 芭比Q了,腰间盘给整突出了
- vue项目中如何解决跨域问题
- Halcon区域region系列(1)相关的算子
- UE4中实现鼠标单选空间中的模型、Ctrl键多选、空间打点框选功能。
- 【整理】轴体结构和润轴
- windows操作系统杂谈
- 元宇宙基础-Three.js | 大帅老猿threejs特训营
- 拉钩网前端项目实战04
- CityMaker学习教程13 osg模型的移动
- 计算机专业期末背书,每到期末,我就后悔读了这个专业
- mysql查找操作返回值出现 - [User{id=1, userName='null', date=Sun Sep 16 00:00:00 CST 2018}]
- 帮派红包 概率_电子游戏如何教我关于连锁帮派
- ERROR 1226 (42000):User 'root' has exceeded the 'max_questions' resource (current value: 2)
- PS常见问题03——如何绘制水平、竖直及45°直线
- Boyd Corporation宣布其南亚工厂获得ISO 13485:2016认证
热门文章
- 设计数据密集型应用—— 数据系统的未来(12 下)
- 余情未了用计算机弹,2018年职称计算机考试题库(7)
- (ECCV-2020)超越部分模型。用细粒度的部分池化进行行人检索(和一个强大的卷积基线)
- 系统架构设计师软件生命周期_云架构师生命中的一天
- js 将时间戳转化为小时分钟
- I.MX6U-系统移植-3-uboot启动流程
- python编写一个端口扫描器
- linux vim set ff,Linux命令:vi | vim命令
- 读软件架构师应该知道的97件事的自己理解
- 【HTTP 404 - 指定されたURLは見つかりません。】错误及解决