当前位置:Gxlcms > 数据库问题 > Oracle Database 19c中的自动索引

Oracle Database 19c中的自动索引

时间:2021-07-01 10:21:17 帮助过:35人阅读

  • 将自动索引创建为不可见索引,因此不会在执行计划中使用它们。索引名称包括 “SYS_AI”前缀。

  • 根据 SQL语句测试不可见的自动索引,以确保它们能提高性能。如果它们导致性能提高,则可以它们可见。如果性能未得到改善,则相关的自动索引将标记为不可用,稍后将被删除。针对失败的自动索引测试的 SQL语句被列入黑名单,因此将来不会考虑将它们用于自动索引。第一次对数据库运行 SQL时,优化程序不会考虑自动索引。

  • 删除未使用的索引。

     

  • 2、先决条件

     

    通过设置初始化参数 “_exadata_feature_on=true” 进行测试。注:请不要在生产系统中测试。

     

     

    1 2 3 4 5 6 7 8 9 10 11 export ORACLE_SID=cdb1 export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES sqlplus / as sysdba <<EOF alter system  set "_exadata_feature_on"=true scope=spfile; shutdown immediate; startup; exit; EOF

    3、 配置 

     

    使用  DBMS_AUTO_INDEX 包来管理自动索引特性。下面描述了基本管理。

     

    3.1  显示配置

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 CDB_AUTO_INDEX_CONFIG视图显示当前的自动索引配置。 COLUMN parameter_name FORMAT A40 COLUMN parameter_value FORMAT A15 SELECT con_id, parameter_name, parameter_value  FROM    cdb_auto_index_config ORDER BY 1, 2;     CON_ID PARAMETER_NAME                           PARAMETER_VALUE ---------- ---------------------------------------- ---------------            1 AUTO_INDEX_COMPRESSION                   OFF 1 AUTO_INDEX_DEFAULT_TABLESPACE 1 AUTO_INDEX_MODE                          OFF 1 AUTO_INDEX_REPORT_RETENTION              31 1 AUTO_INDEX_RETENTION_FOR_AUTO            373 1 AUTO_INDEX_RETENTION_FOR_MANUAL 1 AUTO_INDEX_SCHEMA 1 AUTO_INDEX_SPACE_BUDGET                  50 3 AUTO_INDEX_COMPRESSION                   OFF 3 AUTO_INDEX_DEFAULT_TABLESPACE 3 AUTO_INDEX_MODE                          OFF 3 AUTO_INDEX_REPORT_RETENTION              31 3 AUTO_INDEX_RETENTION_FOR_AUTO            373 3 AUTO_INDEX_RETENTION_FOR_MANUAL 3 AUTO_INDEX_SCHEMA          3 AUTO_INDEX_SPACE_BUDGET                  50 SQL>

     

     

     

    如果我们切换到用户定义的可插拔数据库,我们只获取该容器的值。

     

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ALTER SESSION SET CONTAINER = pdb1; COLUMN parameter_name FORMAT A40 COLUMN parameter_value FORMAT A15 SELECT con_id, parameter_name, parameter_value  FROM    cdb_auto_index_config ORDER BY 1, 2;     CON_ID PARAMETER_NAME                           PARAMETER_VALUE ---------- ---------------------------------------- ---------------            3 AUTO_INDEX_COMPRESSION                   OFF            3 AUTO_INDEX_DEFAULT_TABLESPACE            3 AUTO_INDEX_MODE                          OFF            3 AUTO_INDEX_REPORT_RETENTION              31            3 AUTO_INDEX_RETENTION_FOR_AUTO            373            3 AUTO_INDEX_RETENTION_FOR_MANUAL            3 AUTO_INDEX_SCHEMA            3 AUTO_INDEX_SPACE_BUDGET                  50 SQL>

     

     

    3.2  启用 / 禁用自动索引

     

    使用   DBMS_AUTO_INDEX 包的   CONFIGURE   存储过程配置自动索引。

     

    使用   AUTO_INDEX_MODE  属性控制用于自动索引的开关,该属性具有以下允许值:

     

    • IMPLEMENT:打开自动索引。  提高性能的新索引可见并可供优化程序使用。

    • REPORT ONLY:打开自动索引,但新索引仍然不可见。

    • OFF :关闭自动索引。

     

    模式之间切换的命令示例如下:

     

    1 2 3 EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_MODE‘,‘IMPLEMENT‘); EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_MODE‘,‘REPORT ONLY‘); EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_MODE‘,‘OFF‘);

     

    3.3  自动索引的表空间

     

    默认情况下,自动索引是在默认的永久表空间中创建的。如果这是不可接受的,您可以使用  AUTO_INDEX_DEFAULT_TABLESPACE属性指定一个表空间来保存它们。下面我们创建一个表空间来保存自动索引,并相应地设置属性。

     

    1 2 3 4 5 ALTER SESSION SET CONTAINER = pdb1; CREATE TABLESPACE AUTO_INDEXES_TS  DATAFILE SIZE 100M  AUTOEXTEND ON NEXT 100M; EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_DEFAULT_TABLESPACE‘,‘AUTO_INDEXES_TS‘);

     

    如果要设置使用默认永久表空间,可以设置为  NULL ,如下命令所示: 

     

     

    1 EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_DEFAULT_TABLESPACE‘,NULL);

     

    3.4  模式级( Schema-Level )控制 

     

    一旦启用了自动索引,在尝试识别候选索引时会考虑所有模式。您可以使用 AUTO_INDEX_SCHEMA  属性更改默认行为,该属性允许您维护  包含 /排除  列表。

     

    如果   ALLOW参数设置为 true,则指定的模式 (schema)将添加到包含列表中。注意 :它构建了一个包含模式的谓词。

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_SCHEMA‘‘TEST‘, allow => TRUE); EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_SCHEMA‘‘TEST2‘, allow => TRUE); COLUMN parameter_name FORMAT A40 COLUMN parameter_value FORMAT A15 SELECT con_id, parameter_name, parameter_value  FROM    cdb_auto_index_config ORDER BY 1, 2;     CON_ID PARAMETER_NAME                           PARAMETER_VALUE ---------- ---------------------------------------- ----------------------------------------            3 AUTO_INDEX_COMPRESSION                   OFF            3 AUTO_INDEX_DEFAULT_TABLESPACE            AUTO_INDEXES_TS            3 AUTO_INDEX_MODE                          IMPLEMENT            3 AUTO_INDEX_REPORT_RETENTION              31            3 AUTO_INDEX_RETENTION_FOR_AUTO            373            3 AUTO_INDEX_RETENTION_FOR_MANUAL            3 AUTO_INDEX_SCHEMA                        schema IN (TEST, TEST2)            3 AUTO_INDEX_SPACE_BUDGET                  50 SQL>

     

     

     

    可以使用  NULL  参数值消除包含列表,如下所示:

     

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_SCHEMA‘NULL, allow => TRUE); COLUMN parameter_name FORMAT A40 COLUMN parameter_value FORMAT A15 SELECT con_id, parameter_name, parameter_value  FROM    cdb_auto_index_config ORDER BY 1, 2;     CON_ID PARAMETER_NAME                           PARAMETER_VALUE ---------- ---------------------------------------- ----------------------------------------            3 AUTO_INDEX_COMPRESSION                   OFF            3 AUTO_INDEX_DEFAULT_TABLESPACE            AUTO_INDEXES_TS            3 AUTO_INDEX_MODE                          IMPLEMENT            3 AUTO_INDEX_REPORT_RETENTION              31            3 AUTO_INDEX_RETENTION_FOR_AUTO            373            3 AUTO_INDEX_RETENTION_FOR_MANUAL            3 AUTO_INDEX_SCHEMA            3 AUTO_INDEX_SPACE_BUDGET                  50 SQL>

    如果   ALLOW参数设置为 FALSE,则指定的模式将添加到排除列表中。

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_SCHEMA‘‘TEST‘, allow => FALSE); EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_SCHEMA‘‘TEST2‘, allow => FALSE); COLUMN parameter_name FORMAT A40 COLUMN parameter_value FORMAT A15 SELECT con_id, parameter_name, parameter_value  FROM    cdb_auto_index_config ORDER BY 1, 2;     CON_ID PARAMETER_NAME                           PARAMETER_VALUE ---------- ---------------------------------------- ----------------------------------------            3 AUTO_INDEX_COMPRESSION                   OFF            3 AUTO_INDEX_DEFAULT_TABLESPACE            AUTO_INDEXES_TS            3 AUTO_INDEX_MODE                          IMPLEMENT            3 AUTO_INDEX_REPORT_RETENTION              31            3 AUTO_INDEX_RETENTION_FOR_AUTO            373            3 AUTO_INDEX_RETENTION_FOR_MANUAL            3 AUTO_INDEX_SCHEMA                        schema NOT IN (TEST, TEST2)          3 AUTO_INDEX_SPACE_BUDGET                  50 SQL>

     

     

    可以使用 NULL参数值清除排除列表。

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 EXEC DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_SCHEMA‘NULL, allow => FALSE); COLUMN parameter_name FORMAT A40 COLUMN parameter_value FORMAT A15 SELECT con_id, parameter_name, parameter_value  FROM   cdb_auto_index_config ORDER BY 1, 2;     CON_ID PARAMETER_NAME                           PARAMETER_VALUE ---------- ---------------------------------------- ----------------------------------------          3 AUTO_INDEX_COMPRESSION                   OFF          3 AUTO_INDEX_DEFAULT_TABLESPACE            AUTO_INDEXES_TS          3 AUTO_INDEX_MODE                          IMPLEMENT          3 AUTO_INDEX_REPORT_RETENTION              31          3 AUTO_INDEX_RETENTION_FOR_AUTO            373          3 AUTO_INDEX_RETENTION_FOR_MANUAL          3 AUTO_INDEX_SCHEMA          3 AUTO_INDEX_SPACE_BUDGET                  50 SQL>

    4、 其它配置 

     

     

    您可能希望考虑其他参数,这些都在此详细说明。

     

    • AUTO_INDEX_COMPRESSION :据推测用于控制压缩程度。默认为 “OFF” 

    • AUTO_INDEX_REPORT_RETENTION :自动索引日志的保留期。默认 31 天。

    • AUTO_INDEX_RETENTION_FOR_AUTO :未使用的自动索引的保留期。   默认 373 天。

    • AUTO_INDEX_RETENTION_FOR_MANUAL :未使用的手动创建索引的保留期。设置为NULL 时,不考虑手动创建的索引。默认为NULL 

    • AUTO_INDEX_SPACE_BUDGET :用于自动索引存储的默认永久表空间的百分比。使用 AUTO_INDEX_DEFAULT_TABLESPACE  参数指定自定义表空间时,将忽略此参数。

     

    5、 删除二级索引

     

    在做这个之前,请仔细考虑,测试,测试,测试!

    1 2 3 4 5 6 7 8 如果您感觉特别勇敢,DROP_SECONDARY_INDEXES过程将删除除用于约束的索引之外的所有索引。这可以在表、模式(Schema)、数据库级别完成。 -- 表级别 EXEC DBMS_AUTO_INDEX.drop_secondary_indexes(‘MY_SCHEMA‘ ‘MY_TABLE‘); -- 模式(Schema)级别 EXEC DBMS_AUTO_INDEX.drop_secondary_indexes(‘MY_SCHEMA‘); -- 数据库级别 EXEC DBMS_AUTO_INDEX.drop_secondary_indexes;

     

     

    6、 视图

     

    有几个与自动索引功能相关的视图,如下所示:

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT view_name FROM    dba_views WHERE  view_name LIKE ‘DBA_AUTO_INDEX%‘ ORDER BY 1; VIEW_NAME -------------------------------------------------------------------------------- DBA_AUTO_INDEX_CONFIG DBA_AUTO_INDEX_EXECUTIONS DBA_AUTO_INDEX_IND_ACTIONS DBA_AUTO_INDEX_SQL_ACTIONS DBA_AUTO_INDEX_STATISTICS DBA_AUTO_INDEX_VERIFICATIONS SQL>

     

    此外,{CDB|DBA|ALL|USER}_INDEXES 视图包含AUTO列,该列指示索引是否由自动索引功能创建。 

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 COLUMN owner FORMAT A30 COLUMN index_name FORMAT A30 COLUMN table_owner FORMAT A30 COLUMN table_name FORMAT A30 SELECT owner,          index_name,          index_type,          table_owner,          table_name          table_type FROM    dba_indexes WHERE  auto = ‘YES‘ ORDER BY owner, index_name;

    7、 活动报告

    DBMS_AUTO_INDEX  包中包含两个报告功能。

     

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 DBMS_AUTO_INDEX.REPORT_ACTIVITY (    activity_start  IN  TIMESTAMP  WITH TIME ZONE  DEFAULT SYSTIMESTAMP - 1,    activity_end    IN  TIMESTAMP WITH TIME ZONE  DEFAULT SYSTIMESTAMP,      type            IN  VARCHAR2  DEFAULT ‘TEXT‘,      section          IN  VARCHAR2  DEFAULT ‘ALL‘,      level            IN  VARCHAR2  DEFAULT ‘TYPICAL‘) RETURN CLOB; DBMS_AUTO_INDEX.REPORT_LAST_ACTIVITY (    type            IN  VARCHAR2 DEFAULT ‘TEXT‘,    section         IN  VARCHAR2 DEFAULT ‘ALL‘,    level           IN  VARCHAR2 DEFAULT ‘TYPICAL‘) RETURN CLOB;

     

    REPORT_ACTIVITY 函数允许您显示指定时间段内的活动,默认为最后一天。 REPORT_LAST_ACTIVITY 函数报告上次自动索引操作。两者都允许您使用以下参数定制输出。

     

    • TYPE :允许值(TEXT ,HTML ,XML )。

    • SECTION :允许值(SUMMARY ,INDEX_DETAILS ,VERIFICATION_DETAILS ,ERRORS ,ALL )。您还可以使用带有 “+”  和 “-”  字符的组合来指示是否应包含或排除某些内容。  例如‘SUMMARY + ERRORS‘ 或‘ALL -ERRORS‘

    • LEVEL :允许值(BASIC ,TYPICAL ,ALL )。

     

    从 SQL中使用这些函数的一些示例如下所示。注意引用 LEVEL参数。在 SQL调用中使用它时,这是必要的,因此这不是对LEVEL伪列的引用。

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 SET LONG 1000000 PAGESIZE 0 -- 过去24小时的默认TEXT报告。 SELECT DBMS_AUTO_INDEX.report_activity()  FROM dual; -- 最新活动的默认TEXT报告。 SELECT DBMS_AUTO_INDEX.report_last_activity() FROM dual; -- 前天的HTML报告。 SELECT DBMS_AUTO_INDEX.report_activity(          activity_start => SYSTIMESTAMP-2,          activity_end   => SYSTIMESTAMP-1, type           => ‘HTML‘) FROM   dual; -- 最新活动的HTML报告。 SELECT DBMS_AUTO_INDEX.report_last_activity(  type => ‘HTML‘) FROM   dual; -- 前天的XML报告包含所有信息。 SELECT DBMS_AUTO_INDEX.report_activity(          activity_start => SYSTIMESTAMP-2,          activity_end   => SYSTIMESTAMP-1,   type           => ‘XML‘, section        => ‘ALL‘, "LEVEL"        => ‘ALL‘) FROM   dual; -- 包含所有信息的最新活动的XML报告。 SELECT DBMS_AUTO_INDEX.report_last_activity( type     => ‘HTML‘,     section  => ‘ALL‘,      "LEVEL"  => ‘ALL‘) FROM   dual; SET PAGESIZE 14

     

     

     

    以下是在创建任何索引之前默认活动报告的输出示例。

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 SELECT DBMS_AUTO_INDEX.report_activity()  FROM dual; GENERAL INFORMATION -------------------------------------------------------------------------------  Activity  start               :  03-JUN-2019 21:59:21  Activity  end                  04-JUN-2019 21:59:21  Executions completed         :  2  Executions interrupted       :   Executions  with fatal  error  :  ------------------------------------------------------------------------------- SUMMARY (AUTO INDEXES) -------------------------------------------------------------------------------  Index candidates            :   Indexes created             :   Space used                  :  0 B  Indexes dropped             :   SQL statements verified     :   SQL statements improved     :   SQL plan baselines created  :   Overall improvement factor  :  0x ------------------------------------------------------------------------------- SUMMARY (MANUAL INDEXES) -------------------------------------------------------------------------------  Unused indexes    :   Space used        :  0 B  Unusable indexes  :  ------------------------------------------------------------------------------- ERRORS --------------------------------------------------------------------------------------------- No errors found. --------------------------------------------------------------------------------------------- SQL>

     

    Oracle Database 19c中的自动索引

    标签:res   set   调用   做什么   排除   preview   UNC   pfile   ber   

    人气教程排行