Oracle 19c中的自動索引(DBMS_AUTO_INDEX)
Oracle 19c中的自動索引(DBMS_AUTO_INDEX)
它能做什麼
自動索引功能執行以下操作。
-
根據表列使用情況確定潛在的自動索引。文件稱這些為“候選索引(candidate indexes)”。
-
將自動索引建立為不可見索引,因此不會在執行計劃中使用它們。索引名稱包括“SYS_AI”字首。
-
根據SQL語句測試不可見的自動索引,以確保它們能提高效能。如果它們導致效能提高,則可以它們可見。如果效能未得到改善,則相關的自動索引將標記為不可用,稍後將被刪除。針對失敗的自動索引測試的SQL語句被列入黑名單,因此將來不會考慮將它們用於自動索引。第一次對資料庫執行SQL時,最佳化程式不會考慮自動索引。
-
刪除未使用的索引。
先決條件
Oracle 19c,此功能僅限於企業版。透過設定初始化引數“_exadata_feature_on=true”進行測試。
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
這不受支援,不應在實際系統上使用。
配置
使用 DBMS_AUTO_INDEX 包來管理自動索引特性。下面描述了基本管理。
顯示配置
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>
如果我們切換到使用者定義的可插拔資料庫,我們只獲取該容器的值。
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>
啟用/禁用自動索引
使用 DBMS_AUTO_INDEX 包的 CONFIGURE 儲存過程配置自動索引。
使用 AUTO_INDEX_MODE 屬性控制用於自動索引的開關,該屬性具有以下允許值:
-
IMPLEMENT:開啟自動索引。提高效能的新索引可見並可供最佳化程式使用。
-
REPORT ONLY:開啟自動索引,但新索引仍然不可見。
-
OFF:關閉自動索引。
模式之間切換的命令示例如下:
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');
自動索引的表空間
預設情況下,自動索引是在預設的永久表空間中建立的。如果這是不可接受的,您可以使用 AUTO_INDEX_DEFAULT_TABLESPACE 屬性指定一個表空間來儲存它們。下面我們建立一個表空間來儲存自動索引,並相應地設定屬性。
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,如下命令所示:
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_DEFAULT_TABLESPACE',NULL);
模式級(Schema-Level)控制
一旦啟用了自動索引,在嘗試識別候選索引時會考慮所有模式。您可以使用 AUTO_INDEX_SCHEMA 屬性更改預設行為,該屬性允許您維護 包含/排除 列表。
如果 ALLOW 引數設定為true,則指定的模式(schema)將新增到包含列表中。注意:它構建了一個包含模式的謂詞。
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 引數值消除包含列表,如下所示:
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,則指定的模式將新增到排除列表中。
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引數值清除排除列表。
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>
其它配置
您可能希望考慮其他引數,這些都在此詳細說明。
-
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 引數指定自定義表空間時,將忽略此引數。
刪除二級索引
在做這個之前,請仔細考慮,測試,測試,測試!
如果您感覺特別勇敢, 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;
檢視
有幾個與自動索引功能相關的檢視,如下所示:
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列,該列指示索引是否由自動索引功能建立。
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;
活動報告
DBMS_AUTO_INDEX 包中包含兩個報告功能。
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偽列的引用。
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
以下是在建立任何索引之前預設活動報告的輸出示例。
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 : 0 Executions with fatal error : 0 ------------------------------------------------------------------------------- SUMMARY (AUTO INDEXES) ------------------------------------------------------------------------------- Index candidates : 0 Indexes created : 0 Space used : 0 B Indexes dropped : 0 SQL statements verified : 0 SQL statements improved : 0 SQL plan baselines created : 0 Overall improvement factor : 0x ------------------------------------------------------------------------------- SUMMARY (MANUAL INDEXES) ------------------------------------------------------------------------------- Unused indexes : 0 Space used : 0 B Unusable indexes : 0 ------------------------------------------------------------------------------- ERRORS --------------------------------------------------------------------------------------------- No errors found. --------------------------------------------------------------------------------------------- SQL>
About Me
........................................................................................................................ ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除 ● 本文在個人微 信公眾號( DB寶)上有同步更新 ● QQ群號: 230161599 、618766405,微信群私聊 ● 個人QQ號(646634621),微 訊號(db_bao),註明新增緣由 ● 於 2020年11月完成 ● 最新修改時間:2020年11月 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店: ● 小麥苗出版的資料庫類叢書: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麥苗OCP、OCM、高可用、DBA學習班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ........................................................................................................................ 請掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(230161599、618766405)、新增小麥苗微 信(db_bao), 學習最實用的資料庫技術。
........................................................................................................................ |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2732221/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Database 19c中的自動索引OracleDatabase索引
- Oracle 19c中基於函式的索引Oracle函式索引
- Oracle 19c中的TomcatOracleTomcat
- 【INDEX】Oracle19c 自動索引技術初探IndexOracle索引
- Docker中安裝Oracle 19cDockerOracle
- Oracle中的B樹索引Oracle索引
- Oracle 19c 利用觸發器在資料庫啟動後自動開啟 PDBOracle觸發器資料庫
- Oracle9i中的PGA自動管理Oracle
- 使用ansible-playbook自動化安裝Oracle DG資料庫19cOracle資料庫
- 利用 Oracle EM 企業管理器 進行oracle SQL的優化(自動生成索引)OracleSQL優化索引
- Oracle 9i升級19C 遷移關於失效索引的梳理方法Oracle索引
- Oracle 表的移動和索引的重建Oracle索引
- 索引在ORACLE中的應用分析索引Oracle
- Oracle 19c - 手動升級 Oracle 12.x, 18c CDB 到 Oracle 19c (19.x)Oracle
- Oracle 19c中的等待事件分類 Event WaitsOracle事件AI
- Oracle中job無法自動執行Oracle
- Oracle 19c的安裝Oracle
- Oracle 11gr2中的自動並行度Oracle並行
- 在Linux系統中讓ORACLE自動啟動LinuxOracle
- Oracle中的虛擬列索引-nosegment indexOracle索引Index
- Oracle中組合索引的使用詳解Oracle索引
- Sqlserver自動查詢缺失索引及拼出建立索引的語句的指令碼SQLServer索引指令碼
- Oracle 19C EMOracle
- oracle的索引Oracle索引
- Oracle PGA自動管理在OLAP系統中的應用Oracle
- 【19c】Oracle 19c 和 20c 的新特性解密Oracle解密
- 淺談oracle中重建索引 (ZT)Oracle索引
- oracle 19c dg搭建duplicate過程中報錯Oracle
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- linux下oracle的自動啟動LinuxOracle
- oracle資料庫中索引空間的重用Oracle資料庫索引
- Oracle資料庫中索引的維護 ztOracle資料庫索引
- Oracle資料庫中索引的維護(zt)Oracle資料庫索引
- Oracle資料庫中索引的維護(轉)Oracle資料庫索引
- UNIX自動啟動oracleOracle
- Oracle 19c Broker配置Oracle
- 【Oracle】Oracle 11g 中的自動資料庫維護任務管理Oracle資料庫
- Java中的自動裝箱與自動拆箱Java