Oracle統計信息命令


1. 收集數據字典統計信息(針對SYS,SYSTEM 及其他數據庫用戶)
EXEC DBMS_STATS.gather_dictionary_stats;


2. 收集基表的統計信息V$,gv$視圖
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

select table_name, num_rows, last_analyzed
  from dba_tab_statistics
 where last_analyzed is not null
 order by last_analyzed desc


3. 收集全庫統計信息
EXEC DBMS_STATS.gather_database_stats;


--如果數據庫很大的話,可以修改採用率或併發,提高收集統計信息速度
EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15);
EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15, cascade => TRUE);
EXEC DBMS_STATS.gather_database_stats(estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,degree => 8);


4. 修改指定用戶名統計信息
EXEC DBMS_STATS.gather_schema_stats('QRUM');
EXEC DBMS_STATS.gather_schema_stats('QRUM', estimate_percent => 25);
EXEC DBMS_STATS.gather_schema_stats('QRUM', estimate_percent => 100, cascade => TRUE);

exec dbms_stats.gather_schema_stats(
    ownname => 'QRUM',
    method_opt => 'FOR ALL COLUMNS SIZE 1',
    granularity => 'ALL',
    degree => 8,
    cascade => TRUE,
    estimate_percent=>dbms_stats.auto_sample_size);

5. 收集指定表統計信息

EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMP');
EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMP', estimate_percent => 15);
EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMP', estimate_percent => 15, cascade => TRUE);

exec DBMS_STATS.GATHER_TABLE_STATS (
    ownname => 'SCOTT' ,
  tabname => 'EMP',
  cascade => true,
    method_opt=>'for all indexed columns size 1',
    granularity => 'ALL',
    degree => 8);

exec DBMS_STATS.GATHER_TABLE_STATS (
    ownname => 'SCOTT' ,
    tabname => 'EMP',
    cascade => true,
    method_opt=>'FOR ALL COLUMNS SIZE 1',
    granularity => 'ALL',
    degree => 8);


6. 收集指定分區表的單個分區
BEGIN
DBMS_STATS.GATHER_TABLE_STATS (
    ownname => 'SCOTT',
    tabname => 'TEST',  
    partname => 'TEST_JAN2016'  
    method_opt=>'for all indexed columns size 1',
    GRANULARITY => 'APPROX_GLOBAL AND PARTITION',
    degree => 8);
    END;
/


7. 鎖定和解鎖統計信息:

--鎖定指定用戶的統計信息:
EXEC DBMS_STATS.lock_schema_stats('SCOTT');

--鎖定指定表的統計信息
EXEC DBMS_STATS.lock_table_stats('SCOTT', 'EMP');

--鎖定分區表的統計信息
EXEC DBMS_STATS.lock_partition_stats('SCOTT', 'EMP', 'EMP');

--解鎖統計信息
EXEC DBMS_STATS.unlock_schema_stats('SCOTT');
EXEC DBMS_STATS.unlock_table_stats('SCOTT', 'SCOTT');
EXEC DBMS_STATS.unlock_partition_stats('SCOTT', 'EMP', 'TEST_JAN2016');

--查看統計信息鎖定情況
SELECT stattype_locked FROM dba_tab_statistics WHERE table_name = 'TEST' and owner = 'SCOTT';


8 .刪除統計信息
-- 刪除整個數據庫的統計信息:
EXEC DBMS_STATS.delete_database_stats;
-- 刪除指定用戶統計信息:
EXEC DBMS_STATS.delete_schema_stats('SCOTT');
-- 刪除指定表的統計信息:
EXEC DBMS_STATS.delete_table_stats('SCOTT', 'EMP');
-- 刪除指定列名統計信息:
EXEC DBMS_STATS.delete_column_stats('SCOTT', 'EMP', 'EMPNO');
-- 刪除索引統計信息:
EXEC DBMS_STATS.delete_index_stats('SCOTT', 'EMP_PK');
-- 刪除數據字典統計信息:
EXEC DBMS_STATS.delete_dictionary_stats;
-- 數據視圖對象/基表統計信息:
exec dbms_stats.delete_fixed_objects_stats;
-- 刪除系統統計信息:
exec dbms_stats.delete_system_stats('STAT_TAB');


8. 獲取和設置表上統計信息收集選項

SELECT dbms_stats.get_prefs('PUBLISH') EST_PCT FROM dual;
select dbms_stats.get_prefs('PUBLISH', 'SCOTT') from dual

select dbms_stats.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'PUBLISH') FROM DUAL;
select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'INCREMENTAL') FROM DUAL;
select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'GRANULARITY') FROM DUAL;
select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'STALE_PERCENT')  FROM DUAL;
select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'ESTIMATE_PERCENT')  FROM DUAL;
select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'DEGREE')  FROM DUAL;


exec dbms_stats.set_table_prefs('SCOTT','EMP','PUBLISH','FALSE');
exec dbms_stats.set_table_prefs('SCOTT','EMP','ESTIMATE_PERCENT','20');
exec dbms_stats.set_table_prefs('SCOTT','EMP','DEGREE','8');

exec dbms_stats.SET_SCHEMA_PREFS('DBATEST','PUBLISH','FALSE');
exec dbms_stats.SET_SCHEMA_PREFS('DBATEST','ESTIMATE_PERCENT','20');
exec dbms_stats.SET_SCHEMA_PREFS('DBATEST','CASCADE','TRUE');


exec dbms_stats.set_database_prefs('PUBLISH', 'TRUE');
exec dbms_stats.set_database_prefs('DEGREE', '16');


exec dbms_stats.set_global_prefs('PUBLISH', 'TRUE');
exec dbms_stats.set_global_prefs('DEGREE', '16');


9 . 刪除統計信息收集選項

exec dbms_stats.delete_schema_prefs('SCOTT', 'DEGREE');
exec dbms_stats.delete_schema_prefs('SCOTT', 'CASCADE');


exec dbms_stats.delete_database_prefs('ESTIMATE_PERCENT', FALSE);
exec dbms_stats.delete_database_prefs('DEGREE', FALSE);


10 . Publish pending statistics:

-- 按用戶pending統計信息
exec dbms_stats.publish_pending_stats('SCOTT',null);

-- 按表pending統計信息
EXEC DBMS_STATS.PUBLISH_PENDING_STATS ('SCOTT','EMP');


11. Delete pending statistics:
exec dbms_stats.delete_pending_stats('SCOTT', 'EMP');
exec dbms_stats.delete_pending_stats('SCOTT', null);


12. 更新表的統計信息:

EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE(OWNNAME =>'RAJ',STATTAB =>'STAT_TEST');


13. 查看/修改統計信息保留期限:

select dbms_stats.get_stats_history_retention from dual;
exec DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(60);


14. 創建統計信息保留表
exec dbms_stats.create_stat_table(ownname => 'SCOTT', stattab => 'STAT_BACKUP',tblspace=>'USERS');


15. 導出統計信息

-- 導出全庫統計信息
exec dbms_stats.export_database_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
exec dbms_stats.export_table_stats(ownname=>'SCOTT', tabname=>'EMP', statown =>'SCOTT',stattab=>'STAT_BACKUP', cascade=>true);
exec dbms_stats.export_schema_stats(ownname=>'SCOTT', statown =>'SCOTT' , stattab=>'STAT_BACKUP');
exec dbms_stats.export_fixed_objects_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
exec dbms_stats.export_dictionary_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
exec dbms_stats.export_index_stats(ownname=>'SCOTT', indname=>'EMP_UK1', statown =>'SCOTT',stattab=>'STAT_BACKUP')


16. 導入統計信息:

exec dbms_stats.import_database_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
exec dbms_stats.import_table_stats(ownname=>'SCOTT', tabname=>'EMP', statown =>'SCOTT',stattab=>'STAT_BACKUP', cascade=>true);
exec dbms_stats.import_schema_stats(ownname=>'SCOTT', statown =>'SCOTT' , stattab=>'STAT_BACKUP');
exec dbms_stats.import_fixed_objects_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
exec dbms_stats.import_dictionary_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
exec dbms_stats.import_index_stats(ownname=>'SCOTT', indname=>'EMP_UK1', statown =>'SCOTT',stattab=>'STAT_BACKUP');


17 . 統計信息相關查詢
-- 查詢表的統計信息:
select owner,table_name,STALE_STATS from dba_tab_statistics where owner='&SCHEMA_NAME' and table_name='&TABLE_NAME';
-- 查詢索引統計信息:
select owner,INDEX_NAME,TABLE_NAME from DBA_IND_STATISTICS where owner='&SCHEMA_NAME' and index_name='&INDEX_NAME';

--  查詢錶的歷史統計信息
select owner,TABLE_NAME,STATS_UPDATE_TIME from dba_tab_stats_history where table_name='&TABLE_NAME';

-- 查詢保存統計信息佔用的表空間
select occupant_desc, space_usage_kbytes from v$sysaux_occupants where OCCUPANT_DESC like '%Statistics%';

-- 查詢表是否鎖定統計信息
select owner, table_name, stattype_locked from dba_tab_statistics where stattype_locked is not null and owner not in ('SYS','SYSTEM');

 

下面是我的公衆號:定期會更新一些Oracle 數據庫及Python相關的學習經驗。歡迎關注:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章