锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Oracle鍦ㄦ墽琛屼竴涓猄QL涔嬪墠,棣栧厛瑕佸垎鏋愪竴涓嬭鍙ョ殑鎵ц璁″垝,鐒跺悗鍐嶆寜鎵ц璁″垝鍘繪墽琛屻傚垎鏋愯鍙ョ殑鎵ц璁″垝鐨勫伐浣滄槸鐢變紭鍖栧櫒(Optimizer)鏉ュ畬鎴愮殑銆備笉鍚岀殑鎯呭喌,涓鏉QL鍙兘鏈夊縐嶆墽琛岃鍒?浣嗗湪鏌愪竴鏃剁偣,涓瀹氬彧鏈変竴縐嶆墽琛岃鍒掓槸鏈浼樼殑,鑺辮垂鏃墮棿鏄渶灝戠殑銆傜浉淇′綘涓瀹氫細鐢≒l/sql Developer銆乀oad絳夊伐鍏峰幓鐪嬩竴涓鍙ョ殑鎵ц璁″垝,涓嶈繃浣犲彲鑳藉Rule銆丆hoose銆丗irst rows銆丄ll rows榪欏嚑欏規湁鐤戦棶,鍥犱負鎴戝綋鍒濅篃鏄繖鏍風殑,閭f椂鎴戜篃鐤戞儜涓轟粈涔堥変簡浠ヤ笂鐨勪笉鍚岀殑欏?鎵ц璁″垝灝卞彉浜?
1銆佷紭鍖栧櫒鐨勪紭鍖栨柟寮?
Oracle鐨勪紭鍖栧櫒鍏辨湁涓ょ鐨勪紭鍖栨柟寮?鍗沖熀浜庤鍒欑殑浼樺寲鏂瑰紡(Rule-Based Optimization,綆縐頒負RBO)鍜屽熀浜庝唬浠風殑浼樺寲鏂瑰紡(Cost-Based Optimization,綆縐頒負CBO)銆? A銆丷BO鏂瑰紡錛氫紭鍖栧櫒鍦ㄥ垎鏋怱QL璇彞鏃?鎵閬靛驚鐨勬槸Oracle鍐呴儴棰勫畾鐨勪竴浜涜鍒欍傛瘮濡傛垜浠父瑙佺殑,褰撲竴涓獁here瀛愬彞涓殑涓鍒楁湁绱㈠紩鏃跺幓璧扮儲寮曘? B銆丆BO鏂瑰紡錛氫緷璇嶄箟鍙煡,瀹冩槸鐪嬭鍙ョ殑浠d環(Cost)浜?榪欓噷鐨勪唬浠蜂富瑕佹寚Cpu鍜屽唴瀛樸備紭鍖栧櫒鍦ㄥ垽鏂槸鍚︾敤榪欑鏂瑰紡鏃?涓昏鍙傜収鐨勬槸琛ㄥ強绱㈠紩鐨勭粺璁′俊鎭傜粺璁′俊鎭粰鍑鴻〃鐨勫ぇ灝?銆佹湁灝戣銆佹瘡琛岀殑闀垮害絳変俊鎭傝繖浜涚粺璁′俊鎭搗鍒濆湪搴撳唴鏄病鏈夌殑,鏄綘鍦ㄥ仛analyze鍚庢墠鍑虹幇鐨?寰堝鐨勬椂渚繃鏈熺粺璁′俊鎭細浠や紭鍖栧櫒鍋氬嚭涓涓敊璇殑鎵ц璁″垝,鍥犱簺鎴戜滑搴斿強鏃舵洿鏂拌繖浜涗俊鎭傚湪Oracle8鍙婁互鍚庣殑鐗堟湰,Oracle鍒楁帹鑽愮敤CBO鐨勬柟寮忋? 鎴戜滑瑕佹槑浜?涓嶄竴瀹氳蛋绱㈠紩灝辨槸浼樼殑 ,姣斿涓涓〃鍙湁涓よ鏁版嵁,涓嬈O灝卞彲浠ュ畬鎴愬叏琛ㄧ殑媯绱?鑰屾鏃惰蛋绱㈠紩鏃跺垯闇瑕佷袱嬈O,榪欐椂瀵硅繖涓〃鍋氬叏琛ㄦ壂鎻?full table scan)鏄渶濂界殑銆?
2銆佷紭鍖栧櫒鐨勪紭鍖栨ā寮?Optermizer Mode)
浼樺寲妯″紡鍖呮嫭Rule,Choose,First rows,All rows榪欏洓縐嶆柟寮?涔熷氨鏄垜浠互涓婃墍鎻愬強鐨勩傚涓嬫垜瑙i噴涓涓嬶細 Rule:涓嶇敤澶氳,鍗寵蛋鍩轟簬瑙勫垯鐨勬柟寮忋? Choolse:榪欐槸鎴戜滑搴旇娉ㄧ殑,榛樿鐨勬儏鍐典笅Oracle鐢ㄧ殑渚挎槸榪欑鏂瑰紡銆傛寚鐨勬槸褰撲竴涓〃鎴栨垨绱㈠紩鏈夌粺璁′俊鎭?鍒欒蛋CBO鐨勬柟寮?濡傛灉琛ㄦ垨绱㈠紩娌$粺璁′俊鎭?琛ㄥ張涓嶆槸鐗瑰埆鐨勫皬,鑰屼笖鐩稿簲鐨勫垪鏈夌儲寮曟椂,閭d箞灝辮蛋绱㈠紩,璧癛BO鐨勬柟寮忋? First Rows:瀹冧笌Choose鏂瑰紡鏄被浼肩殑,鎵涓嶅悓鐨勬槸褰撲竴涓〃鏈夌粺璁′俊鎭椂,瀹冨皢鏄互鏈蹇殑鏂瑰紡榪斿洖鏌ヨ鐨勬渶鍏堢殑鍑犺,浠庢諱綋涓婂噺灝戜簡鍝嶅簲鏃墮棿銆? All Rows:涔熷氨鏄垜浠墍璇寸殑Cost鐨勬柟寮?褰撲竴涓〃鏈夌粺璁′俊鎭椂,瀹冨皢浠ユ渶蹇殑鏂瑰紡榪斿洖琛ㄧ殑鎵鏈夌殑琛?浠庢諱綋涓婃彁楂樻煡璇㈢殑鍚炲悙閲忋傛病鏈夌粺璁′俊鎭垯璧板熀浜庤鍒欑殑鏂瑰紡銆?
3銆佸浣曡瀹氶夌敤鍝浼樺寲妯″紡
a銆両nstance綰у埆 鎴戜滑鍙互閫氳繃鍦╥nit<SID>.ora鏂囦歡涓瀹歄PTIMIZER_MODE=RULE銆丱PTIMIZER_MODE=CHOOSE銆丱PTIMIZER_MODE=FIRST_ROWS銆丱PTIMIZER_MODE=ALL_ROWS鍘婚夌敤3鎵鎻愮殑鍥涚鏂瑰紡,濡傛灉浣犳病璁懼畾OPTIMIZER_MODE鍙傛暟鍒欓粯璁ょ敤鐨勬槸Choose榪欑鏂瑰紡銆? B銆丼essions綰у埆 閫氳繃SQL> ALTER SESSION SET OPTIMIZER_MODE=<Mode>;鏉ヨ瀹氥? 榪欎簺闇瑕佺敤鍒癏int,姣斿:
4銆佷負浠涔堟湁鏃朵竴涓〃鐨勬煇涓瓧孌墊槑鏄庢湁绱㈠紩,褰撹瀵熶竴浜涜鐨勬墽琛岃鍒掔‘涓嶈蛋绱㈠紩鍛紵濡備綍瑙e喅鍛?錛?
A銆佷笉璧扮儲寮曞ぇ浣撴湁浠ヤ笅鍑犱釜鍘熷洜
5銆佸叾瀹冪浉鍏?
A銆佸浣曠湅涓涓〃鎴栫儲寮曟槸鍚︽槸緇熻淇℃伅 SQL>SELECT * FROM user_tables SQL>SELECT * FROM user_indexes b銆佸鏋滄垜浠厛鐢–BO鐨勬柟寮?鎴戜滑搴斿強鏃跺幓鏇存柊琛ㄥ拰绱㈠紩鐨勭粺璁′俊鎭?浠ュ厤鐢熷艦涓嶅垏鍚堝疄鐨勬墽琛岃鍒掋? 鍏蜂綋鐨凙NALYZE璇彞璇峰弬鐓racle8i/9i 鐨剅efrence鏂囨。銆?
]]>
錛嶏紞浠?font color="#ff0000">http://www.oradb.net/杞澆榪囨潵
C銆佽鍙ョ駭鍒?
SQL> SELECT /*+ RULE */ a.userid,
2 b.name,
3 b.depart_name
4 FROM tf_f_yhda a,
5 tf_f_depart b
6 WHERE a.userid=b.userid;
鈾浣犲湪Instance綰у埆鎵鐢ㄧ殑鏄痑ll_rows鐨勬柟寮?
鈾浣犵殑琛ㄧ殑緇熻淇℃伅(鏈鍙兘鐨勫師鍥?
鈾浣犵殑琛ㄥ緢灝?涓婃枃鎻愬埌榪囩殑,Oracle鐨勪紭鍖栧櫒璁や負涓嶅煎緱璧扮儲寮曘?
B銆佽В鍐蟲柟娉?
鈾鍙互淇敼init<SID>.ora涓殑OPTIMIZER_MODE榪欎釜鍙傛暟,鎶婂畠鏀逛負Rule鎴朇hoose,閲嶈搗鏁版嵁搴撱備篃鍙互浣跨敤4涓墍鎻愮殑Hint.
鈾鍒犻櫎緇熻淇℃伅
SQL>analyze table table_name delete statistics;
鈾琛ㄥ皬涓嶈蛋绱㈠紩鏄鐨?涓嶇敤璋冪殑銆?
2 WHERE table_name=<table_name>
3 AND num_rows is not null;
2 WHERE table_name=<table_name>
3 AND num_rows is not null;
SQL> ANALYZE TABLE table_name COMPUTE STATISTICS;
SQL> ANALYZE INDEX index_name ESTIMATE STATISTICS;
]]>
璇ュ伐鍏風殑瀹夎銆佷嬌鐢ㄦ瘮杈冪畝鍗曪紝鏃ュ父涓昏鐢ㄥ埌鐨勬槸鑴氭湰錛?BR> 鑴氭湰璺緞${oracle_home}/rdbms/admin鐩綍涓?
--spdrop.sql 鍒犻櫎鑴氭湰錛屼涪寮冪粺璁″垎鏋愮殑鐩稿叧鍖呫佽鍥俱佽〃銆佸悓涔夎瘝絳夊璞?棣栨鍒涘緩鏃犻』鎵ц)
--spcreate.sql 鍒涘緩鑴氭湰錛岀敓鎴愮粺璁″垎鏋愮殑鐩稿叧鍖呫佽鍥俱佽〃銆佸悓涔夎瘝絳夊璞★紙棣栨鎵ц鍓嶅厛鍒涘緩涓涓〃絀洪棿錛?BR> --緇熻鏃剁敓鎴愪袱嬈″揩鐓э紝涓鑸湪30-40鍒嗛挓宸﹀彸
--鎵ц鏂規硶
鐢╯ys鐧婚檰sqlplus鍚庨棿闅斿搴旀椂闂存墽琛屼袱嬈?exec statspack.snap;
--spreport.sql 鐢熸垚鎶ュ憡璁板綍sql ,鐢熸垚鐨勬姤鍛婃枃浠跺湪緋葷粺褰撳墠璺緞涓嬶紝鏂囦歡鍚嶉粯璁や負錛?BR> sp_寮濮嬪揩鐓у彿_緇撴潫蹇収鍙?lst
--sprepsql.sql 鍒嗘瀽鐩稿叧蹇収涓殑sql鎵ц璁″垝錛?BR> --sppurge.sql 鍒犻櫎鍦ㄤ袱涓揩鐓у彿涔嬮棿鍖呮嫭鏈韓鐨勬墍鏈夌粺璁″垎鏋愭暟鎹?BR> --sptrunc.sql 鎴彇statspack緇熻鍒嗘瀽鐨勭浉鍏蟲暟鎹?nbsp; 鍦ㄧ粺璁″垎鏋愮殑瀵瑰簲鐢ㄦ埛perfstat涓嬫墽琛?BR> 姣忔鎵ц蹇収鐢熸垚鐨勭粺璁℃暟鎹兘鍦╬erfstat鐢ㄦ埛涓浉鍏崇殑琛ㄤ腑錛?BR> 甯哥敤鐨勶細
--鏌ヨ蹇収鐩稿叧淇℃伅
select snap_id,snap_time from stats$snapshot;
--鏍規嵁hash_value,蹇収鏌ヨ瀵瑰簲鐨勭粺璁ql(statspack鎶ュ憡涓璼ql榪囬暱浼氳鎴帀錛?BR> select sql_text from stats$sqltext where hash_value=鏌ヨ鍊?and last_snap_id=begin_snap_id;
濡傛灉浣跨敤statspack宸ュ叿錛屽緩璁皢timed_statistics 璁劇疆涓簍rue,鍚﹀垯鏃犳硶鏌ョ湅鍒板噯紜殑緇熻淇℃伅錛?i鐗堟湰鍚庣殑璁劇疆涓簍rue瀵圭郴緇熸ц兘褰卞搷杈冨皬錛夈?BR> alter system set timed_statistics=true;
濡傛灉闇瑕佸疄鏃剁殑鏌ユ壘鎬ц兘闅愭偅鐨勭浉鍏硈ql,閫氳繃v$session_wait,v$session,v$sqltext_with_newlines涓夊紶鍔ㄦ佽鍥懼氨鍙互鍩烘湰鏌ユ壘鍒扮浉鍏崇殑sql錛岃剼鏈涓嬶細
榪欐槸鎴戠洰鍓嶅伐浣滀腑甯哥敤鐨勪袱縐嶆柟娉曪紝濡傛灉鏈夊叾浠栨柟娉曪紝甯屾湜澶у涔熷叡浜嚭鏉ャ?BR>