oracle統計信息
阿新 • • 發佈:2018-06-10
sun mat ima ati pos ans 收集 執行 strong
oracle統計信息
study oracle基礎基礎
統計信息相關
1.哪種優化器模式需要統計信息收集,ALL_ROWS
目前O3建議無論模式都進行統計信息收集,部分查詢采取的是all_rows模式
--查看當前數據庫CBO優化方式,默認all_rows方式CBO
show parameter optimizer_mode;
--修改優化器模式
alter system set optimizer_mode=all_rows scope=both;
2.查詢用戶統計信息收集情況
# sql
select last_analyzed,table_name,owner,num_rows,sample_size from dba_tables where owner=‘SCOTT‘;
查詢結果
字段名 | 對應 |
---|---|
LAST_ANALYZED | 上次時間 |
TABLE_NAME | 表名 |
OWNER | 用戶 |
NUM_ROWS | 當前條數 |
SAMPLE_SIZE | 統計信息條數 |
3.什麽是手工收集
使用DBMS_STATS包手工收集統計數據,其實自動收集的gather_stats_job作業本質上也是使用包來實現收集的,區別看是否是oralce自動執行的內部行為。
dbms_stats包提供幾種過程來統計不同粒度的數據,分為統計數據庫,模式,表以及索引
名 | 解釋 |
---|---|
gather_database_statistics | 為全庫表的表統計數據 |
gather_schema_statistics | 為某個模式統計數據 |
gather_table_statistics | 為某個特定的表收集統計數據 |
gather_index_statistics | 為某個索引表統計數據 |
統計數據會存儲在***dba_tab_statistics*** 和 ***dba_tab_col_statistics***數據字典中
手工收集舉例
- 為模式trade的所有表統計數據
- exec dbms_stats.gather_schema_stats(ownname => ‘TRADE‘);
- 為TRADE下面的表tstockinfo統計數據
- exec dbms_stats.gather_table_stats( ‘TRADE‘,‘tstockinfo‘);
- dept的索引統計數據
- select index_name,table_name from dba_indexes where owner =‘SCOTT‘;
- exec dbms_stats.gather_index_stats(‘SCOTT‘,‘PK_DEPT‘);
註:
- show parameter job_queue_processes;
- --如果該參數為0,則統計信息包不會工作,
- --需要設置參數
- alter system set job_queue_processes=20 scope=both;
手工收集整個數據庫統計信息
- begin
- dbms_stats.gather_database_stats(estimate_percent=>null);
- edn;
- /
oracle統計信息