1. 程式人生 > >oracle統計信息

oracle統計信息

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***數據字典中

手工收集舉例

  1. 為模式trade的所有表統計數據
  1. exec dbms_stats.gather_schema_stats(ownname => ‘TRADE‘);
  1. 為TRADE下面的表tstockinfo統計數據
  1. exec dbms_stats.gather_table_stats( ‘TRADE‘,‘tstockinfo‘);
  1. dept的索引統計數據
  1. select index_name,table_name from dba_indexes where owner =‘SCOTT‘;
  2. exec dbms_stats.gather_index_stats(‘SCOTT‘,‘PK_DEPT‘);

註:

  1. show parameter job_queue_processes;
  2. --如果該參數為0,則統計信息包不會工作,
  3. --需要設置參數
  4. alter system set job_queue_processes=20 scope=both;

手工收集整個數據庫統計信息

  1. begin
  2. dbms_stats.gather_database_stats(estimate_percent=>null);
  3. edn;
  4. /










oracle統計信息