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/26506993/viewspace-1962249/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle DBMS_STATS.SET_TABLE_STATS 模擬大資料量進行 SQL 除錯和最佳化Oracle大資料SQL除錯
- oracle大資料量分批刪除Oracle大資料
- 執行大資料量SQL檔案大資料SQL
- MySQL大資料量快速插入方法和語句優化MySql大資料優化
- Oracle中大資料量刪除Oracle大資料
- 大資料量高併發的資料庫優化大資料資料庫優化
- 用Junit工具包和Debug功能進行Java除錯與優化Java除錯優化
- 使用SQL Profile進行SQL優化案例SQL優化
- 谷歌瀏覽器模擬進行移動端除錯簡單介紹谷歌瀏覽器除錯
- PID除錯軟體(C#、模擬、模擬)除錯C#
- Oracle進行模擬測試資料的一個例子Oracle
- 大資料量刪除的思考(二)大資料
- 大資料量刪除的思考(三)大資料
- 大資料量刪除的思考(四)大資料
- 大資料量刪除的思考(一)大資料
- oracle 大資料量資料插入Oracle大資料
- mysql大資料量分頁查詢方法及其優化MySql大資料優化
- 模擬Oracle行遷移和行連結Oracle
- SQL Server DBA調優日記(一)——大資料量查詢記錄數優化及原理探討SQLServer大資料優化
- 怎麼在移動端模擬pc端進行web開發除錯日誌Web除錯
- Nebula Graph 在大規模資料量級下的實踐和定製化開發
- 使用dbms_sqltune進行SQL優化SQL優化
- koa,koa-router進行資料模擬
- 使用KepServerEx進行資料模擬Server
- 模擬利用MV進行資料遷移
- sql server 大資料量表修屬性SQLServer大資料
- mysql 關於大資料量日誌表的優化過程MySql大資料優化
- 對SQLServer錯誤使用聚集索引的優化案例(千萬級資料量)SQLServer索引優化
- oracle sql優化OracleSQL優化
- oracle sql 優化OracleSQL優化
- 高併發,大資料量系統的資料結構優化思路大資料資料結構優化
- 兩組資料量相對大時,如何高效進行比對
- sql 資料庫 龐大資料量 需要分表SQL資料庫大資料
- 如何除錯前端:優化網路資源除錯前端優化
- 【SQL】Oracle資料庫資料量及效能資訊收集SQLOracle資料庫
- Oracle SQL效能優化技巧大總結_水OracleSQL優化
- 大資料量資料查詢最佳化大資料
- 參考SQL Tunning Adviser進行SQL優化SQL優化