19C新特性研究實時統計
新特性概述
其實 oracle 的統計資訊就是儲存在資料字典裡的一組資料,從多個維度描述了 oracle 資料庫裡物件的詳細資訊。 CBO 會利用這些統計資訊來計算目標 SQL 各種可能的、不同的執行路徑成本,並從中選擇一條成本值最小的執行路徑來作為目標 SQL 的執行計劃,所以說收集統計資訊對於資料庫的 SQL 有著至關重要的作用! oracle 資料庫會在一個固定的時間將資料庫裡的表和索引的相關統計資訊進行收集。我們可以開啟自動收集統計資訊的功能也可以透過以下命令手動收集統計資訊。
但是如今某些特定的生產資料庫每日也存在頻繁 DML 操作,為了給最佳化器提供準確的統計值,從而生成更加合理的執行計劃。從 10g 的自動收集統計資訊直到 19c 又推出了一個新的功能,實時收集資料物件的統計資訊。 顧名思義實時收集就是隻要發生 DML 操作以後, oracle 資料庫就是立即開始收集統計資訊。
需要格外注意的是,在 19c 中,這個特性只能在 Exadata 上使用,這個特性預設是啟用的。如果沒有 Exadata 環境,可透過設定引數 "_exadata_feature_on"=true 來模擬。請不要在非 Exadta 生產環境上使用
透過以下檢視瞭解實時統計的資訊
DBA_TAB_COL_STATISTICS |
此檢視顯示從 DBA_TAB_COLUMNS. 實時統計資料由 STATS_ON_CONVENTIONAL_DML 在 NOTES 列和 SHARED 在 SCOPE 列 |
DBA_TAB_STATISTICS |
此檢視顯示從 DBA_TAB_COLUMNS. 實時統計資料由 STATS_ON_CONVENTIONAL_DML 在 NOTES 列和 SHARED 在 SCOPE 列 |
檢視統計資訊
檢視列級統計資訊
SET PAGESIZE 5000 SET LINESIZE 200 COL COLUMN_NAME FORMAT a13 COL LOW_VALUE FORMAT a14 COL HIGH_VALUE FORMAT a14 COL NOTES FORMAT a5 COL PARTITION_NAME FORMAT a13 SELECT COLUMN_NAME, LOW_VALUE, HIGH_VALUE, SAMPLE_SIZE, NOTES FROM USER_TAB_COL_STATISTICS WHERE TABLE_NAME = 'SALES' ORDER BY 1, 5;
COLUMN_NAME LOW_VALUE HIGH_VALUE SAMPLE_SIZE NOTES AMOUNT_SOLD C10729 C2125349 5594 CHANNEL_ID C103 C10A 918843 CUST_ID C103 C30B0B 5595 PROD_ID C10E C20231 5593 PROMO_ID C122 C20A64 918843 QUANTITY_SOLD C102 C102 5593 TIME_ID 77C60101010101 78650C1F010101 5593
以上查詢結果, NOTES 欄位為空,則說明實時統計暫未收集
插入資料
嘗試插入資料,看看實時統計是否執行
INSERT INTO sales(prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold) SELECT prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold * 2, amount_sold * 2 FROM sales; COMMIT;
從遊標中獲取執行計劃
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format=>'TYPICAL'));
計劃顯示 LOAD TABLE CONVENTIONAL 在步驟 1 和 OPTIMIZER STATISTICS GATHERING 在步驟 2 中,這意味著資料庫收集了實時統計在常規插入期間
再次檢視列級統計資訊
SET PAGESIZE 5000 SET LINESIZE 200 COL COLUMN_NAME FORMAT a30 COL LOW_VALUE FORMAT a30 COL HIGH_VALUE FORMAT a30 COL NOTES FORMAT a20 COL PARTITION_NAME FORMAT a30 SELECT COLUMN_NAME, LOW_VALUE, HIGH_VALUE, SAMPLE_SIZE, NOTES FROM USER_TAB_COL_STATISTICS WHERE TABLE_NAME = 'TEST' ORDER BY 1, 5;
SELECT COLUMN_NAME, LOW_VALUE, HIGH_VALUE, SAMPLE_SIZE, NOTES FROM USER_TAB_COL_STATISTICS WHERE TABLE_NAME = 'SALES' ORDER BY 1, 5; COLUMN_NAME LOW_VALUE HIGH_VALUE SAMPLE_SIZE NOTES ------------- -------------- -------------- ----------- ------------------------- AMOUNT_SOLD C10729 C224422D 9073 STATS_ON_CONVENTIONAL_DML AMOUNT_SOLD C10729 C2125349 5702 CHANNEL_ID C103 C10A 9073 STATS_ON_CONVENTIONAL_DML CHANNEL_ID C103 C10A 918843 CUST_ID C103 C30B0B 9073 STATS_ON_CONVENTIONAL_DML CUST_ID C103 C30B0B 5702 PROD_ID C10E C20231 9073 STATS_ON_CONVENTIONAL_DML PROD_ID C10E C20231 5701 PROMO_ID C122 C20A64 9073 STATS_ON_CONVENTIONAL_DML PROMO_ID C122 C20A64 918843 QUANTITY_SOLD C102 C103 9073 STATS_ON_CONVENTIONAL_DML QUANTITY_SOLD C102 C102 5701 TIME_ID 77C60101010101 78650C1F010101 9073 STATS_ON_CONVENTIONAL_DML TIME_ID 77C60101010101 78650C1F010101 5701
這時候我們發現 NOTES 欄位顯示 STATS_ON_CONVENTIONAL_DML ,則說明資料庫在插入完資料以後,就實時收集了統計資訊。
測試完畢, 19c 版本的資料庫,開啟實時統計功能後,在發生 DML 操作以後, oracle 資料庫就會立即開始收集統計資訊
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23825935/viewspace-2933086/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE19c新特性-實時統計資訊收集Oracle
- 1 Oracle Database 19c 新特性OracleDatabase
- 【19c】Oracle 19c 和 20c 的新特性解密Oracle解密
- 23c 新特性之實時SQL計劃管理SQL
- oracle 19C新特性——混合分割槽表Oracle
- 11.2新特性之不可見索引-臨時統計資訊索引
- ORACLE 19c 新特性之混合分割槽表Oracle
- Oracle:19c 新特性——Memoptimized Rowstore 簡介OracleZed
- ORACLE 18C 19C 20C新特性Oracle
- Oracle 19c和20c新特性最全解密Oracle解密
- 11G新特性,比較統計資訊
- 11G新特性,待定的統計資訊
- 【kingsql分享】Oracle Database 19c的各種新特性介紹SQLOracleDatabase
- ORACLE 11g新特性-統計值掛起Oracle
- 新的Oracle時間資訊特性Oracle
- 11G Flashback Data Archive新特性的研究Hive
- Laravel 事件系統新特性Laravel事件
- Laravel 8 的新特性:時間旅行Laravel
- Oracle 11g新特性之收集多列統計資訊Oracle
- Oracle 11g新特性:多列統計資訊(MultiColumn Statistics)Oracle
- 10G新特性筆記之資料庫特性使用及HWM統計值筆記資料庫
- Java 8新特性(四):新的時間和日期APIJavaAPI
- java新特性處理時間工具類Java
- Java8新特性之時間APIJavaAPI
- PHP8 新特性實踐PHP
- Java8新特性實踐Java
- Java 8 新特性——實踐篇Java
- 11G result cache新特性的更多深入研究
- 11gR2 新特性--待定的統計資訊(Pending Statistic)
- 實戰10g新特性之RMAN TSPITR特性
- MySQL8.0新特性-臨時表的改善MySql
- Java8新特性之日期-時間APIJavaAPI
- java8 新特性之日期時間 APIJavaAPI
- oracle12c新特性(5)- 臨時undoOracle
- python 實現計時器,統計執行時長Python
- 新特性
- Kafka實戰-實時日誌統計流程Kafka
- Oracle11新特性——PLSQL新特性(七)OracleSQL