X Oracle Database 19c中的自動索引


Oracle Database 19c中的自動索引

1、它能做什么 

 

自動索引功能執行以下操作。

  • 根據表列使用情況確定潛在的自動索引。文檔稱這些為 “候選索引 (candidate indexes)”。

  • 將自動索引創建為不可見索引,因此不會在執行計划中使用它們。索引名稱包括 “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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM