Oracle DBMS_STATS.SET_TABLE_STATS 模擬大資料量進行 SQL 除錯和最佳化
生產上有一張 200 萬條的表,需要進行 SQL 最佳化;測試環境中的這張表,裡面只有 10 萬行的資料。
不需要真正插入 190 萬條的資料,可以透過DBMS_STATS.SET_TABLE_STATS 這個包進行表統計資訊的設定,來模擬大資料量的場景。
首先,對測試環境的這張表進行統計資訊收集,以得到準確的統計資訊
BEGIN
DBMS_STATS.GATHER_TABLE_STATS ('acct', 'elmp_trans_custommessage');
END;
檢視這張表的相關資訊(行數、使用的所有資料塊、每行的位元組數)
select table_name,num_rows,blocks,avg_row_len from user_tables where lower(table_name) = 'elmp_trans_custommessage';
下面是使用這張表的SQL執行計劃
根據上面查詢到的資訊,重新設定這張表的統計資訊,將表的資料量增大到 200 萬條
計算200萬條時,這張表的資料塊大小
select round(3268*2000000/111684) from dual;
58522
手動設定這張表的統計資訊
BEGIN
DBMS_STATS.SET_TABLE_STATS(OWNNAME => 'ACCT',
TABNAME => 'ELMP_TRANS_CUSTOMMESSAGE',
NUMROWS => 2000000,
NUMBLKS => 58522,
AVGRLEN => 202);
END;
檢視這張表的相關資訊(行數、使用的所有資料塊、每行的位元組數),可以看到,我們手動設定的表的相關資訊已經生效了
select table_name,num_rows,blocks,avg_row_len from user_tables where lower(table_name) = 'elmp_trans_custommessage';
重新檢視執行計劃,可以看到成本從 891 增大到 15900
建立索引
create index acct.idx_trans_custommessage on acct.elmp_trans_custommessage(CustomMessageType,CUSTOMMESSAGESTATUS) tablespace TS_ACCT_INDEX;
加上索引的 hint,檢視執行計劃,可以看到成本的大幅下降
不需要真正插入 190 萬條的資料,可以透過DBMS_STATS.SET_TABLE_STATS 這個包進行表統計資訊的設定,來模擬大資料量的場景。
首先,對測試環境的這張表進行統計資訊收集,以得到準確的統計資訊
BEGIN
DBMS_STATS.GATHER_TABLE_STATS ('acct', 'elmp_trans_custommessage');
END;
檢視這張表的相關資訊(行數、使用的所有資料塊、每行的位元組數)
select table_name,num_rows,blocks,avg_row_len from user_tables where lower(table_name) = 'elmp_trans_custommessage';
下面是使用這張表的SQL執行計劃
根據上面查詢到的資訊,重新設定這張表的統計資訊,將表的資料量增大到 200 萬條
計算200萬條時,這張表的資料塊大小
select round(3268*2000000/111684) from dual;
58522
手動設定這張表的統計資訊
BEGIN
DBMS_STATS.SET_TABLE_STATS(OWNNAME => 'ACCT',
TABNAME => 'ELMP_TRANS_CUSTOMMESSAGE',
NUMROWS => 2000000,
NUMBLKS => 58522,
AVGRLEN => 202);
END;
檢視這張表的相關資訊(行數、使用的所有資料塊、每行的位元組數),可以看到,我們手動設定的表的相關資訊已經生效了
select table_name,num_rows,blocks,avg_row_len from user_tables where lower(table_name) = 'elmp_trans_custommessage';
重新檢視執行計劃,可以看到成本從 891 增大到 15900
建立索引
create index acct.idx_trans_custommessage on acct.elmp_trans_custommessage(CustomMessageType,CUSTOMMESSAGESTATUS) tablespace TS_ACCT_INDEX;
加上索引的 hint,檢視執行計劃,可以看到成本的大幅下降
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2122395/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle DBMS_STATS.SET_TABLE_STATS 模擬大資料量進行 SQL 除錯和優化Oracle大資料SQL除錯優化
- oracle大資料量分批刪除Oracle大資料
- 執行大資料量SQL檔案大資料SQL
- Oracle中大資料量刪除Oracle大資料
- 大資料量資料查詢最佳化大資料
- 谷歌瀏覽器模擬進行移動端除錯簡單介紹谷歌瀏覽器除錯
- PID除錯軟體(C#、模擬、模擬)除錯C#
- Oracle進行模擬測試資料的一個例子Oracle
- 大資料量刪除的思考(二)大資料
- 大資料量刪除的思考(三)大資料
- 大資料量刪除的思考(四)大資料
- 大資料量刪除的思考(一)大資料
- oracle 大資料量資料插入Oracle大資料
- 模擬Oracle行遷移和行連結Oracle
- 怎麼在移動端模擬pc端進行web開發除錯日誌Web除錯
- koa,koa-router進行資料模擬
- 使用KepServerEx進行資料模擬Server
- 模擬利用MV進行資料遷移
- sql server 大資料量表修屬性SQLServer大資料
- 兩組資料量相對大時,如何高效進行比對
- sql 資料庫 龐大資料量 需要分表SQL資料庫大資料
- 【SQL】Oracle資料庫資料量及效能資訊收集SQLOracle資料庫
- 使用SQL Profile進行SQL最佳化案例SQL
- 【Matlab】BASK的除錯與解調模擬Matlab除錯
- uni-app 模擬機除錯環境搭建APP除錯
- Redis -對大資料量的 key 進行批量操作的一個記錄Redis大資料
- oracle SQL效能最佳化大總結OracleSQL
- 活字格效能最佳化技巧(2)-如何在大規模資料量的場景下提升資料訪問效率
- iOS 模擬器除錯大法瞭解一下?iOS除錯
- mysql 關於大資料量日誌表的最佳化過程MySql大資料
- 使用 C-Reduce 進行除錯除錯
- 使用pdb進行Python除錯Python除錯
- phpstorm進行動態除錯PHPORM除錯
- Nebula Graph 在大規模資料量級下的實踐和定製化開發
- 【原始碼】使用MATLAB進行ECG模擬原始碼Matlab
- 構建基於 iOS 模擬器的前端除錯方案iOS前端除錯
- oracle實用sql(13)--併發簡單模擬OracleSQL
- oracle外部表實現大資料量的Excel匯入Oracle大資料Excel