Oracle统计信息的导出、导入
http://oracle.chinaitlab.com/induction/791615.html
?
1 創建一個專用表保存各表的統計信息:
exec dbms_stats.create_stat_table('ks38','fys');
2 將各表的統計信息導入到ks38.fys表中;
exec dbms_stats.export_table_stats('ks38','tcl_cust_base_info',null,'fys');
---可以創建不是登陸用戶下的表;如用system登陸,可以創建表到‘ks38'用戶下
或將指定schema的統計信息導入到ks38.fys表中
exec dbms_stats.export_schema_stats('ks38','fys');
注:
若將整個數據庫的統計信息導出到某個表必須按以下方式做:
1)用SYSDBA角色的用戶登陸(如system)
2) exec dbms_stat.create_stat_table('system','tbl_name'); ----記住:此處創建的表必須是登陸用戶下的表。
3) exec dbms_stat.export_database_stats('tbl_name')
****
導出表狀態、SCHEMA統計信息,保存導出信息的表的SCHEMA可以和登陸用戶名不一致;另外導入統計信息的表和原表盡可能
是同一schema下的
導出整個數據庫統計信息,保存導出信息的表的SCHEMA必須和登陸用戶名一致,必須是DBA角色。
3 查看統計信息是否導入:
select * from ks38.fys;
4 刪除某張表的統計信息:
exec dbms_stats.delete_table_stats('ks38','tcl_cust_base_info');
5 查看統計信息是否被刪除:
select table_name ,to_char(LAST_ANALYZED,'yyyymmdd hh24:mi:ss')
from ALL_tables where lower(table_name) LIKE 'tcl_cust_%_info%';
6 導入先前導出的統計信息:
exec dbms_stats.import_table_stats('ks38','tcl_cust_base_info',null,'fys');
注意:tcl_cust_base_info和fys都是在’ks38'用戶下的表。
?
=========
http://www.51testing.com/?uid-16403-action-viewspace-itemid-101605
oracle 10g如何關閉和打開自動收集統計信息
一、ORACLE10g自動收集統計信息--自動analyze從Oracle Database 10g開始,Oracle在建庫后就默認創建了一個名為GATHER_STATS_JOB的定時任務,用于自動收集CBO的統計信息。
這個自動任務默認情況下在工作日晚上10:00-6:00和周末全天開啟。調用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集統計信息。該過程首先檢測統計信息缺失和陳舊的對象。然后確定優先級,再開始進行統計信息。
可以通過以下查詢這個JOB的運行情況:
select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'其實同在10點運行的Job還有一個AUTO_SPACE_ADVISOR_JOB:SQL> select JOB_NAME,LAST_START_DATE from dba_scheduler_jobs;
JOB_NAME? ? ? ? ? ? ? ? ? ? ? LAST_START_DATE
------------------------------ --------------------------------------
AUTO_SPACE_ADVISOR_JOB? ? ? ? 04-DEC-07 10.00.00.692269 PM +08:00
GATHER_STATS_JOB? ? ? ? ? ? ? 04-DEC-07 10.00.00.701152 PM +08:00
FGR$AUTOPURGE_JOB
PURGE_LOG? ? ? ? ? ? ? ? ? ? ? 05-DEC-07 03.00.00.169059 AM PRC
?
然而這個自動化功能已經影響了很多系統的正常運行,晚上10點對于大部分生產系統也并非空閑時段。
而自動分析可能導致極為嚴重的閂鎖競爭,進而可能導致數據庫Hang或者Crash。所以建議最好關閉這個自動統計信息收集功能:
?
exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
自動化永遠而嚴重的隱患相伴隨!關閉及開啟自動搜集功能,有兩種方法,分別如下:
方法一:?
?
exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');
?
exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');
方法二:
alter system set "_optimizer_autostats_job"=false scope=spfile;
?
alter system set "_optimizer_autostats_job"=true scope=spfile;
?
Pfile可以直接修改初始化參數文件,重新啟動數據庫。
二、AWR默認通過MMON及MMNL進程來每小自動運行一次,為了節省空間,采集的數據在 7 天后自動清除。
?
快照頻率和保留時間都可以由用戶修改。要查看當前的設置,您可以使用下面的語句:
select snap_interval, retention
?
from dba_hist_wr_control;
?
SNAP_INTERVAL?????? RETENTION
------------------- -------------------
?+00000 01:00:00.0?? +00007 00:00:00.0
?這些 SQL 語句顯示快照每小時采集一次,采集的數據保留 7 天。要修改設置—例如,快照時間間隔為 20 分鐘,保留時間為兩天—您可以發出以下命令。參數以分鐘為單位。
begin
?? dbms_workload_repository.modify_snapshot_settings (51Testing軟件測試網(` W3]j:m9b2D`
????? interval => 20,
????? retention => 2*24*60
?? );end;
AWR 使用幾個表來存儲采集的統計數據,所有的表都存儲在新的名稱為 SYSAUX 的特定表空間中的 SYS 模式下,并且以 WRM$_* 和 WRH$_* 的格式命名。前一種類型存儲元數據信息(如檢查的數據庫和采集的快照),后一種類型保存實際采集的統計數據。(您可能已經猜到,H 代表“歷史數據 (historical)”而 M 代表“元數據 (metadata)”。)在這些表上構建了幾種帶前綴 DBA_HIST_ 的視圖,這些視圖可以用來編寫您自己的性能診斷工具。視圖的名稱直接與表相關;例如,視圖 DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上構建的。
?
您的處理計劃一般是有規律的,并且通常基于您對各種事件的了解和您處理它們的經驗。現在設想相同的事情由一個引擎來完成,這個引擎采集量度并根據預先確定的邏輯來推出可能的計劃。您的工作不就變得更輕松了嗎? 現在在 Oracle Database 10g中推出的這個引擎稱為自動數據庫診斷監控程序 (ADDM)。為了作出決策,ADDM 使用了由 AWR 采集的數據。
?
在 AWR 進行的每一次快照采集之后,調用 ADDM 來檢查量度并生成建議。因此,實際上您擁有了一個一天二十四小時工作的自動數據庫管理員,它主動地分析數據并生成建議,從而把您解放出來,使您能夠關注更具有戰略意義的問題。
快照默認是自動采集的,但您也可以按需要采集它們。所有的 AWR 功能都在程序包 DBMS_WORKLOAD_REPOSITORY 中實施。要采集一次快照,只需發出下面的命令:
execute dbms_workload_repository.create_snapshot它立即采集一次快照,快照被記錄在表 WRM$_SNAPSHOT 中。采集的量度是針對 TYPICAL 級別的。如果您想采集更詳細的統計數據,您可以在上面的過程中將參數 FLUSH_LEVEL 設置為 ALL。統計數據自動刪除,但也可以通過調用過程 drop_snapshot_range() 來手動刪除。
?
==========
http://blog.sina.com.cn/s/blog_539d361e0100ss2k.html
手工更新的語句是:
??? execute dbms_stats.gather_table_stats($USER_NAME,$TABLE_NAME);
使用手工更新的場景:
1. Oracle有個自動更新統計信息的Job,大約在每天晚上執行。所以在白天統計信息不會被更新掉;
2. 統計信息對CBO的影響有個閥值,尤其是對范圍查找來說,超過這個閥值,就使用索引,否則就全表掃描;
3. 白天發現查詢突然變得非常慢時,應該正好是突破這個閥值的時間點;
4. 這時可以使用手工更新來糾正統計信息的錯誤。
?
?
=======================
當你做一次db的dump之后,由于統計信息沒有更新,有可能導致查詢的性能變差,所以需要重新收集統計信息
總結
以上是生活随笔為你收集整理的Oracle统计信息的导出、导入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle sql developer
- 下一篇: autosys虚拟机定义