Oracle19C特性自动化索引
我们来讲一下19C另外一个特性,自动化索引,这也是数据库AI的体现,实现了自动化运维。这里说明一下这个特性是一体机下使用效果好。非一体机的使用出了问题官方不支持。我们这里模拟是可以的。
图1
首先如图1创建一个表,如图1.然后给表中插入数据,我写了一个存储过程。
create or replace procedure ii
as
z varchar2(10);
begin
for
i in 1..1000000 loop
SELECT DBMS_RANDOM.STRING (‘A’, 10) into z FROM DUAL;
insert into i values (i,z,sysdate-i/1440);
end loop;
commit;
end;
图2
如图2中xxg是xuexiaogang的缩写,数据库是PDB2. 在命令中中执行这个存储过程写入了100万条数据。打开自动化索引的隐藏参数,(因为是一体机下才好用,非一体机就是不推荐使用。)
alter system set
"_exadata_feature_on"=true scope=spfile;如图3
图3
这也意味着数据库要重启。如图4重启数据库。
图4
把数据库自动索引的功能打开(选择哪种)。这里有三种分别是。这里传递一个信息,也有些公司有严格的把控,不轻易使用这个功能。我们这里演示采用第一种如图5.
SQL> EXEC
DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');
启用自动索引
SQL> EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE',
'REPORT ONLY');
启用自动索引,但只作为不可见自动索引,无法被SQL所使用:
SQL> EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE',
'OFF');
关闭自动索引
图5
而且这个参数要在PDB级别设定。如图6,我们在CDB上确认一下,我在PDB2这个数据库上设置的是不是生效了。
图6
COLUMN parameter_name FORMAT A40
COLUMN parameter_value FORMAT A20
SELECT con_id, parameter_name,
parameter_value FROM cdb_auto_index_config;
接下来我们看看执行计划,现在是没有索引,所以如图7是全表扫描。对象是XXG(xuexiaogang)
图7
注意这里我们要收集统计信息,否则如图8一样,是不会有作用。
图8
收集统计信息的方法,使用管理用户运行程序包。如图9(在PDB下)
图9
收集统计完毕,检查一下,否则如图10,数据库知道这个表有100万记录了。
图10
我们在编写一个存储过程图11,
图11
执行存储过程。让他反复查如图12,让数据库知道多次全表以后,自己根据场景去创建索引。
图12
最后果然现在不是全表了,有索引了(图13),索引是SYS用户建立的,带了AI开头说明是AI推荐的索引。
图13
虽然在非Exadata下也可以实现,但是自动化索引是依靠强大的IO才能完成的,没有强大的IO,这样做会导致系统带来不稳定的因素。