一、描述
从Oracle 10g开始,oracle引入了段顾问(Segment Advisor),用于检查数据库中是否有与存储空间相关的建议,并且从10gR2开始,oracle自动调度并运行一个段顾问作业,定时分析数据库中的段,并将分析结果放在内部表中。但是很多情况下,作为DBA,我们都会将oracle自带的各种调度作业(统计信息收集、段顾问、SQL顾问等等)禁用,进而通过手工进行控制执行类似作业(或者为了节省资源)。因此很多情况下,我们都没有用到段顾问这个非常实用的功能。这篇文章就是讲述在表对象和表空间级别通过手工运行段顾问来生成段建议的方法。
二、作用
优化SQL语句时,可以帮助我们更准确的判断是否需要回收表内的碎片空间。如果不运行段顾问建议,我们必须得通过create table as select一张临时表方式才能准确的得知是否有必要进行表空间回收,以及空间的回收率等等信息。
优化SQL语句时,可以帮助我们准确判断是否需要重建或者move表来消除表内的行链接。可以想想,如果没有这个建议,我们又需要做多少工作来判断。
日常主动维护时,可以帮助我们主动发现表内碎片较多和行链接较严重的表对象列表,有助于我们提前处理,避免类似问题的发生。
三、段顾问的分析结果类型
适合进行段收缩操作来回收空间的段
具有大量行链接的段
可能会从OLTP压缩中受益的段
四、手工运行段顾问步骤
创建一个段顾问任务
为这个任务分配一个对象(指定以表对象或者表空间级别来运行,同时制定用户名和表名或者表空间名)
设置任务参数(执行段顾问执行时的一些参数,例如:运行时长限制参数、仅生产与空间相关建议/所有类型的对象生成建议)
执行这个任务
五、手工运行段顾问的代码
declare
my_task_id number;
obj_id number;
my_task_name varchar2(100);
my_task_desc varchar2(500);
begin
my_task_name :='advisor_test tab Advice'; --运行任务名,可以任意指定,不过建议为有意义的名称
my_task_desc :='Manual Segment Advisor Run';--运行任务描述,可以任意指定,不过建议为有意义的描述
-----step 1
/* 创建一个段顾问任务 */
dbms_advisor.create_task(
advisor_name => 'Segment Advisor', --运行段顾问任务这个参数必须指定为Segment Advisor
task_id => my_task_id,
task_name => my_task_name,
task_desc =>my_task_desc);
-----step 2
/* 为这个任务分配一个对象 */
dbms_advisor.create_object(
task_name=>my_task_name,
object_type=>'TABLE', --指定对象级别,如果为表对象则为'TABLE',如果为表空间级别则为'TABLESPACE'
attr1=>'DBMON', ---如果在表对象级别运行,这个属性为用户名,表空间级别这个属性为表空间名字
attr2 => 'ADVISOR_TEST', ---如果在表对象级别运行,这个属性为表名,表空间级别这个属性为null
attr3 => NULL,
attr4=>null,
attr5=>null,
object_id=>obj_id);
-----step 3
/* 设置任务参数 */
dbms_advisor.set_task_parameter(
task_name => my_task_name,
/* 设置段顾问运行参数"ecommend_all"的值,为TRUE则为所有类型的对象的生成建议,为FALSE则仅生成与空间相关的建议 */
/* 另一个滚问运行参数"time_limit",制定顾问运行的时间限制,默认值为无限制 */
parameter=>'recommend_all', ---
value=>'TRUE');
-----step 4
/* 执行这个任务 */
dbms_advisor.execute_task(my_task_name);
end;
/
六、查询段顾问分析结果的语句
(1)
select
/* "|chr(13)||chr(10)"为windows平台的换行符,如果是linux等其它平台,请用"chr(10)"代替 */
'Task name :'||f.task_name||chr(13)||chr(10)||
'Segment name :'||o.attr2 ||chr(13)||chr(10)||
'Sement type :'||o.type ||chr(13)||chr(10)||
'partition name:'||o.attr3 ||chr(13)||chr(10)||
'Message :'||f.message ||chr(13)||chr(10)||
'More info :'||f.more_info TASK_ADVICE
from dba_advisor_findings f,dba_advisor_objects o
where o.task_id=f.task_id
and o.object_id=f.object_id
and f.task_name = 'advisor_test tab Advice'
order by f.task_name;
(2)
通过查询TABLE(dbms_space.asa_recommendations(all_runs=>'TRUE',show_manual=>'TRUE',show_findings=>'FALSE'))来查看建议;
第一个参数true表示运行历次运行结果,false表示最近一次的结果
第二个参数true表示返回手工运行段顾问的结果,false表示返回自动运行段顾问的结果
第三个参数true表示仅显示分析结果,false表示显示分析结果和分析建议
备注:案例中使用(1)语句来查看分析结果
- 大小: 51.6 KB
分享到:
相关推荐
Segment Advisor C. SQL Tuning Advisor D. SQL Access Advisor E. Automatic Database Diagnostic Monitor(ADDM) Answer: A 你发现你的数据高速缓存区(Database Buffer Cache)不够用了,可以使用 Memory ...
个人在学习ORACLE过程当中记录下来的学习笔记,通俗易懂,适合想快速了解ORACLE基本语法的朋友
分享一个来自官方的对Oracle LOB字段的性能调优。
段路由技术文档介绍,,英文介绍包括配置。值得好好研究的文档。
默认的表现形式是直接从segment header数据段头里获取EXTENT MAP即盘区图,另一种方案就是由PRM自己去构建一个盘区图。 这些盘区图可以通过,PRM的SCAN DATABASE选项来获得: Recovery Wizard => Non-Dictionary ...
ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
在ORACLE中,我们可以通过file_id(file#)与block_id(block#)去定位一个数据库对象(object)。例如,我们在10046生成的trace文件中file#=4 block#=266 blocks=8,那么我可以通过下面两个SQL去定位对象 SQL 1:此...
Segment Routing 思科原厂培训PPT L3/L2 , Traffic Engineering (TE) / Fast Reroute (FRR) services are offered over the MPLS backbone Complex protocol stacks Complex troubleshooting & operation
3 digit counter using 7segment
一、Oracle+Database+11g+DBA手册(中文) 二、《Oracle数据库SQL执行计划的取得和解析》PPT(附SQL文件) 三、Oracle 常用脚本 2pc_clean.txt ash_sql_line_id.txt ash_top_sql_event.txt ash_used awr_db_time.txt...
Laravel开发-segment 为Laravel编写的segment.com包装
PI SEGMENT项目的源代码
什么是Segment Routing、背景、实现原理、优势及应用
Segment Advisor 200 LogMiner Interface 203 Health Check 207 Trace File Browser 226 CodeXpert 231 Database Administration 259 Audit SQL/Sys Privs 259 NLS Parameters 260 Toad Features Security 260 ASM ...
进制转换 这是学汇编语言时的一些程序 对初学者很有帮助
android 自定义segment 能运行的
11 2、 段(segment) 表空间的下一级逻辑存储单元称为段 (segment),一个段只能存储同一种模式 对象(schema object)。段数据不能跨越 表空间,但段数据可以跨越同一表空间的多 个数据文件。根据段中所存储的...
§1.3.3 段(segment) 28 §1.4 SQL语句处理 29 §1.4.1 SQL语句处理顺序 29 §1.4.2 COMMIT语句处理顺序 32 §1.5 共享池 33 §1.6 块缓存(数据高速缓冲区) 33 §1.7 数据库写入进程 34 §1.8 日志写进程 34 §1.9 ...
一个segment的小应用,希望各位大神多多指点
Oracle回滚段的概念,用法和规划及问题的解决