ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>
æ•°æ®æ¨¡åž‹æ˜¯å¯¹çŽ°å®žä¸–ç•Œ˜q›è¡ŒæŠ½è±¡çš„工典P¼Œç”¨äºŽæè¿°çŽ°å®žä¸–ç•Œçš„æ•°æ®ã€æ•°æ®è”¾p…R€æ•°æ®è¯ä¹‰å’Œæ•°æ®¾U¦æŸ½{‰æ–¹é¢å†…å®V€‚æ•°æ®æ¨¡åž‹åˆ†æˆæ¦‚忉|¨¡åž‹å’Œ¾l“构模型两大¾c…R€‚å‰è€…的代表是实体蔾pÀL¨¡åž‹ï¼ŒåŽè€…的代表是层‹Æ¡ã€ç½‘状ã€å…³¾pÕd’Œé¢å‘对象模型。关¾pÀL¨¡åž‹æ˜¯å½“今的主‹¹æ¨¡åž‹ï¼Œé¢å‘对象模型是今åŽå‘展的方å‘ã€?br />
æ•°æ®åº“是å˜å‚¨åœ¨ä¸€èµ·é›†ä¸ç®¡ç†çš„相关数æ®çš„集åˆã€‚æ•°æ®åº“的体¾pÈ»“构是å¯ÒŽ•°æ®çš„三个抽象¾U§åˆ«ã€‚它把数æ®çš„具体¾l„织留给DBMSåŽÕdšåQŒç”¨æˆ·åªéœ€æŠ½è±¡åœ°å¤„ç†é€»è¾‘æ•°æ®åQŒè€Œä¸å¿…关心数æ®åœ¨è®¡ç®—æœÞZ¸çš„å˜å‚¨ï¼Œå‡è½»äº†ç”¨æˆ·ä‹É用系¾lŸçš„负担。由于三¾U§ç»“构之间往往差别很大åQŒå˜åœ¨ç€ä¸¤çñ”æ˜ è±¡åQŒå› æ¤ä‹ÉDBSå…ähœ‰è¾ƒé«˜çš„æ•°æ®ç‹¬ç«‹æ€§ï¼šç‰©ç†æ•°æ®ç‹¬ç«‹æ€§å’Œé€»è¾‘æ•°æ®ç‹¬ç«‹æ€§ã€?br />
æ•°æ®ç‹¬ç«‹æ€§æ˜¯æŒ‡åœ¨æŸä¸ªå±‚次上修æ”ÒŽ¨¡å¼è€Œä¸å½±å“较高一层模å¼çš„能力ã€?br />DBMS是ä½äºŽç”¨æˆ·ä¸ŽOS之间的一层数æ®ç®¡ç†èÊY件。数æ®åº“è¯è¨€åˆ†æˆDDLå’ŒDML两类。DBMS主è¦ç”±æŸ¥è¯¢å¤„ç†å™¨å’Œå˜å‚¨ç®¡ç†å™¨ä¸¤å¤§éƒ¨åˆ†¾l„æˆã€?br />DBS是包å«DBå’ŒDBMS的计½Ž—机¾pÈ»Ÿã€‚DBS的全局¾l“构体现了DBS的模å—功能结构ã€?br />
æ•°æ®åº“三¾U§ä½“¾pÈ»“构:
æ•°æ®åº“体¾pÈ»“构五è¦ç´ :
1ã€æ¦‚忉|¨¡å¼æ˜¯æ•°æ®åº“ä¸å…¨éƒ¨æ•°æ®çš„æ•´ä½“逻辑¾l“构的æ˜q°ã€?br />2ã€å¤–æ¨¡å¼æ˜¯ç”¨æˆ·å†™æ•°æ®åº“ç³»¾lŸçš„æŽ¥å£åQŒæ˜¯ç”¨æˆ·ç”¨åˆ°é‚£éƒ¨åˆ†æ•°æ®çš„æè¿°ã€?br />3ã€å†…æ¨¡å¼æ˜¯æ•°æ®åº“在物ç†å˜å‚¨æ–¹é¢çš„æè¿°åQŒå®šä¹‰å†…部记录类型ã€çƒ¦å¼•和文äšg的组¾l‡æ–¹å¼ï¼Œä»¥åŠæ•°æ®æŽ§åˆ¶æ–šw¢çš„细节ã€?br />4ã€æ¨¡å¼ï¼å†…æ¨¡å¼æ˜ 象å˜åœ¨äºŽæ¦‚念¾U§å’Œå†…部¾U§ä¹‹é—ß_¼Œç”¨äºŽå®šä¹‰æ¦‚念模å¼å’Œå†…模å¼ä¹‹é—´çš„对应性ã€?br />5ã€å¤–模å¼åQæ¨¡å¼æ˜ 象å˜åœ¨äºŽå¤–部¾U§å’Œæ¦‚念¾U§ä¹‹é—ß_¼Œç”¨äºŽå®šä¹‰å¤–模å¼å’Œæ¦‚念模å¼ä¹‹é—´çš„对应性ã€?br />
 DBMS的模å—组æˆï¼š
查询处ç†å™¨æœ‰å››ä¸ªä¸»è¦æˆåˆ†åQšDDL¾~–译器,DML¾~–译器,嵌入å¼DML的预¾~–è¯‘å™¨åŠæŸ¥è¯¢˜qè¡Œæ ¸å¿ƒ½E‹åºã€?br />å˜å‚¨½Ž¡ç†å™¨æœ‰å››ä¸ªä¸»è¦æˆåˆ†åQšæƒé™å’Œå®Œæ•´æ€§ç®¡ç†å™¨åQŒäº‹åŠ¡ç®¡ç†å™¨åQŒæ–‡ä»¶ç®¡ç†å™¨åŠç¼“冲区½Ž¡ç†å™¨ã€?br />
DBS的全局¾l“æž„åQ?br />
DBS¾l“构的分¾c»ï¼š
集ä¸å¼DBSåQˆcentralized DBSåQ?br />å®¢æˆ·æœºï¼æœåС噍å¼DBSåQˆclient/server DBSåQŒè®°ä¸ºC/S DBSåQ?br />òq¶è¡Œå¼DBSåQˆparallel DBSåQ?br />分布å¼DBSåQˆdistributed DBSåQ?br />
DBA的主è¦èŒè´£æœ‰ä»¥ä¸‹å…点åQ?/strong>
1ã€å®šä¹‰æ¨¡å¼ã€?br />2ã€å®šä¹‰å†…模å¼ã€?br />3ã€ä¸Žç”¨æˆ·çš„蔾lœã€‚包括定义外模å¼ã€åº”用程åºçš„è®¾è®¡ã€æä¾›æŠ€æœ¯åŸ¹è®ç‰ä¸“业æœåŠ¡ã€?br />4ã€å®šä¹‰å®‰å…¨æ€§è§„则,对用戯‚®¿é—®æ•°æ®åº“的授æƒã€?br />5ã€å®šä¹‰å®Œæ•´æ€§è§„åˆ™ï¼Œç›‘ç£æ•°æ®åº“çš„˜q行ã€?br />6ã€æ•°æ®åº“çš„è{储与æ¢å¤å·¥ä½œã€?img src ="http://www.aygfsteel.com/1948asd/aggbug/270068.html" width = "1" height = "1" />
¾pÈ»Ÿæƒé™åQ?br />grant create session to li;//为用æˆähŽˆäºˆè®¿é—®æ•°æ®åº“çš„æƒé™ã€?br />grant create table to li;//为用æˆähŽˆäºˆåˆ›å»ºæ•°æ®åº“çš„æƒé™ã€?br />grant unlimited tablespace //为用æˆähŽˆäºˆæ²¡æœ‰ä¸Šé™çš„¼‹®è‰¯è®‰K—®è¡¨ç©ºé—´çš„æƒé™ã€?br />revoke table from li;//;//åˆ é™¤ç”¨æˆ·æŽˆäºˆåˆ›å¾æ•°æ®åº“çš„æƒé™ã€?br />revoke unlimited tablespace //åˆ é™¤ç”¨æˆ·æŽˆäºˆæ²¡æœ‰ä¸Šé™çš„确良访问表½Iºé—´çš„æƒé™ã€?br />grant create session to public //所有都æœ?br />æ•°æ®å—å…¸åQ?br />select * from user_sys_privs;//当å‰ç”¨æˆ·æ‹¥æœ‰æƒé™
--------------------------------------------------------------------------------------------
对象æƒé™åQšè°æ‹¥æœ‰è°å°±å¯ä»¥æŽˆæƒ
grant select on mytab to lisi ;//让lisi 有访问li拥有的mytab的查询æƒé™?br />
grant insert on mytab to lisi ;//让lisi 有访问li拥有的mytabçš„æ’å…¥æƒé™?br />
grant all on mytab to lisi;//所有æƒé™èµ‹äº?lisi;
æ•°æ®å—å…¸åQ?br />select * from user_tab_privs;
grant create session to public //所�br />
对象æƒé™æŽ§åˆ¶åˆ°åˆ—
grant update(name) on mytab to lisi;// 授予lisiåªèƒ½æ›´æ–°name属æ€?为嗌Dµåˆ†é…æƒé™ï¼šÂ åªèƒ½æ˜¯æ’入和更新)
在过åŽÈš„åå¹´ä¸ï¼Œ Oracle å·²ç»æˆäؓ世界上最专业的数æ®åº“之一。对äº?IT 专家æ¥è¯´åQŒå°±æ˜¯è¦¼‹®ä¿åˆ©ç”¨ Oracle çš„å¼ºå¤§ç‰¹æ€§æ¥æé«˜ä»–ä»¬å…¬å¸çš„生产力。最有效的方法之一是通过 Oracle 调优。它有大é‡çš„è°ƒæ•´å‚æ•°å’ŒæŠ€æœ¯æ¥æ”¹è¿›ä½ çš„ Oracle æ•°æ®åº“的性能ã€?
Oracle è°ƒä¼˜æ˜¯ä¸€ä¸ªå¤æ‚的主题。关于调优å¯ä»¥å†™æ•´æ•´ä¸€æœ¬ä¹¦åQŒä¸˜q‡ï¼Œä¸ÞZº†æ”¹å–„ Oracle æ•°æ®åº“的性能åQŒæœ‰ä¸€äº›åŸºæœ¬çš„æ¦‚念是æ¯ä¸?Oracle DBA 都应该éµä»Žçš„ã€?
   在这½‹‡ç®€ä»‹ä¸åQŒæˆ‘们将½Ž€è¦åœ°ä»‹ç»ä»¥ä¸‹çš?Oracle 主题åQ?
  -- 外部调整åQšæˆ‘ä»¬åº”è¯¥è®°ä½?Oracle òq¶ä¸æ˜¯å•独è¿è¡Œçš„ã€‚å› æ¤æˆ‘们将查看一下通过调整 Oracle æœåŠ¡å™¨ä»¥å¾—åˆ°é«˜çš„æ€§èƒ½ã€?
  --Row re-sequencing 以凞®‘ç£ç›?I/O åQšæˆ‘ä»¬åº”è¯¥æ‡‚å¾?Oracle 调优最é‡è¦çš„ç›®æ ‡æ˜¯å‡å°‘ I/O ã€?
  --Oracle SQL 调整ã€?Oracle SQL 调整æ˜?Oracle è°ƒæ•´ä¸æœ€é‡è¦çš„领域之一åQŒåªè¦é€šè¿‡ä¸€äº›ç®€å•çš„ SQL 调优规则ž®±å¯ä»¥å¤§òq…度地æå?SQL è¯å¥çš„æ€§èƒ½åQŒè¿™æ˜¯ä¸€ç‚šwƒ½ä¸å¥‡æ€ªçš„ã€?
  -- 调整 Oracle 排åºåQšæŽ’åºå¯¹äº?Oracle 性能也是有很大媄å“çš„ã€?
  -- 调整 Oracle çš„ç«žäº‰ï¼šè¡¨å’Œç´¢å¼•çš„å‚æ•°è®¾¾|®å¯¹äº?UPDATE å’?INSERT 的性能有很大的影å“ã€?
   我们首先从调æ•?Oracle 外部的环境开始。如果内å˜å’Œ CPU 的资æºä¸‘³çš„è¯ï¼Œä»ÖM½•çš?Oracle 调整都是没有帮助的ã€?
  外部的性能问题
  
  Oracle òq¶ä¸æ˜¯å•独è¿è¡Œçš„ã€?Oracle æ•°æ®åº“的性能和外部的环境有很大的关系。这些外部的æ¡äšg包括有:
   åQ?CPU--CPU 资æºçš„丑³ä×oæŸ¥è¯¢å˜æ…¢ã€‚当查询‘…过äº?Oracle æœåŠ¡å™¨çš„ CPU 性能æ—Óž¼Œä½ 的数æ®åº“性能ž®±å—åˆ?CPU çš„é™åˆ¶ã€?
   åQŽå†…å?-- å¯ç”¨äº?Oralce çš„å†…å˜æ•°é‡ä¹Ÿä¼šåª„å“?SQL 的性能åQŒç‰¹åˆ«æ˜¯åœ¨æ•°æ®ç¼“å†²å’Œå†…å˜æŽ’åºæ–šw¢ã€?
   åQŽç½‘¾l?-- 大é‡çš?Net8 通信ä»?SQL çš„æ€§èƒ½å˜æ…¢ã€?
   è®¸å¤šæ–°æ‰‹éƒ½é”™è¯¯çš„è®¤äØ“åº”è¯¥é¦–å…ˆè°ƒæ•´ Oracle æ•°æ®åº“ï¼Œè€Œä¸æ˜¯å…ˆ¼‹®è®¤å¤–éƒ¨èµ„æºæ˜¯å¦‘›_¤Ÿã€‚实际上åQŒå¦‚果外部环境出现瓶颈,å†å¤šçš?Oracle 调整都是没有帮助的ã€?
   在检æŸ?Oracle 的外部环境时åQŒæœ‰ä¸¤ä¸ªæ–šw¢æ˜¯éœ€è¦æ³¨æ„çš„åQ?
  1 ã€å½“˜q行队列的数目超˜q‡æœåС噍çš?CPU æ•°é‡æ—Óž¼ŒæœåŠ¡å™¨çš„æ€§èƒ½ž®×ƒ¼šå—到 CPU çš„é™åˆ¶ã€‚补救的æ–ÒŽ³•æ˜¯äØ“æœåŠ¡å™¨å¢žåŠ é¢å¤–çš„ CPU 或者关é—需è¦å¾ˆå¤šå¤„ç†èµ„æºçš„¾l„äšgåQŒä¾‹å¦?Oracle Parallel Query ã€?
  2 ã€å†…å˜åˆ†™åüc€‚当内å˜åˆ†é¡µæ—Óž¼Œå†…å˜å®šw‡å·²ç»ä¸èƒöåQŒè€Œå†…å˜é¡µæ˜¯ä¸Ž¼‚盘上的交æ¢åŒø™¿›è¡Œäº¤äº’的。补救的æ–ÒŽ³•æ˜¯å¢žåŠ æ›´å¤šçš„å†…å˜åQŒå‡ž®?Oracle SGA 的大ž®ï¼Œæˆ–者关é—?Oracle 的多¾U¿ç¨‹æœåС噍ã€?
   å¯ä»¥ä½¿ç”¨å„ç§æ ‡å‡†çš„æœåŠ¡å™¨å·¥å…·æ¥å¾—到æœåŠ¡å™¨çš„ç»Ÿè®¡æ•°æ®ï¼Œä¾‹å¦‚ vmstat,glance,top å’?sar ã€?DBA çš„ç›®æ ‡æ˜¯¼‹®ä¿æ•°æ®åº“æœåŠ¡å™¨æ‹¥æœ‰‘›_¤Ÿçš?CPU 和内å˜èµ„æºæ¥å¤„ç† Oracle 的请求ã€?
   以下让我们æ¥çœ‹ä¸€ä¸?Oracle çš?row-resequencing 是如何能够æžå¤§åœ°å‡å°‘¼‚盘 I/O çš„ã€?
  Row-resequencing åQˆè¡Œçš„釿–°æŽ’åºï¼‰
  
  ž®Þp±¡æˆ‘ä»¬ä¸Šé¢æåˆ°çš„ï¼Œæœ‰ç»éªŒçš„ Oracle DBA 都知é?I/O 是å“应时间的最大组æˆéƒ¨åˆ†ã€‚å…¶ä¸ç£ç›?I/O 特别厉害åQŒå› 为当 Oracle ç”Þq£ç›˜ä¸Šçš„ä¸€ä¸ªæ•°æ®æ–‡ä»¶å¾—åˆîC¸€ä¸ªæ•°æ®å—æ—Óž¼Œè¯Èš„˜q›ç¨‹ž®±å¿…™åȉ待物ç?I/O æ“作完æˆã€‚ç£ç›˜æ“ä½œè¦æ¯”æ•°æ®ç¼“冲慢 10,000 å€ã€‚å› æ¤ï¼Œå¦‚æžœå¯ä»¥ä»?I/O 最ž®åŒ–åQŒæˆ–者凞®‘由于ç£ç›˜ä¸Šçš„æ–‡ä»¶ç«žäº‰è€Œå¸¦æ¥çš„瓉™¢ˆåQŒå°±å¯ä»¥å¤§å¤§åœ°æ”¹å–?Oracle æ•°æ®åº“的性能ã€?
   如果¾pÈ»Ÿå“应很慢åQŒé€šè¿‡å‡å°‘¼‚盘 I/O ž®±å¯ä»¥æœ‰ä¸€ä¸ªå¾ˆå¿«çš„æ”¹å–„。如果在一个事务ä¸é€šè¿‡æŒ‰ä¸€å®šçš„范围æœçƒ¦ primary-key 索引æ¥è®¿é—®è¡¨åQŒé‚£ä¹ˆé‡æ–îC»¥ CTAS 的方法组¾l‡è¡¨ž®†æ˜¯ä½ 凞®?I/O 的首è¦ç–略。通过在物ç†ä¸Šž®†è¡ŒæŽ’åºä¸ºå’Œ primary-key 索引一æ ïLš„™åºåºåQŒå°±å¯ä»¥åŠ å¿«èŽ·å¾—æ•°æ®çš„速度ã€?
   ž®Þp±¡¼‚盘的负载åã^è¡¡ä¸€æ øP¼Œè¡Œçš„釿–°æŽ’åºä¹Ÿæ˜¯å¾ˆç®€å•çš„åQŒè€Œä¸”也很快。通过与其它的 DBA ½Ž¡ç†æŠ€å·§ä¸€èµ·ä‹É用,ž®±å¯ä»¥åœ¨é«?I/O 的系¾lŸä¸å¤§å¤§åœ°å‡ž®‘å“应的旉™—´ã€?
   在高定w‡çš„在¾U¿äº‹åС处ç†çŽ¯å¢ƒä¸åQ?online transaction processing åQ?OLTP åQ‰ï¼Œæ•°æ®æ˜¯ç”±ä¸€ä¸?primary ç´¢å¼•å¾—åˆ°çš„ï¼Œé‡æ–°æŽ’åºè¡¨æ ¼çš„行ž®±å¯ä»¥ä×o˜qžç®‹å—çš„™åºåºå’Œå®ƒä»¬çš„ primary ç´¢å¼•ä¸€æ øP¼Œ˜q™æ ·ž®±å¯ä»¥åœ¨ç´¢å¼•é©±åŠ¨çš„è¡¨æ ¼æŸ¥è¯¢ä¸åQŒå‡ž®‘物ç?I/O òq¶ä¸”改善å“应旉™—´ã€‚这个技巧仅在应用选择多行的时候有用,或者在使用索引范围æœçƒ¦å’Œåº”用å‘出多个查询æ¥å¾—到˜qžç®‹çš?key æ—¶æœ‰æ•ˆã€‚å¯¹äºŽéšæœºçš„唯一 primary-key åQˆä¸»é”®ï¼‰çš„访问将ä¸ä¼šç”Þp¡Œé‡æ–°æŽ’åºä¸å¾—到好处ã€?
   让我们看一下它是如何工作的。考虑以下的一ä¸?SQL 的查询,它ä‹É用一个烦引æ¥å¾—到 100 行:
selectsalaryfromemployeewherelast_name like 'B%';
˜q™ä¸ªæŸ¥è¯¢ž®†ä¼šä½¿ç”¨ last_name_index åQŒæœç´¢å…¶ä¸çš„æ¯ä¸€è¡Œæ¥å¾—åˆ°ç›®æ ‡è¡Œã€‚è¿™ä¸ªæŸ¥è¯¢å°†ä¼šè‡³ž®‘ä‹Éç”?100 ‹Æ¡ç‰©ç†ç£ç›˜çš„è¯Õd–åQŒå› ä¸?employee çš„è¡Œå˜æ”¾åœ¨ä¸åŒçš„æ•°æ®å—ä¸ã€?
   ä¸è¿‡åQŒå¦‚果表ä¸çš„行已¾l釿–°æŽ’åºäØ“å’?last_name_index çš„ä¸€æ øP¼ŒåŒæ ·çš„æŸ¥è¯¢åˆä¼šæ€Žæ ·å¤„ç†å‘¢ï¼Ÿæˆ‘们å¯ä»¥çœ‹åˆ°˜q™ä¸ªæŸ¥è¯¢åªéœ€è¦ä¸‰‹Æ¡çš„¼‚ç›˜ I/O ž®Þp¯»å®Œå…¨éƒ?100 个员工的资料åQˆä¸€‹Æ¡ç”¨ä½œçƒ¦å¼•çš„è¯Õd–åQŒä¸¤‹Æ¡ç”¨ä½œæ•°æ®å—的读å–)åQŒå‡ž®‘了 97 ‹Æ¡çš„å—读å–ã€?
   釿–°æŽ’åºå¸¦æ¥çš„æ€§èƒ½æ”¹å–„çš„ç¨‹åº¦åœ¨äºŽåœ¨ä½ å¼€å§‹çš„æ—¶å€™è¡Œçš„äØ•åºæ€§å¦‚何,以åŠä½ 需è¦ç”±åºåˆ—ä¸è®¿é—®å¤šž®‘行。至于一个表ä¸çš„行与索引的排åºé”®çš„匹é…程度,å¯ä»¥æŸ¥çœ‹æ•°æ®å—å…¸ä¸çš„ dba_indexes å’?dba_tables 视图得到ã€?
   åœ?dba_indexes 的视图ä¸åQŒæŸ¥çœ?clustering_factor 列。如æž?clustering_factor 的值和表ä¸çš„å—æ•°ç›®å¤§è‡´ä¸€æ øP¼Œé‚£ä¹ˆä½ çš„è¡¨å’Œç´¢å¼•çš„é¡ºåºæ˜¯ä¸€æ ïLš„。丘q‡ï¼Œå¦‚æžœ clustering_factor 的值接˜q‘表ä¸çš„è¡Œæ•°ç›®ï¼Œé‚£å°±è¡¨æ˜Žè¡¨æ ¼ä¸çš„è¡Œå’Œç´¢å¼•çš„é¡ºåºæ˜¯ä¸ä¸€æ ïLš„ã€?
   è¡Œé‡æ–°æŽ’åºçš„作用是ä¸å¯ä»¥ž®çœ‹çš„。在需è¦è¿›è¡Œå¤§èŒƒå›´çš„烦引æœç´¢çš„大表ä¸ï¼Œè¡Œé‡æ–°æŽ’åºå¯ä»¥ä×o查询的性能æé«˜ä¸‰å€ã€?
   ä¸€æ—¦ä½ å·²ç»å†›_®šé‡æ–°æŽ’åºè¡¨ä¸çš„行åQŒä½ å¯ä»¥ä½¿ç”¨ä»¥ä¸‹çš„工具之一æ¥é‡æ–°ç»„¾l‡è¡¨æ ¹{€?
  . 使用 Oracle çš?Create Table As Select (CTAS) è¯æ³•æ¥æ‹·è´è¡¨æ ?
  . Oracle9i è‡ªå¸¦çš„è¡¨æ ¼é‡æ–°ç»„¾l‡å·¥å…?
  
   以下åQŒæˆ‘们æ¥çœ‹ä»¥ä¸?SQL è¯å¥çš„调优ã€?
  SQL 调优
  Oracle çš?SQL è°ƒä¼˜æ˜¯ä¸€ä¸ªå¤æ‚的主题åQŒç”šè‡Ïx˜¯éœ€è¦æ•´æœ¬ä¹¦æ¥ä»‹¾l?Oracle SQL 调优的细微差别。丘q‡æœ‰ä¸€äº›åŸºæœ¬çš„规则是æ¯ä¸?Oracle DBA 都需è¦è·Ÿä»Žçš„åQŒè¿™äº›è§„则å¯ä»¥æ”¹å–„他们系¾lŸçš„æ€§èƒ½ã€?SQL è°ƒä¼˜çš„ç›®æ ‡æ˜¯½Ž€å•çš„åQ?
  . 消除ä¸å¿…è¦çš„大表全表æœçƒ¦åQšä¸å¿…è¦çš„全表æœç´¢å¯¼è‡´å¤§é‡ä¸å¿…è¦çš?I/O åQŒä»Žè€Œæ‹–慢整个数æ®åº“的性能。调优专安™¦–先会æ ÒŽ®æŸ¥è¯¢˜q”回的行数目æ¥è¯„ä»?SQL 。在一个有åºçš„表ä¸åQŒå¦‚果查询返回少äº?40% 的行åQŒæˆ–è€…åœ¨ä¸€ä¸ªæ— åºçš„表ä¸åQŒè¿”回少äº?7% 的行åQŒé‚£ä¹ˆè¿™ä¸ªæŸ¥è¯¢éƒ½å¯ä»¥è°ƒæ•´ä¸ÞZ‹É用一个烦引æ¥ä»£æ›¿å…¨è¡¨æœçƒ¦ã€‚对于ä¸å¿…è¦çš„全表æœç´¢æ¥è¯ß_¼Œæœ€å¸¸è§çš„è°ƒä¼˜æ–¹æ³•æ˜¯å¢žåŠ ç´¢å¼•ã€‚å¯ä»¥åœ¨è¡¨ä¸åŠ å…¥æ ‡å‡†çš?B æ ‘çƒ¦å¼•ï¼Œä¹Ÿå¯ä»¥åŠ å…?bitmap 和基于函数的索引。è¦å†›_®šæ˜¯å¦æ¶ˆé™¤ä¸€ä¸ªå…¨è¡¨æœç´¢ï¼Œä½ å¯ä»¥ä»”¾l†æ£€æŸ¥çƒ¦å¼•æœç´¢çš„ I/O 开销和全表æœç´¢çš„开销åQŒå®ƒä»¬çš„开销和数æ®å—的读å–å’Œå¯èƒ½çš„åÆˆè¡Œæ‰§è¡Œæœ‰å…»I¼Œòq¶å°†ä¸¤è€…作å¯Òޝ”。在一些情况下åQŒä¸€äº›ä¸å¿…è¦çš„全表æœç´¢çš„æ¶ˆé™¤å¯ä»¥é€šè¿‡å¼ºåˆ¶ä½¿ç”¨ä¸€ä¸?index æ¥è¾¾åˆŽÍ¼Œåªéœ€è¦åœ¨ SQL è¯å¥ä¸åŠ å…¥ä¸€ä¸ªçƒ¦å¼•çš„æç¤ºž®±å¯ä»¥äº†ã€?
  . 在全表æœç´¢æ˜¯ä¸€ä¸ªæœ€å¿«çš„讉K—®æ–ÒŽ³•æ—Óž¼Œž®†å°è¡¨çš„全表æœçƒ¦æ”‘Öˆ°¾~“å˜ä¸ï¼Œè°ƒä¼˜ä¸“家应该¼‹®ä¿æœ‰ä¸€ä¸ªä¸“门的数殾~“冲用作行缓册Ӏ‚在 Oracle7 ä¸ï¼Œä½ å¯ä»¥ä‹Éç”?alter table xxx cache è¯å¥åQŒåœ¨ Oracle8 或以上,ž®è¡¨å¯ä»¥è¢«å¼ºåˆ¶äؓ攑ֈ° KEEP æ± ä¸¾~“冲ã€?
  . ¼‹®ä¿æœ€ä¼˜çš„索引使用 åQšå¯¹äºŽæ”¹å–„查询的速度åQŒè¿™æ˜¯ç‰¹åˆ«é‡è¦çš„。有æ—?Oracle å¯ä»¥é€‰æ‹©å¤šä¸ªç´¢å¼•æ¥è¿›è¡ŒæŸ¥è¯¢ï¼Œè°ƒä¼˜ä¸“å®¶å¿…é¡»‹‚€æŸ¥æ¯ä¸ªçƒ¦å¼•åÆˆä¸”ç¡®ä¿?Oracle 使用æ£ç¡®çš„烦引。它˜q˜åŒ…æ‹?bitmap 和基于函数的索引的ä‹É用ã€?
  . ¼‹®ä¿æœ€ä¼˜çš„ JOIN æ“作åQšæœ‰äº›æŸ¥è¯¢ä‹Éç”?NESTED LOOP join 快一些,有些则是 HASH join 快一些,å¦å¤–一些则æ˜?sort-merge join æ›´å¿«ã€?
   ˜q™äº›è§„åˆ™çœ‹æ¥½Ž€å•,ä¸è¿‡å®ƒä»¬å?SQL 调优ä»ÕdŠ¡çš?90% åQŒåÆˆä¸”å®ƒä»¬ä¹Ÿæ— éœ€å®Œå…¨æ‡‚å¾— Oracle SQL 的内部è¿ä½œã€‚ä»¥ä¸‹æˆ‘ä»¬æ¥½Ž€å•æ¦‚览以ä¸?Oracle SQL 的优化ã€?
   我们首先½Ž€è¦æŸ¥çœ?Oracle 的排åºï¼Œòq¶ä¸”çœ‹ä¸€çœ‹æŽ’åºæ“ä½œæ˜¯å¦‚ä½•å½±å“æ€§èƒ½çš„ã€?
   调整 Oracle çš„æŽ’åºæ“ä½?
   æŽ’åºæ˜?SQL è¯æ³•ä¸ä¸€ä¸ªå°çš„æ–¹é¢ï¼Œä½†å¾ˆé‡è¦åQŒåœ¨ Oracle 的调整ä¸åQŒå®ƒå¸¸å¸¸è¢«å¿½ç•¥ã€‚当使用 create index ã€?ORDER BY 或è€?GROUP BY çš„è¯å¥æ—¶åQ?Oracle æ•°æ®åº“将会自动执行排åºçš„æ“ä½œã€‚é€šå¸¸åQŒåœ¨ä»¥ä¸‹çš„æƒ…况下 Oracle 会进行排åºçš„æ“ä½œåQ?
   使用 Order by çš?SQL è¯å¥
   使用 Group by çš?SQL è¯å¥
   在创建烦引的时�
   ˜q›è¡Œ table join æ—Óž¼Œç”׃ºŽçŽ°æœ‰ç´¢å¼•çš„ä¸‘Œ™€Œå¯¼è‡?SQL 优化器调ç”?MERGE SORT
   当与 Oracle 建立起一ä¸?session æ—Óž¼Œåœ¨å†…å˜ä¸ž®×ƒ¼šä¸ø™¯¥ session 分é…ä¸€ä¸ªç§æœ‰çš„æŽ’åºåŒºåŸŸã€‚如果该˜qžæŽ¥æ˜¯ä¸€ä¸ªä¸“用的˜qžæŽ¥ (dedicated connection) åQŒé‚£ä¹ˆå°±ä¼šæ ¹æ?init.ora ä¸?sort_area_size 傿•°çš„大ž®åœ¨å†…å˜ä¸åˆ†é…一ä¸?Program Global Area (PGA) 。如果连接是通过多线½E‹æœåŠ¡å™¨å»ºç«‹çš„ï¼Œé‚£ä¹ˆæŽ’åºçš„空间就åœ?large_pool ä¸åˆ†é…。ä¸òq¸çš„æ˜¯ï¼Œå¯¹äºŽæ‰€æœ‰çš„ session åQŒç”¨åšæŽ’åºçš„内å˜é‡éƒ½å¿…须是一æ ïLš„åQŒæˆ‘们ä¸èƒ½äØ“éœ€è¦æ›´å¤§æŽ’åºçš„æ“ä½œåˆ†é…é¢å¤–的排åºåŒºåŸŸã€‚å› æ¤ï¼Œè®¾è®¡è€…å¿…™åÖM½œå‡ÞZ¸€ä¸ªåã^衡,在分é…èƒö够的排åºåŒºåŸŸä»¥é¿å…å‘生大的排åºä“Q务时出现¼‚盘排åºåQ?disk sorts åQ‰çš„åŒæ—¶åQŒå¯¹äºŽé‚£äº›åƈä¸éœ€è¦è¿›è¡Œå¾ˆå¤§æŽ’åºçš„ä»ÕdŠ¡åQŒå°±ä¼šå‡ºçŽîC¸€äº›æµªè´V€‚当ç„Óž¼Œå½“排åºçš„½Iºé—´éœ€æ±‚è¶…å‡ÞZº† sort_area_size 的大ž®æ—¶åQŒè¿™æ—¶å°†ä¼šåœ¨ TEMP 表空间ä¸åˆ†é¡µ˜q›è¡Œ¼‚盘排åºã€‚ç£ç›˜æŽ’åºè¦æ¯”å†…å˜æŽ’åºå¤§æ¦‚æ…¢ 14,000 å€ã€?
   ä¸Šé¢æˆ‘ä»¬å·²ç»æåˆ°åQŒç§æœ‰æŽ’åºåŒºåŸŸçš„大尿˜¯æœ‰ init.ora ä¸çš„ sort_area_size 傿•°å†›_®šçš„。æ¯ä¸ªæŽ’åºæ‰€å 用的大ž®ç”± init.ora ä¸çš„ sort_area_retained_size 傿•°å†›_®šã€‚当排åºä¸èƒ½åœ¨åˆ†é…çš„½Iºé—´ä¸å®Œæˆæ—¶åQŒå°±ä¼šä‹É用ç£ç›˜æŽ’åºçš„æ–¹å¼åQŒå³åœ?Oracle 实例ä¸çš„临时表空间丘q›è¡Œã€?
   ¼‚盘排åºçš„开销是很大的åQŒæœ‰å‡ 个斚w¢çš„åŽŸå› ã€‚é¦–å…ˆï¼Œå’Œå†…å˜æŽ’åºç›¸æ¯”较åQŒå®ƒä»¬ç‰¹åˆ«æ…¢åQ›è€Œä¸”¼‚盘排åºä¼šæ¶ˆè€—äÍæ—¶è¡¨½Iºé—´ä¸çš„资æºã€?Oracle ˜q˜å¿…™åÕdˆ†é…ç¼“å†²æ± å—æ¥ä¿æŒä¸´æ—¶è¡¨ç©ºé—´ä¸çš„å—ã€‚æ— è®ÞZ»€ä¹ˆæ—¶å€™ï¼Œå†…å˜æŽ’åºéƒ½æ¯”¼‚盘排åºå¥½ï¼Œ¼‚盘排庞®†ä¼šä»¤ä“QåŠ¡å˜æ…¢ï¼Œòq¶ä¸”会媄å“?Oracle 实例的当å‰ä“Q务的执行。还有,˜q‡å¤šçš„ç£ç›˜æŽ’åºå°†ä¼šä×o free buffer waits 的值å˜é«˜ï¼Œä»Žè€Œä×o其它ä»ÕdŠ¡çš„æ•°æ®å—ç”Þq¼“冲丿U»èµ°ã€?
   接ç€åQŒè®©æˆ‘们看一ä¸?Oracle 的竞争,òq¶ä¸”看一下表的å˜å‚¨å‚数的讄¡½®æ˜¯å¦‚何媄å“?SQL UPDATE å’?INSERT è¯å¥çš„æ€§èƒ½çš„ã€?
调整 Oracle 的竞�
  Oracle 的其ä¸ä¸€ä¸ªä¼˜ç‚ÒŽ—¶å®ƒå¯ä»¥ç®¡ç†æ¯ä¸ªè¡¨½Iºé—´ä¸çš„自由½Iºé—´ã€?Oracle 负责处ç†è¡¨å’Œç´¢å¼•的空间管ç†ï¼Œ˜q™æ ·ž®±å¯ä»¥è®©æˆ‘ä»¬æ— éœ€æ‡‚å¾— Oracle 的表和烦引的内部˜q作。丘q‡ï¼Œå¯¹äºŽæœ‰ç»éªŒçš„ Oracle 调优专家æ¥è¯´åQŒä»–éœ€è¦æ‡‚å¾?Oracle 是如何管ç†è¡¨çš?extent 和空闲的数æ®å—。对于调整拥有高çš?insert 或è€?update 的系¾lŸæ¥è¯ß_¼Œ˜q™æ˜¯éžå¸¸é‡è¦çš„ã€?
   è¦ç²¾é€šå¯¹è±¡çš„调整åQŒä½ éœ€è¦æ‡‚å¾?freelists å’?freelist ¾l„çš„è¡ŒäØ“åQŒå®ƒä»¬å’Œ pctfree å?pctused 傿•°çš„值有兟뀂这些知识对于ä¼ä¸šèµ„æºè®¡åˆ’( ERP åQ‰çš„应用是特别é‡è¦çš„åQŒå› 为在˜q™äº›åº”用ä¸ï¼Œä¸æ£¼‹®çš„表设¾|®é€šå¸¸æ˜?DML è¯å¥æ‰§è¡Œæ…¢çš„åŽŸå› ã€?
   对于åˆå¦è€…æ¥è¯ß_¼Œæœ€å¸¸è§çš„é”™è¯¯æ˜¯è®¤äØ“é»˜è®¤çš?Oracle 傿•°å¯¹äºŽæ‰€æœ‰çš„对象都是最佳的。除éžç£ç›˜çš„æ¶ˆè€—䏿˜¯ä¸€ä¸ªé—®é¢˜ï¼Œå¦åˆ™åœ¨è®¾¾|®è¡¨çš?pctfree å’?pctused 傿•°æ—Óž¼Œž®±å¿…™å»è€ƒè™‘òq›_‡çš„行长和数æ®åº“çš„å—大ž®ï¼Œ˜q™æ ·½Iºçš„å—æ‰ä¼šè¢«æœ‰æ•ˆåœ°æ”¾åˆ?freelists ä¸ã€‚当˜q™äº›è®„¡½®ä¸æ£¼‹®æ—¶åQŒé‚£äº›å¾—到的 freelists 也是 "dead" å—ï¼Œå› äØ“å®ƒä»¬æ²¡æœ‰‘›_¤Ÿçš„空间æ¥å˜å‚¨ä¸€è¡Œï¼Œ˜q™æ ·ž®†ä¼šå¯ÆD‡´æ˜Žæ˜¾çš„处ç†åšg˜qŸã€?
Freelists å¯¹äºŽæœ‰æ•ˆåœ°é‡æ–îC‹Éç”?Oracle 表空间ä¸çš„空间是很é‡è¦çš„åQŒå®ƒå’?pctfree å?pctused ˜q™ä¸¤ä¸ªå˜å‚¨å‚数的讄¡½®ç›´æŽ¥ç›¸å…³ã€‚通过ž®?pctused 讄¡½®ä¸ÞZ¸€ä¸ªé«˜çš„å€û|¼Œ˜q™æ—¶æ•°æ®åº“å°±ä¼šå°½å¿«åœ°é‡æ–°ä½¿ç”¨å—。丘q‡ï¼Œé«˜æ€§èƒ½å’Œæœ‰æ•ˆåœ°é‡æ–°ä½¿ç”¨è¡¨çš„å—æ˜¯å¯¹ç«‹çš„。在调整 Oracle çš„è¡¨æ ¼å’Œç´¢å¼•æ—Óž¼Œéœ€è¦è®¤çœŸè€ƒè™‘½I¶ç«Ÿéœ€è¦é«˜æ€§èƒ½˜q˜æ˜¯æœ‰æ•ˆçš„空间é‡ç”¨ï¼Œòq¶ä¸”æ®æ¤æ¥è®¾¾|®è¡¨çš„傿•°ã€‚以下我们æ¥çœ‹ä¸€ä¸‹è¿™äº?freelists 是如何媄å“?Oracle 的性能的ã€?
   å½“æœ‰ä¸€ä¸ªè¯·æ±‚éœ€è¦æ’å…¥ä¸€è¡Œåˆ°è¡¨æ ¼ä¸æ—¶åQ?Oracle ž®×ƒ¼šåˆ?freelist ä¸å¯»æ‰¾ä¸€ä¸ªæœ‰‘›_¤Ÿçš„空间æ¥å®¹çº³ä¸€è¡Œçš„å—ã€‚ä½ ä¹Ÿè®¸çŸ¥é“åQ?freelist 串是攑֜¨è¡¨æ ¼æˆ–者烦引的½W¬ä¸€ä¸ªå—ä¸ï¼Œ˜q™ä¸ªå—也被称为段å¤ß_¼ˆ segment header åQ‰ã€?pctfree å’?pctused 傿•°çš„唯一目的ž®±æ˜¯ä¸ÞZº†æŽ§åˆ¶å—如何在 freelists ä¸è¿›å‡ºã€‚虽ç„?freelist link å’?unlink 是简å•çš„ Oracle 功能åQŒä¸˜q‡è®¾¾|?freelist link (pctused) å’?unlink (pctfree) å¯?Oracle 的性能¼‹®å®žæœ‰åª„å“ã€?
   ç”?DBA 的基本知识知é“, pctfree 傿•°æ˜¯æŽ§åˆ?freelist un-links 的(å›_°†å—ç”± freelists ä¸ç§»é™¤ï¼‰ã€‚设¾|?pctfree=10 æ„å‘³ç€æ¯ä¸ªå—都ä¿ç•™ 10% 的空间用作行扩展ã€?pctused 傿•°æ˜¯æŽ§åˆ?freelist re-links 的。设¾|?pctused=40 æ„味ç€åªæœ‰åœ¨å—çš„ä‹É用低äº?40% æ—¶æ‰ä¼šå›žåˆ°è¡¨æ ¼çš„ freelists ä¸ã€?
   许多新手对于一个å—釿–°å›žåˆ° freelists åŽçš„处ç†éƒ½æœ‰äº›è¯¯è§£ã€‚å…¶å®žï¼Œä¸€æ—¦ç”±äºŽä¸€ä¸ªåˆ é™¤çš„æ“作而ä×oå—è¢«é‡æ–°åŠ å…¥åˆ?freelist ä¸ï¼Œå®ƒå°†ä¼šä¸€ç›´ä¿ç•™åœ¨ freelist ä¸å³ä½¿ç©ºé—´çš„使用‘…过äº?60% åQŒåªæœ‰åœ¨åˆ°è¾¾ pctfree æ—¶æ‰ä¼šå°†æ•°æ®å—ç”± freelist ä¸ç§»èµ°ã€?
   è¡¨æ ¼å’Œçƒ¦å¼•å˜å‚¨å‚数设¾|®çš„è¦æ±‚æ€È»“
   以下的一些规则是用æ¥è®„¡½® freelists, freelist groups, pctfree å’?pctused å˜å‚¨å‚æ•°çš„ã€‚ä½ ä¹ŸçŸ¥é“, pctused å’?pctfree 的值是å¯ä»¥å¾ˆå®¹æ˜“地通过 alter table 命ä×o修改的,一个好çš?DBA 应该知é“如何讄¡½®˜q™äº›å‚数的最佛_€¹{€?
   有效åœîC‹Éç”¨ç©ºé—´å’Œé«˜æ€§èƒ½ä¹‹é—´æ˜¯æœ‰çŸ›ç›¾çš„ï¼Œè€Œè¡¨æ ¼çš„å˜å‚¨å‚æ•°ž®±æ˜¯æŽ§åˆ¶˜q™ä¸ªæ–šw¢çš„矛盾:
. å¯¹äºŽéœ€è¦æœ‰æ•ˆåœ°é‡æ–°ä½¿ç”¨½Iºé—´åQŒå¯ä»¥è®¾¾|®ä¸€ä¸ªé«˜çš?pctused å€û|¼Œä¸è¿‡å‰¯ä½œç”¨æ˜¯éœ€è¦é¢å¤–çš„ I/O 。一个高çš?pctused 值æ„味ç€ç›¸å¯¹æ»¡çš„å—都会放åˆ?freelist ä¸ã€‚å› æ¤ï¼Œ˜q™äº›å—åœ¨å†æ¬¡æ»¡ä¹‹å‰åªå¯ä»¥æŽ¥å—å‡ è¡Œè®°å½•åQŒä»Žè€Œå¯¼è‡´æ›´å¤šçš„ I/O ã€?
. ˜q½æ±‚高性能的è¯åQŒå¯ä»¥å°† pctused 讄¡½®ä¸ÞZ¸€ä¸ªä½Žçš„å€û|¼Œ˜q™æ„å‘³ç€ Oracle ä¸ä¼šž®†æ•°æ®å—攑ֈ° freelists ä¸ç›´åˆ°å®ƒå‡ 乎是空的。那么嗞®†å¯ä»¥åœ¨æ»¡ä¹‹å‰æŽ¥æ”¶æ›´å¤šçš„è¡Œï¼Œå› æ¤å¯ä»¥å‡å°‘æ’å…¥æ“作çš?I/O 。è¦è®îC½ Oracle 扩展新å—çš„æ€§èƒ½è¦æ¯”釿–°ä½¿ç”¨çŽ°æœ‰çš„å—高。对äº?Oracle æ¥è¯´åQŒæ‰©å±•一个表比管ç?freelists 消耗更ž®‘的资æºã€?
   让我们æ¥å›žé¡¾ä¸€ä¸‹è®¾¾|®å¯¹è±¡å˜å‚¨å‚数的一些常è§è§„则:
   åQŽç»å¸¸å°† pctused 讄¡½®ä¸ºå¯ä»¥æŽ¥æ”¶ä¸€æ¡æ–°è¡Œã€‚对于ä¸èƒ½æŽ¥å—一行的 free blocks 对于我们æ¥è¯´æ˜¯æ²¡æœ‰ç”¨çš„ã€‚å¦‚æžœè¿™æ ·åšåQŒå°†ä¼šä×o Oracle çš„æ€§èƒ½å˜æ…¢åQŒå› ä¸?Oracle ž®†åœ¨æ‰©å±•表æ¥å¾—到一个空的å—之å‰åQŒä¼å›¾è¯»å?5 ä¸?"dead" çš?free block ã€?
   åQŽè¡¨æ ég¸ chained rows 的出现æ„å‘³ç€ pctfree 太低或者是 db_block_size 太少。在很多情况下, RAW å’?LONG RAW 列都很巨大,以至‘…过äº?Oracle 的最大å—的大ž®ï¼Œ˜q™æ—¶ chained rows 是ä¸å¯ä»¥é¿å…çš„ã€?
   åQŽå¦‚æžœä¸€ä¸ªè¡¨æœ‰åŒæ—¶æ’入的 SQL è¯å¥åQŒé‚£ä¹ˆå®ƒéœ€è¦æœ‰åŒæ—¶åˆ 除的è¯å¥ã€‚è¿è¡Œå•一个一个清除的工作ž®†ä¼šæŠŠå…¨éƒ¨çš„½Iºé—²å—放åˆîC¸€ä¸?freelist ä¸ï¼Œè€Œæ²¡æœ‰å…¶å®ƒåŒ…嫿œ‰ä»ÖM½•½Iºé—²å—çš„ freelists 出现ã€?
   åQ?freelist 傿•°åº”该讄¡½®ä¸ø™¡¨æ ¼åŒæ—¶æ›´æ–°çš„æœ€å¤§å€¹{€‚例如,如果在ä“Q何时候,æŸä¸ªè¡¨æœ€å¤šæœ‰ 20 个用æˆäh‰§è¡Œæ’入的æ“作åQŒé‚£ä¹ˆè¯¥è¡¨çš„傿•°åº”该讄¡½®ä¸?freelists=20 ã€?
   应记ä½çš„æ˜?freelist groups 傿•°çš„å€¼åªæ˜¯å¯¹äº?Oracle Parallel Server å’?Real Application Clusters æ‰æ˜¯æœ‰ç”¨çš„。对于这¾c?Oracle åQ?freelist groups 应该讄¡½®ä¸ø™®¿é—®è¯¥è¡¨æ ¼çš?Oracle Parallel Server 实例的数ç›?/p>