ORACLE 19C 新特性 Automatic indexing 自动化索引

目录

Automatic indexing 自动化索引概述:

Automatic Indexing 工作原理:

启用、禁用自动索引:

指定用户启用自动索引:

指定未使用的非自动索引的保留时间:

指定自动化索引日志的保留时间:

指定存储自动索引的表空间:

生成自动化索引报告:

自动化索引相关视图:

实验

1.查看 Oracle 数据库版本

2.开启 Automatic Indexing 特性

3.开启隐患参数并重启数据库

4.开启 Automatic Indexing 特性  (CDB)

5.开启 Automatic Indexing 特性  ( PDB)


Automatic indexing 自动化索引概述:

Automatic indexing 是 Oracle Database 19c 的新特性,依据应用负载的变 化,自动/动态地进行索引的管理,如:创建(create index)、重构(rebuild index) 和删除(drop index),从而提高数据库性能,无需人工干预。可以为分区表和非 分区表创建自动索引,无法为临时表创建自动索引。
自动索引提供以下功能:
  *以指定时间间隔定期运行自动化索引特性。
  *分析应用程序工作负载,并相应地创建新索引并删除现有性能不佳的索
引以提高数据库性能。
  *重建由于表分区维护操作而标记为不可用的索引,例如 ALTER TABLE MOVE。
  *提供了PL/SQL API 接口,用于在数据库中配置自动索引并生成与自动索引操作相关的报告。

Automatic Indexing 工作原理:

ORACLE 19C 新特性 Automatic indexing 自动化索引_第1张图片

Automatic Indexing 可以自动的 create, rebuild , drop 索引。Automatic Indexing 每 15 分钟调用一次,并执行如下任务:
1.识别自动索引候选项
通过捕获 SQL 历史到 SQL repository (包括 SQL,执行计划,绑定变量,统 计信息等) ,识别SQL 语句中用到列的使用情况来标识自动索引候选项。
2.为自动索引候选项创建 invisible 的自动索引
Invisible Indexes 是 11g 中提出的新功能,缺省对优化器是不可见的,也 就是说不会影响到用户既有的SQL 语句。

3.根据 SQL 语句验证不可见的自动索引
如果通过使用这些自动索引提高了SQL 语句的性能,那么会将这些索引配置 为可见索引,以便在 SQL 语句中使用它们。
如果使用这些索引不能提高 SQL 语句的性能,则将这些索引置为unusable 的索引,并将对应的 SQL 语句列入“黑名单” 。unusable 的索引稍后会被自动 索引过程删除。被列入“黑名单”的 SQL 语句将来不允许使用自动索引。
注:第一次执行的SQL 语句无法使用自动索引,原因是 Oracle 无法对该 SQL 语句做出有效的判断。
4.清除 unused auto indexes
对于长时间不使用的 auto indexes 会自动进行清除工作。缺省是 373 天, 可以使用 DBMS_AUTO_INDEX.CONFIGURE 过程来配置数据库中保留未使用的自动 索引的时间段。
Automatic Indexing 也是基于传统手动优化 SQL 的思路,基于 SQL 中的列使 用识别可以创建的索引,然后验证自动索引对性能的影响,然后按预设的值去创 建索引,只不过整个过程是自动的。

用、禁用自动索引:

SQL> alter system set "_exadata_feature_on"=true scope=spfile ; 1、启用
exec dbms_auto_index.configure('auto_index_mode','implement') ; 2、启用,但是只作为不可见自动索引,无法被 sql所使用
exec dbms_auto_index.configure('auto_index_mode','report only') ; 3、禁用
exec dbms_auto_index.configure('auto_index_mode','off') ;


set linesize 200
col parameter_name format a40
col parameter_value format a20
col last_modified format a20
col modified_by format a20
select * from dba_auto_index_config ;

指定用户启用自动索引:

默认情况下,如果启用了自动索引,那么数据库中的所有用户都可以使用自 动索引。
1、除 scott 用户外,其他用户使用自动索引
exec dbms_auto_index.configure('auto_index_schema','scott',false) ; 2、只有 scott 用户可以使用自动索引
exec dbms_auto_index.configure('auto_index_schema', 'scott', null) ; 3、所有用户都可以使用自动索引
exec dbms_auto_index.configure('auto_index_schema', null, true) ; set linesize 200
col parameter_name format a40
col parameter_value format a20
col last_modified format a20
col modified_by format a20
select * from dba_auto_index_config ;

未使用的非自动索引的保留时间:

auto_index_retention_for_manual 配置指定非自动索引 (手动创建的 索引) 的保留时间。如果超过该时间还没被使用的非自动索引也会被删除。默 情况下,非自动索引是永远不会被删除的

1、配置保留时间 60

exec dbms_auto_index.configure('auto_index_retention_for_manual', '60') ;

2、配置永远不删除

exec    dbms_auto_index.configure('auto_index_retention_for_auto', null) ;

set linesize 200

col parameter_name format a40

col parameter_value format a20

col last_modified format a20

col modified_by format a20

select * from dba_auto_index_config ;

指定自动化索引日志的保留时间:

通过 auto_index_report_retention 配置指定自动化索引日志的保留时间。 超过该时间的自动索引日志会被删除。默认情况, 自动索引日志会在 31 天后被 删除。
1、指定 60 天后删除
exec      dbms_auto_index.configure('auto_index_report_retention', '60') ;
2、重置保留时间,恢复到 31 天后删除
exec      dbms_auto_index.configure('auto_index_report_retention', null) ;
set linesize 200
col parameter_name format a40
col parameter_value format a20
col last_modified format a20
col modified_by format a20
select * from dba_auto_index_config ;
由于自动化索引报告是根据自动索引日志生成的,所以如果日志被删除了那 么是无法生成报告的。

指定存储自动索引的表空间:

通过 auto_index_default_tablespace 配置指定一个表空间用于存储自动索 引。默认情况下,在数据库创建期间指定的永久表空间用于存储自动索引。
1、指定表空间 TBS_AUTO
exec    dbms_auto_index.configure('auto_index_default_tablespace', 'users') ;
2、指定表空间的百分比用于存储自动索引
指定表空间总大小的百分比用于存储自动索引相关数据。如:指定 5%用于存 储自动索引
exec dbms_auto_index.configure('auto_index_space_budget','5') ;
set linesize 200
col parameter_name format a40
col parameter_value format a20
col last_modified format a20

col modified_by format a20
select * from dba_auto_index_config ;
 

成自动化索引报告:

通过 dbms_auto_index 包中的 report_activity 和 report_last_activity 两个存储过程来生成报告。
1、使用默认配置生成报告
declare
report clob := null ;
begin
report := dbms_auto_index.report_activity() ;
dbms_output.put_line(report) ;
end ;
2、生成最后一次自动化索引操作的报告
set serveroutput on
declare
report clob := null ;
begin
report := dbms_auto_index.report_last_activity() ;
dbms_output.put_line(report) ;
end ;

dbms_auto_index.report_activity  report_last_activity 说明

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 ;

明如下:

tpe:可选值 texthtmlxml

section:可选值:summary, index_details, verification_details, errors, all可通过+号选择多个值,-号去掉某个值。

level可选值:basic, typical, all

动化索引相关视图:

SQL>   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

视图

dba_auto_index_config

示自动化索引当前的配置

dba_indexes

all_indexes

user_indexes

AUTO 列显示该索引是否是自动化索

1.查看 Oracle 数据库版

SQL> select banner_full from v$version ;

set linesize 200

col parameter_name format a40

col parameter_value format a20

col last_modified format a20

col modified_by format a20

select * from dba_auto_index_config ;

ORACLE 19C 新特性 Automatic indexing 自动化索引_第2张图片

2.开启 Automatic Indexing 特性

SQL> exec dbms_auto_index.configure('auto_index_mode','implement') ; ERROR at line 1:

ORA-40216: feature not supported

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79

ORA-06512: at "SYS.DBMS_AUTO_INDEX_INTERNAL", line 9180 ORA-06512: at "SYS.DBMS_AUTO_INDEX", line 283          ORA-06512: at line 1

3.开启隐患参数并重启数据库

alter system set "_exadata_feature_on"=true scope=spfile ; 

shutdown immediate

startup

show parameter  "_exadata_feature_on"

4.开启 Automatic Indexing 特性  (CDB)

SQL> exec dbms_auto_index.configure('auto_index_mode','implement') ;
SQL> select * from dba_auto_index_config ;

ORACLE 19C 新特性 Automatic indexing 自动化索引_第3张图片

5.开启 Automatic Indexing 特性  ( PDB)

SQL> alter session set container=pdb1 ;

SQL> startup

col parameter_name for a40

col parameter_value for a40

col last_modified for a40

col modified_by for a40

set linesize 200

select * from dba_auto_index_config ;

ORACLE 19C 新特性 Automatic indexing 自动化索引_第4张图片

SQL>exec dbms_auto_index.configure('auto_index_mode','implement') ;

SQL> select * from dba_auto_index_config ;

ORACLE 19C 新特性 Automatic indexing 自动化索引_第5张图片

创建用户及授权
create user test identified by 123456 ;
grant dba to test ;
连接用户
conn test/[email protected]:1521/pdb1
show user
create table test as select * from dba_objects ;
insert into test select* from test ;
insert into test select* from test ;
update test set object_id=rownum;
commit ;
执行测试 SQL
declare
a varchar2(2000) := '' ;
begin
for x in 1.. 10000 loop
select object_name into a from test.test where object_id=x ; end loop ;
end ;
/
等 15 分钟后
col execution_name for a50
col error_message for a50
select * from dba_auto_index_executions ;

select      *      from      dba_auto_index_statistics      where

execution_name='SYS_AI_2021-02-10/23:53:27' ;

ORACLE 19C 新特性 Automatic indexing 自动化索引_第6张图片

没有使用自动化索引,再次执行以下测试 SQL

declare

a varchar2(2000) := '' ;

begin

for x in 1.. 10000 loop

select object_name into a from test.test where object_id=x ; end loop ;

end ;

/

等 15 分钟后

ORACLE 19C 新特性 Automatic indexing 自动化索引_第7张图片

你可能感兴趣的:(数据库,oracle,自动化,数据库)