专栏首页Oracle数据库技术自动段指导任务(Automatic Segment Advisor)

自动段指导任务(Automatic Segment Advisor)

概述

本文主要介绍自动段指导(Automatic Segment Advisor)任务的内容进行详细介绍。

10g

段指导(Segment Advisor)

从Oracle 10g R2开始推出了段指导(Segment Advisor)功能,用于识别是否有可用回收空间的段和有很多行链接的对象,并提出如何消除这些段中的碎片及行链接的建议。

段指导(Segment Advisor)主要生成以下类型的建议:

・当段指导(Segment Advisor)发现某对象的高水位线 (High Water Mark 简称HWM)下
的空余空间特别多时,会推荐online segment shrink;
如果该对象并不适合Shrink(如表不是定义在ASSM的表领域等),段指导会推荐在线重定义对象
(online table redefinition).例如:利用DBMS_REDEFINITION程序包。・当段指导(Segment Advisor)发现某对象的行链接数大于某个临界值时,
会记录下来作为通知内容。

段指导建议的生成级别

通过手动执行段指导(Segment Advisor),可以生成以下3种级别的指导建议: (利用DBMSADVISOR.CREATEOBJECT时,指定的OBJECT_TYPE)

1.段级别:
针对非分区表、分区表的分区以及子分区、索引等个别段对象生成指导建议。2.对象级别:
针对表或索引等整个对象生成指导建议。例如对某分区表进行分析,
会对分区表的所有分区生成知道建议。另外通过EM运行还可以指定对象的所有的依赖对象(如索引等)。3.表空间级别
针对某表空间所有的段对象生成指导建议。

自动段指导(Automatic Segment Advisor)

自动段指导(Automatic Segment Advisor)功能是,在数据库做成时会自动地做成调度作业【GATHERSTATSJOB】,通过预定义的维护窗口(Maintenance Windows)进行执行。

    WEEKNIGHT_WINDOW : 周一到周五 每天22:00开始 ~ 次日06:00结束。
   WEEKEND_WINDOW   :周六和周日的全天

自动段指导的分析对象

自动段指导并不是针对所有的数据库对象进行分析,而是分析数据库的统计信息、段数据的采样,对以下的对象进行分析:

1.超过空间的 critical 或warning阈值的表空间。2.操作活动很多的段3.很高增长率的段

自动段指导的动作确认

和自动统计信息收集一样,自动段指导的相关动作可以通过视图进行查看。 这里不做详细介绍,可参考【自动统计信息收集的动作确认】一节。

手动执行段指导

以下是针对段级别进行手动执行段指导的例子.

variable id number;
begin
 declare
 name varchar2(100);
 descr varchar2(500);
 obj_id number; begin
 name:='Manual_Employees';
 descr:='Segment Advisor Example'; dbms_advisor.create_task (
   advisor_name     => 'Segment Advisor',
   task_id          => :id,
   task_name        => name,
   task_desc        => descr); dbms_advisor.create_object (
   task_name        => name,
   object_type      => 'TABLE',
   attr1            => 'HR',
   attr2            => 'EMPLOYEES',
   attr3            => NULL,
   attr4            => NULL,
   attr5            => NULL,
   object_id        => obj_id); dbms_advisor.set_task_parameter(
   task_name        => name,
   parameter        => 'recommend_all',
   value            => 'TRUE'); dbms_advisor.execute_task(name);
 end;
end;
/

段指导的结果表示

可以通过以下方式查看段指导的结果:

Enterprise ManagerDBA_ADVISOR_* 视图DBMS_SPACE.ASA_RECOMMENDATIONS 程序包

下面简单列举通过DBMSSPACE.ASARECOMMENDATIONS 程序包查看段指导的结果的方法:

SQL> desc dbms_spaceFUNCTION ASA_RECOMMENDATIONS RETURNS DBMS_SPACE
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
ALL_RUNS                       VARCHAR2                IN     DEFAULT
SHOW_MANUAL                    VARCHAR2                IN     DEFAULT
SHOW_FINDINGS                  VARCHAR2                IN     DEFAULTSQL> select tablespace_name, segment_name, segment_type,
    recommendations, c1
    from table(dbms_space.asa_recommendations('TRUE', 'TRUE', 'FALSE'));

参考: Database Administrator's Guide

>Automatic Segment Advisor Job >Using the Segment Advisor

11g & 12c

自动段指导(Automatic Segment Advisor)建议的拓展

从Oracle 11g R2开始,作为自动段指导(Automatic Segment Advisor)的一部分,追加了段压缩指导(Compression advisor)功能。

因此,11gR2以后,自动段指导(Automatic Segment Advisor)功能主要可以生成以下类型的建议:

・当段指导(Segment Advisor)发现某对象的高水位线 (High Water Mark 简称HWM)下的
空余空间特别多时,会推荐online segment shrink;
如果该对象并不适合Shrink(如表不是定义在ASSM的表领域等),
段指导会推荐在线重定义对象(online table redefinition).
例如:利用DBMS_REDEFINITION程序包。・当段指导(Segment Advisor)发现某对象的行链接数大于某个临界值时,
会记录下来作为通知内容。・当自动段指导(Segment Advisor)发现段可以
从高级行压缩(Advanced row compression 11g版本也称为OLTP压缩)中受益时,
段指导会生成建议指导。(11gR2以后)

段压缩指导(Compression advisor)

通过段压缩指导(Compression advisor)功能,可以评估通过高级行压缩(Advanced row compression以前的11g版本也称为OLTP压缩)方法对段进行压缩时,能够节省的空间大小。

段压缩指导评估对象:

段压缩指导评估对象一般为大小为10MB以上,并且拥有3个以上索引的表。
(除了上面的条件以外,还会根据其他一些内部算法来决定评估对象)

段压缩指导处理逻辑:

・段压缩指导主要使用DBMS_COMPRESSION程序包进行压缩的评估。
・评估过程中,会建立以下2个内部临时表。   DBMS_TABCOMP_TEMP_UNCMP   :默认包含99%的采样块。
    DBMS_TABCOMP_TEMP_CMP    :包含通过压缩后的DBMS_TABCOMP_TEMP_UNCMP。通过DBMS_TABCOMP_TEMP_UNCMP和 DBMS_TABCOMP_TEMP_CMP计算出压缩比。・评估结束后,删除2个临时表。

手动运行段压缩指导 可以通过以下的方法手动地运行段压缩指导。

例:

sql> set serveroutput on
sql> declare
v_blkcnt_cmp pls_integer;
v_blkcnt_uncmp pls_integer;
v_row_cmp pls_integer;
v_row_uncmp pls_integer;
v_cmp_ratio number;
v_comptype_str varchar2(60);
begin
dbms_compression.get_compression_ratio(
scratchtbsname => upper('&ScratchTBS'),
ownname => user,
tabname => upper('&TableName'),
partname => NULL,
comptype => dbms_compression.comp_for_query_high,
blkcnt_cmp => v_blkcnt_cmp,
blkcnt_uncmp => v_blkcnt_uncmp,
row_cmp => v_row_cmp,
row_uncmp => v_row_uncmp,
cmp_ratio => v_cmp_ratio,
comptype_str => v_comptype_str, subset_numrows=>&num_rows );
dbms_output.put_line('Estimated Compression Ratio: '||to_char(v_cmp_ratio));
dbms_output.put_line('Blocks used by compressed sample: '||to_char(v_blkcnt_cmp));
dbms_output.put_line('Blocks used by uncompressed sample: '||to_char(v_blkcnt_uncmp));
end;
/

参考: Database Administrator's Guide

>Automatic Segment Advisor >Using the Segment Advisor

本文分享自微信公众号 - Oracle数据库技术(TeacherWhat)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-08-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【数据库认证】OCM准备及考试经验总结

    OCM,Oracle Certification,Oracle Certified Master,11g,12c

    TeacherWhat
  • Oracle优化器之自适应执行计划(Adaptive Execution Plans)

    我们知道在12c之前的版本,虽然有ACS、CFB等功能通过在SQL文执行时收集信息,来改善SQL文再次执行时的执行计划,但是在SQL文第一次执行时,只能根据统计...

    TeacherWhat
  • 自动统计信息收集(Automatic Optimizer Statistics Collection)

    本文主要介绍自动统计信息收集(Automatic Optimizer Statistics Collection)任务。

    TeacherWhat
  • python 字符串所有操作

    使用type获取创建对象的类 type(name) 使用dir获取类的成员dir(name) 使用vars获取类的成员和各个成员的值

    用户7886150
  • python变量的定义

            python中字符带单引号或者双引号,python都认为是字符串。

    py3study
  • Sentence-BERT详解

    BERT和RoBERTa在文本语义相似度(Semantic Textual Similarity)等句子对的回归任务上,已经达到了SOTA的结果。但是,它们都需...

    mathor
  • python Class:获取对象类型

    #!/usr/bin/env python3 # -*- coding: utf-8 -*-

    py3study
  • Kotlin 's Function 《Kotlin极简教程》正式上架:

    Functions are declared using the fun keyword, followed by a function name and an...

    一个会写诗的程序员
  • Scala语言基础之结合demo和spark讲实现链式计算

    一,什么是链式计算 1,一般开发习惯把事情封装到一个方法中;链式编程思想是把要做的事情封装到block中,给外部提供一个返回这个block的方法 2,链式编程思...

    Spark学习技巧
  • Neo4j-1.5 WHERE子句

    悠扬前奏

扫码关注云+社区

领取腾讯云代金券