十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
在發(fā)現(xiàn)一個(gè)語(yǔ)句的執(zhí)行計(jì)劃有異常的時(shí)候,通常會(huì)生成一個(gè)sqlrpt看看使用的執(zhí)行計(jì)劃是否正確,如何來(lái)判斷執(zhí)行計(jì)劃是否正確,將通過(guò)以下幾個(gè)步驟來(lái)判斷:
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的賓陽(yáng)網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
1.先查看sql語(yǔ)句的結(jié)構(gòu),看語(yǔ)句中連接是union,還是等值連接還是左、右連接,再看連接中的表數(shù)量。
2.查看執(zhí)行計(jì)劃中出現(xiàn)異常的部分。
3.查看各表的索引情況及表是否是分區(qū)的,在where條件上使用的索引列是否正確,看統(tǒng)計(jì)分析表中對(duì)表的分析結(jié)果是否正確
4.分析表的用途,表的數(shù)據(jù)日增長(zhǎng)量。
5.分析為什么會(huì)出現(xiàn)異常的執(zhí)行計(jì)劃。
跟蹤執(zhí)行計(jì)劃的方法:
(1) set autotrace on explain 只顯示查詢結(jié)果和執(zhí)行計(jì)劃
set autotrace on statistic 只顯示查詢結(jié)果統(tǒng)計(jì)信息
set autotrace on 顯示前兩者
set autotrace traceonly 不顯示查詢結(jié)果,只顯示執(zhí)行計(jì)劃和統(tǒng)計(jì)信息
set autotrace off 關(guān)閉跟蹤
要使用autotrace,必須在sqlplus里面使用,且使用的是sys用戶。
(2)可以使用explain plan for select * from c_cons 可以解析執(zhí)行計(jì)劃,然后通過(guò)select * from table(dbms_xplain.display(null,null,’outline’,null));來(lái)顯示執(zhí)行計(jì)劃。
(3)使用工具Toad for oracle使用sql_id來(lái)生成執(zhí)行計(jì)劃
從目前來(lái)看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner來(lái)進(jìn)行,
Oracle數(shù)據(jù)庫(kù)的所有更改都記錄在日志中,但是原始的日志信息我們根本無(wú)法看懂,
而LogMiner就是讓我們看懂日志信息的工具。從這一點(diǎn)上看,它和tkprof差不多,一個(gè)是用來(lái)分析日志信息,
一個(gè)則是格式化跟蹤文件。
通過(guò)對(duì)日志的分析我們可以實(shí)現(xiàn)下面的目的:
1、查明數(shù)據(jù)庫(kù)的邏輯更改;
2、偵察并更正用戶的誤操作;
3、執(zhí)行事后審計(jì);
4、執(zhí)行變化分析。
在Oracle 數(shù)據(jù)庫(kù)中,我們經(jīng)常需要去手工分析表和索引,還有某個(gè)模式下所有的表和索引等等。oracle 提供了兩種分析方法,分別是dbms_stats 包和analyze 命令。這些是我們?cè)谌粘m?xiàng)目管理中的真實(shí)使用的方法,供參考。
在10g 中分析某一個(gè)用戶下所有的對(duì)象,如user_miki 用戶
Sql代碼 收藏代碼
sys.dbms_stats.gather_schema_stats(ownname = 'user_miki',estimate_percent = 30,method_opt = 'FOR ALL INDEXED COLUMNS SIZE AUTO',cascade = true,options = 'GATHER');
這是我在項(xiàng)目中分析一個(gè)用戶所有對(duì)象的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。
(miki西游 @mikixiyou 文檔,原文鏈接: )
在10g 中分析某一個(gè)用戶下某一個(gè)表及其索引,如user_miki 用戶下info 表和它的索引
Sql代碼 收藏代碼
execute dbms_stats.gather_table_stats(ownname = 'user_miki',tabname = 'info',estimate_percent = 30,method_opt = 'for all indexed columns size auto');
這是我在項(xiàng)目中單獨(dú)分析一個(gè)用戶中一張表的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。
我們?cè)趃oogle 時(shí),還能看到使用analzye 命令分析表的方法。
Sql代碼 收藏代碼
analyze table table_name compute statistics;
這個(gè)會(huì)將索引和表一起分析;
Sql代碼 收藏代碼
analyze table table_name compute statistics for table;
這個(gè)僅分析表;
analyze table table_name compute statistics for all columns;
這個(gè)僅分析表,和上面所有的字段,生成柱形圖
analyze table table_name compute statistics for all indexed columns;
這個(gè)僅分析表,和上面所有建立索引的字段,生成柱形圖
在9i 中,我們常常使用analyze 方法,在10g 以后,就改為dbms_stats.gather_schema_stats 類似的包來(lái)分析數(shù)據(jù)庫(kù)對(duì)象了。
10g 的分析函數(shù)包比9i 的analyze 方法更靈活一些。
在10g 中,會(huì)有個(gè)系統(tǒng)的計(jì)劃任務(wù),每天10 點(diǎn)和周末兩天都自動(dòng)分析新的數(shù)據(jù)庫(kù)對(duì)象和它認(rèn)為統(tǒng)計(jì)信息已經(jīng)過(guò)期的數(shù)據(jù)庫(kù)對(duì)象。這個(gè)分析結(jié)果有時(shí)候不靠譜。
因此,我都采用10g 中提供的dbms_stats.gather_schema_stats 方法作為補(bǔ)充,設(shè)置一個(gè)計(jì)劃任務(wù)定期去分析業(yè)務(wù)用戶下所有數(shù)據(jù)庫(kù)對(duì)象。
Sql代碼 收藏代碼
variable job number;
begin
sys.dbms_job.submit(job = :job,
what = 'sys.dbms_stats.gather_schema_stats(ownname = ''USR_MIKI'',estimate_percent = 30,method_opt = ''FOR ALL INDEXED COLUMNS SIZE AUTO'',cascade = true,options = ''GATHER'');',
next_date = to_date('16-12-2012 00:56:24', 'dd-mm-yyyy hh24:mi:ss'),
interval = 'sysdate+7');
commit;
end;
/
例如,設(shè)置為每周六運(yùn)行一次。