Oracle段收缩功能
1. 了解段收缩
应用场景:如果对一张表频繁执行插入、更新和删除操作,时间长了可能会出现大量碎片,Oracle针对这种场景推出段收缩功能,以便减少碎片。
Oracle的段收缩执行两项不同的任务:(1)压缩数据行,(2)移动高水位线(HWM)。
因为重新定位HWM可能阻塞用户的DML操作,而存粹的收缩操作则不会产生这种影响。
操作期间会维护表上的所有索引。
2. 自动执行Segment Advisor
## 2.1 在OEM查看并设置 ##
服务器 -> Oracle Scheduler -> 自动维护任务 -> 配置,来启用或禁用“段指导”任务,同时这里还可以设置“优化程序统计信息搜集”,“自动 SQL 优化”
## 2.2 使用SQL命令设置 ##
```
--禁用自动执行Segment Advisor
BEGIN
dbms_auto_task_admin.disable(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
END;
/
--启用自动执行Segment Advisor
BEGIN
dbms_auto_task_admin.enable(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
END;
/
<h1 id="3">3. 收缩段</h1>
**收缩段核心步骤:**
--启用行移动
alter table T3 enable row movement;
--与大多数Oracle SQL命令不同,添加COMPACT关键字后,实际执行的操作不多反少,即HWM不移动
alter table T3 shrink space compact;
--去掉COMPACT关键字后,执行HWM移动
alter table T3 shrink space;
--禁用行移动
alter table T3 disable row movement;
**实验:执行段分析和收缩操作**
## 3.1 创建表T3 ##
--创建表T3
create table T3 (c1 varchar2(4000));
## 3.2 往T3插入1000行(使用大值),然后使用小值更新这些行 ##
--往T3插入1000行(使用大值)
begin
for i in 1..1000 loop
insert into T3 select rpad(i,3900,'*') from dual;
end loop;
commit;
end;
/
--T3大小
select segment_name, BYTES/1024/1024 "MB" from user_segments where segment_name = 'T3';
SEGMENT_NAME MB
T3 8
--使用小值更新这些行
update t3 set c1='1';
commit;
--此时再次查询表T3大小是不变的
## 3.3 设置启动Segment Advisor作业 ##
variable task_id number
declare
name varchar2(100);
descr varchar2(500);
obj_id number;
begin
name := ''; --unique name
descr := 'Check T3 table';
dbms_advisor.create_task('Segment Advisor', :task_id, name, descr, null);
dbms_advisor.create_object(name, 'TABLE', 'JINGYU', 'T3', null, null, obj_id);
dbms_advisor.set_task_parameter(name, 'RECOMMEND_ALL', 'TRUE');
dbms_advisor.execute_task(name);
end;
/
执行过程如下:
SQL> conn jingyu/jingyu
Connected.
SQL> variable task_id number
SQL> declare
2 name varchar2(100);
3 descr varchar2(500);
4 obj_id number;
5 begin
6 name := ''; --unique name
7 descr := 'Check T3 table';
8 dbms_advisor.create_task('Segment Advisor', :task_id, name, descr, null);
9 dbms_advisor.create_object(name, 'TABLE', 'JINGYU', 'T3', null, null, obj_id);
10 dbms_advisor.set_task_parameter(name, 'RECOMMEND_ALL', 'TRUE');
11 dbms_advisor.execute_task(name);
12 end;
13 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.01
SQL>
SQL>
SQL> print task_id
TASK_ID
1358
根据上面的TASK_ID查询DBA_ADVISOR_FINDINGS
col owner for a20
col task_name for a20
col type for a20
select owner, task_id, task_name, type, message, more_info from dba_advisor_findings where task_id=1358;
OWNER TASK_ID TASK_NAME TYPE
MESSAGE
MORE_INFO
JINGYU 1358 TASK_1358 PROBLEM
The free space in the object is less than 10MB.
Allocated Space:8388608: Used Space:954000: Reclaimable Space :7434608:
## 3.4 执行段收缩 ##
alter table T3 enable row movement;
alter table T3 shrink space compact;
alter table T3 shrink space;
alter table T3 disable row movement;
--T3大小
select segment_name, BYTES/1024/1024 "MB" from user_segments where segment_name = 'T3';
SEGMENT_NAME MB
T3 .0625
可以看到,T3表由8M大小成功收缩成0.0625M大小。至此,完成T3表的shrink操作。
Oracle段收缩功能的更多相关文章
- 用mysql实现类似于oracle dblink的功能
用mysql实现类似于oracle dblink的功能 首先看看有没有federated 引擎. mysql> show engines; +------------+----------+ ...
- WordPress文章页添加展开/收缩功能
很多时候我们在WordPress上发布一些文章的时候里面都包含了很多的代码,我一般又不喜欢把代码压缩起来而喜欢让代码格式化显示,但是格式化显示通常会让文章内容看起来很多,不便于访问者浏览,所以今天就介 ...
- oracle修改审计功能
oracle修改审计功能 如果没有关闭审计功能,审计日志文件默认保存在位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/ 关闭审计:alter system set au ...
- oracle导入导出功能
1.普通版:oracle导入导出功能:导出exp 用户名/密码@SID file=f:\xx.dmp owner=用户名 导入imp 用户名/密码@SID full=y file=f:\xx.dmp ...
- dhtmlxtree 节点 展开收缩:新增了直接点 文本内容 也 实现了 展开收缩 功能(并记住了展开、收缩状态)
dhtmlxtree 节点 展开收缩通常情况我们按 +- 就实现了 展开收缩 功能,为了方便我们新增了直接点 文本内容 也 实现了 展开收缩 功能(并记住了展开.收缩状态) tree = new dh ...
- Oracle EBS WMS功能介绍(二)
Oracle EBS WMS功能介绍(二) (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处.否则请与本人联系,违者必究) 出货物流逻辑主要包括 1. 打包.能够进 ...
- mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)
一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取.共享与锁定. mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他se ...
- oracle数据库基础功能
一.oracle基本常用的数据类型 varchar(长度) 字符串char(长度) 字符number(x,y) x表示总位数 y表示保留小数点后几位数 eg面试题:number(5,3)最大的数是99 ...
- Oracle的AUTOTRACE功能
ORACLE9i在使用autotrace之前,需要作一些初始设置: 1.用sys用户运行脚本utlxplan.sql创建PLAN_TABLE表 脚本目录:(UNIX:$ORACLE_HOME/rdbm ...
随机推荐
- SQL执行效率1
第一种方法:使用insert into 插入,代码如下: ? 1 2 3 4 5 6 7 $params = array('value'=>'50′); set_time_limit(0); e ...
- *POJ 1222 高斯消元
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9612 Accepted: 62 ...
- Kafka设计解析(四)- Kafka Consumer设计解析
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/08/09/KafkaColumn4 摘要 本文主要介绍了Kafka High Level Con ...
- jQuery中设置form表单中action值与js有什么不同。。。。
jQuery中设置form表单中action值与js有什么不同.... HTML代码如下: <form action="" method="post" i ...
- Haskell 函数式编程快速入门【草】
什么是函数式编程 用常规编程语言中的函数指针.委托和Lambda表达式等概念来帮助理解(其实函数式编程就是Lambda演算延伸而来的编程范式). 函数式编程中函数可以被非常容易的定义和传递. Hask ...
- Css 动画的回调
在做项目中经常会遇到使用动画的情况.以前的情况是用js写动画,利用setTimeout函数或者window.requestAnimationFrame()实现目标元素的动画效果.虽然后者解决了刷新频率 ...
- 剑指Offer面试题:20.栈的压入、弹出序列
一.题目:栈的压入.弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4 ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- ASP.NET MVC 5 - 查询Details和Delete方法
在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...
- C语言 · 冒泡排序
for(int k=0;k<N;k++) { for(int j=k+1;j<N;j++){ if(a[k]>a[j]){ int t = a[k]; a ...