Oracle DBAÓÅ»¯Êý¾Ý¿âÐÔÄÜ
¡¡¡¡ºÜ¶àµÄʱºî£¬×öOracle DBAµÄÎÒÃÇ£¬µ±Ó¦ÓùÜÀíÔ±ÏòÎÒÃÇͨ¸æÏÖÔÚÓ¦ÓúÜÂý¡¢Êý¾Ý¿âºÜÂýµÄʱºî£¬ÎÒÃǵ½Êý¾Ý¿âʱ×ö¼¸¸öʾÀýµÄSelectÒ²·¢ÏÖͬÑùµÄÎÊÌâʱ£¬ÓÐЩʱºîÎÒÃÇ»áÎÞ´ÓÏÂÊÖ£¬ÒòΪÎÒÃÇÈÏΪÊý¾Ý¿âµÄ¸÷ÖÖÃüÖÖÂʶ¼ÊÇÂú×ãOracleÎĵµµÄ½¨Ò顣ʵ¼ÊÉÏÈç½ñµÄÓÅ»¯¼º¾ÏòÓÅ»¯µÈ´ý(waits)תÐÍÁË£¬Êµ¼ÊÖÐÐÔÄÜÓÅ»¯×î¸ù±¾µÄ³öÏÖµãÒ²¶¼¼¯ÖÐÔÚIO£¬ÕâÊÇÓ°ÏìÐÔÄÜ×îÖ÷ÒªµÄ·½Ã棬ÓÉϵͳÖеĵȴýÈ¥·¢ÏÖOracle¿âÖеIJ»×ã¡¢²Ù×÷ϵͳijЩ×ÊÔ´ÀûÓõIJ»ºÏÀíÊÇÒ»¸ö±È½ÏºÃµÄ°ì·¨£¬ÏÂÃæ°ÑÎÒµÄÒ»µãʵ¼ù¾ÑéÓë´ó¼Ò·ÖÏíһϣ¬±¾ÎIJâÖØÓÚUnix»·¾³¡£
¡¡¡¡Ò»¡¢Í¨¹ý²Ù×÷ϵͳµÄһЩ¹¤¾ß¼ì²éϵͳµÄ״̬£¬±ÈÈçCPU¡¢ÄÚ´æ¡¢½»»»¡¢´ÅÅ̵ÄÀûÓÃÂÊ£¬¸ù¾Ý¾Ñé»òÓëϵͳÕý³£Ê±µÄ״̬Ïà±È¶Ô£¬ÓÐʱϵͳ±íÃæÉÏ¿´ÆðÀ´¿´¿ÕÏÐÕâÒ²¿ÉÄܲ»ÊÇÒ»¸öÕý³£µÄ״̬£¬ÒòΪcpu¿ÉÄÜÕýµÈ´ýIOµÄÍê³É¡£³ý´ËÖ®ÍâÎÒÃÇ»¹Ó¦¹Û×¢ÄÇЩռÓÃϵͳ×ÊÔ´(cpu¡¢ÄÚ´æ)µÄ½ø³Ì¡£
¡¡¡¡1¡¢ÈçºÎ¼ì²é²Ù×÷ϵͳÊÇ·ñ´æÔÚIOµÄÎÊÌâ?ʹÓõŤ¾ßÓÐsar,ÕâÊÇÒ»¸ö±È½ÏͨÓõŤ¾ß¡£
¡¡¡¡Rp1#sar -u 2 10
¡¡¡¡¼´Ã¿¸ô2Ãë¼ì²ìÒ»´Î£¬¹²Ö´ÐÐ20´Î£¬µ±È»ÕâЩ¶¼ÓÉÄã¾ö¶¨ÁË¡£
¡¡¡¡Ê¾Àý·µ»Ø£º
¡¡¡¡HP-UX hpn2 B.11.00 U 9000/800 08/05/03
¡¡¡¡18:26:32 %usr %sys %wio %idle
¡¡¡¡×¢£ºÎÒÔÚredhatϲ鿴ÊÇÕâÖÖ½á¹û£¬²»Öª%system¾ÍÊÇËùνµÄ%wio¡£
¡¡¡¡Linux 2.4.21-20.ELsmp (YY075) 05/19/2005
¡¡¡¡10:36:07 AM CPU %user %nice %system %idle
¡¡¡¡10:36:09 AM all 0.00 0.00 0.13 99.87
¡¡¡¡10:36:11 AM all 0.00 0.00 0.00 100.00
¡¡¡¡10:36:13 AM all 0.25 0.00 0.25 99.49
¡¡¡¡10:36:15 AM all 0.13 0.00 0.13 99.75
¡¡¡¡10:36:17 AM all 0.00 0.00 0.00 100.00
¡¡¡¡10:36:17 AM CPU %user %nice %system %idle
¡¡¡¡10:36:19 AM all 0.00 0.00 0.00 100.00
¡¡¡¡10:36:21 AM all 0.00 0.00 0.00 100.00
¡¡¡¡10:36:23 AM all 0.00 0.00 0.00 100.00
¡¡¡¡10:36:25 AM all 0.00 0.00 0.00 100.00
¡¡¡¡ÆäÖеÄ%usrÖ¸µÄÊÇÓû§½ø³ÌʹÓõÄcpu×ÊÔ´µÄ°Ù·Ö±È£¬%sysÖ¸µÄÊÇϵͳ×ÊԴʹÓÃcpu×ÊÔ´µÄ°Ù·Ö±È£¬%wioÖ¸µÄÊǵȴýioÍê³ÉµÄ°Ù·Ö±È£¬ÕâÊÇÖµµÃÎÒÃǹÛ×¢µÄÒ»Ï%idle¼´¿ÕÏеİٷֱȡ£Èç¹ûwioÁеÄÖµºÜ´ó£¬ÈçÔÚ35%ÒÔÉÏ£¬ËµÃ÷ÄãµÄϵͳµÄIO´æÔÚÆ¿¾±£¬ÄãµÄCPU»¨·ÑÁ˺ܴóµÄʱ¼äÈ¥µÈ´ýIOµÄÍê³É¡£IdleºÜС˵Ã÷ϵͳCPUºÜæ¡£ÏñÎÒµÄÕâ¸öʾÀý£¬¿ÉÒÔ¿´µ½wioƽ¾ùֵΪ11˵Ã÷ioûʲôÌرðµÄÎÊÌ⣬¶øÎÒµÄidleֵΪÁ㣬˵Ã÷ÎÒµÄcpuÒѾÂú¸ººÉÔËÐÐÁË¡£
¡¡¡¡µ±ÄãµÄϵͳ´æÔÚIOµÄÎÊÌ⣬¿ÉÒÔ´ÓÒÔϼ¸¸ö·½Ãæ½â¾ö:
¡¡¡¡*ÁªÏµÏàÓ¦µÄ²Ù×÷ϵͳµÄ¼¼ÊõÖ§³Ö¶ÔÕâ·½Ãæ½øÐÐÓÅ»¯£¬±ÈÈçhp-uxÔÚ»®¶¨¾í×éʱµÄÌõ´ø»¯µÈ·½Ãæ¡£
¡¡¡¡*²éÕÒOracleÖв»ºÏÀíµÄsqlÓï¾ä£¬¶ÔÆä½øÐÐÓÅ¡£
¡¡¡¡*¶ÔOracleÖзÃÎÊÁ¿Æµ·±µÄ±í³ýºÏÀí½¨Ë÷ÒýÍ⣬ÔÙ¾ÍÊÇ°ÑÕâЩ±í·Ö±í¿Õ¼ä´æ·ÅÒÔÃâ·ÃÎÊÉϲúÉúÈȵ㣬ÔÙÓоÍÊǶԱíºÏÀí·ÖÇø¡£
¡¡¡¡³£ÓõŤ¾ß±ãÊÇvmstat£¬¶ÔÓÚhp-unixÀ´Ëµ¿ÉÒÔÓÃglance,AixÀ´Ëµ¿ÉÒÔÓÃtopas,µ±Äã·¢ÏÖvmstatÖÐpiÁзÇÁ㣬memoryÖеÄfreeÁеÄÖµºÜС£¬glance,topasÖÐÄÚ´æµÄÀûÓÃÂʶàÓÚ80%ʱ£¬Õâʱ˵Ã÷ÄãµÄÄÚ´æ·½ÃæÓ¦¸Ãµ÷½ÚÒ»ÏÂÁË£¬·½·¨´óÌåÓÐÒÔϼ¸Ïî¡£
¡¡¡¡*»®¸øOracleʹÓõÄÄÚ´æ²»Òª³¬¹ýϵͳÄÚ´æµÄ1/2,Ò»°ã±£ÔÚϵͳÄÚ´æµÄ40%ΪÒæ¡£
¡¡¡¡*ΪϵͳÔö¼ÓÄÚ´æ¡£
¡¡¡¡*Èç¹ûÄãµÄÁ¬½ÓÌرð¶à£¬¿ÉÒÔʹÓÃMTSµÄ·½Ê½¡£
¡¡¡¡*´òÈ«²¹¶¡£¬·ÀÖ¹Äڴ橶´¡£
¡¡¡¡3¡¢ÈçºÎÕÒµ½µãÓÃϵÓÃ×ÊÔ´Ìرð´óµÄOracleµÄsession¼°ÆäÖ´ÐеÄÓï¾ä¡£
¡¡¡¡Hp-unix¿ÉÒÔÓÃglance,top£¬IBM AIX¿ÉÒÔÓÃtopas£¬´ËÍâ¿ÉÒÔʹÓÃpsµÄÃüÁͨ¹ýÕâЩ³ÌÐòÎÒÃÇ¿ÉÒÔÕÒµ½µãÓÃϵͳ×ÊÔ´Ìرð´óµÄÕâЩ½ø³ÌµÄ½ø³ÌºÅ£¬ÎÒÃǾͿÉÒÔͨ¹ýÒÔϵÄsqlÓï¾ä·¢ÏÖÕâ¸öpidÕýÔÚÖ´ÐÐÄĸösql£¬Õâ¸ösql×îºÃÔÚpl/sql developer,toadµÈÈí¼þÖÐÖ´ÐÐ, °Ñ<>ÖеÄspid»»³ÉÄãµÄspid¾Í¿ÉÒÔÁË¡£
¡¡¡¡SELECT a.username,a.machine,a.program,a.sid,a.serial#,
¡¡¡¡a.status,c.piece,c.sql_text from v$session a,v$process b,
¡¡¡¡v$sqltext c WHERE b.spid='ORCL' AND b.addr=a.paddr AND
¡¡¡¡a.sql_address=c.address(+)order BY c.piece
¡¡¡¡ÎÒÃǾͿÉÒ԰ѵõ½µÄÕâ¸ösql·ÖÎöһϣ¬¿´Ò»ÏÂËüµÄÖ´Ðмƻ®ÊÇ·ñ×ßË÷Òý£¬¶ÔÆäÓÅ»¯±ÜÃâÈ«±íɨÃ裬ÒÔ¼õÉÙIOµÈ´ý£¬´Ó¶ø¼Ó¿ìÓï¾äµÄÖ´ÐÐËٶȡ£
¡¡¡¡Ìáʾ£ºÎÒÔÚ×öÓÅ»¯sqlʱ£¬¾³£Åöµ½Ê¹ÓÃinµÄÓï¾ä£¬ÕâʱÎÒÃÇÒ»¶¨ÒªÓÃexists°ÑËü¸ø»»µô£¬ÒòΪOracleÔÚ´¦ÀíInʱÊÇ°´OrµÄ·½Ê½×öµÄ£¬¼´Ê¹Ê¹ÓÃÁËË÷ÒýÒ²»áºÜÂý¡£
¡¡¡¡±ÈÈ磺
¡¡¡¡SELECT col1,col2,col3 FROM table1 a ¡¡¡¡WHERE a.col1 not in (SELECT col1 FROM table2)
¡¡¡¡¿ÉÒÔ»»³É£º
¡¡¡¡SELECT col1,col2,col3 FROM table1 a ¡¡¡¡WHERE not exists ¡¡¡¡(SELECT 'x' FROM table2 b ¡¡¡¡WHERE a.col1=b.col1)
¡¡¡¡4¡¢ÁíÒ»¸öÓÐÓõĽű¾£º²éÕÒÇ°Ê®ÌõÐÔÄܲîµÄsql¡£
¡¡¡¡SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS, ¡¡¡¡COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea ¡¡¡¡order BY disk_reads DESC )where ROWNUM<10 ;
¡¡¡¡¶þ¡¢Ñ¸ËÙ·¢ÏÖOracle ServerµÄÐÔÄÜÎÊÌâµÄ³ÉÒò£¬ÎÒÃÇ¿ÉÒÔÇóÖúÓÚv$session_waitÕâ¸öÊÓͼ£¬¿´ÏµÍ³µÄÕâЩsessionÔÚµÈʲô£¬Ê¹ÓÃÁ˶àÉÙµÄIO¡£ÒÔÏÂÊÇÎÒÌṩµÄ²Î¿¼½Å±¾£º
¡¡¡¡½Å±¾ËµÃ÷£º²é¿´Õ¼io½Ï´óµÄÕýÔÚÔËÐеÄsession¡£
¡¡¡¡SELECT se.sid,se.serial#,pr.SPID,se.username,se.status, ¡¡¡¡se.terminal,se.program,se.MODULE,¡¢se.sql_address,st.event,st. ¡¡¡¡p1text,si.physical_reads, ¡¡¡¡si.block_changes FROM v$session se,v$session_wait st, ¡¡¡¡v$sess_io si,v$process pr WHERE st.sid=se.sid AND st. ¡¡¡¡sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st. ¡¡¡¡wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC
¡¡¡¡¶Ô¼ìË÷³öµÄ½á¹ûµÄ¼¸µã˵Ã÷£º
¡¡¡¡1¡¢ÎÒÊÇ°´Ã¿¸öÕýÔڵȴýµÄsessionÒѾ·¢ÉúµÄÎïÀí¶ÁÅŵÄÐò£¬ÒòΪËüÓëʵ¼ÊµÄIOÏà¹Ø¡£
¡¡¡¡2¡¢Äã¿ÉÒÔ¿´Ò»ÏÂÕâЩµÈ´ýµÄ½ø³Ì¶¼ÔÚæʲô£¬Óï¾äÊÇ·ñºÏÀí?
¡¡¡¡Select sql_address from v$session where sid=;
¡¡¡¡Select * from v$sqltext where address=;
¡¡¡¡Ö´ÐÐÒÔÉÏÁ½¸öÓï¾ä±ã¿ÉÒԵõ½Õâ¸ösessionµÄÓï¾ä¡£ÄãÒ²ÒÔÓÃalter system kill session 'sid,serial#';°ÑÕâ¸ösessionɱµô¡£
¡¡¡¡3¡¢Ó¦¹Û×¢Ò»ÏÂeventÕâÁУ¬ÕâÊÇÎÒÃǵ÷ÓŵĹؼüÒ»ÁУ¬ÏÂÃæ¶Ô³£³öÏÖµÄevent×öÒÔ¼òÒªµÄ˵Ã÷£º
¡¡¡¡a¡¢buffer busy waits£¬free buffer waitsÕâÁ½¸ö²ÎÊýËù±êʶÊÇdbwrÊÇ·ñ¹»ÓõÄÎÊÌ⣬ÓëIOºÜ´óÏà¹ØµÄ£¬µ±v$session_waitÖеÄfree buffer waitµÄÌõÄ¿ºÜС»òûÓеÄʱºî£¬ËµÃ÷ÄãµÄϵͳµÄdbwr½ø³Ì¾ö¶Ô¹»Ó㬲»Óõ÷Õû;free buffer waitµÄÌõÄ¿ºÜ¶à£¬ÄãµÄϵͳ¸Ð¾õÆðÀ´Ò»¶¨ºÜÂý£¬Õâʱ˵Ã÷ÄãµÄdbwrÒѾ²»¹»ÓÃÁË£¬Ëü²úÉúµÄwioÒѾ³ÉΪÄãµÄÊý¾Ý¿âÐÔÄܵÄÆ¿¾±£¬ÕâʱµÄ½â¾ö°ì·¨ÈçÏ£º
¡¡¡¡a.1Ôö¼Óд½ø³Ì£¬Í¬Ê±Òªµ÷Õûdb_block_lru_latches²ÎÊý¡£
¡¡¡¡Ê¾Àý£ºÐ޸ĻòÌí¼ÓÈçÏÂÁ½¸ö²ÎÊý
¡¡¡¡db_writer_processes=4
¡¡¡¡db_block_lru_latches=8
¡¡¡¡a¡¢2¿ªÒì²½IO£¬IBMÕâ·½Ãæ¼òµ¥µÃ¶à£¬hpÔòÂ鷳һЩ£¬¿ÉÒÔÓëHp¹¤³ÌʦÁªÏµ¡£
¡¡¡¡b¡¢db file sequential read£¬Ö¸µÄÊÇ˳Ðò¶Á£¬¼´È«±íɨÃ裬ÕâÒ²ÊÇÎÒÃÇÓ¦¸Ã¾¡Á¿¼õÉٵIJ¿·Ö£¬½â¾ö·½·¨¾ÍÊÇʹÓÃË÷Òý¡¢sqlµ÷ÓÅ£¬Í¬Ê±¿ÉÒÔÔö´ódb_file_multiblock_read_countÕâ¸ö²ÎÊý¡£
¡¡¡¡c¡¢db file scattered read,Õâ¸ö²ÎÊýÖ¸µÄÊÇͨ¹ýË÷ÒýÀ´¶ÁÈ¡£¬Í¬Ñù¿ÉÒÔͨ¹ýÔö¼Ódb_file_multiblock_read_countÕâ¸ö²ÎÊýÀ´Ìá¸ßÐÔÄÜ¡£
¡¡¡¡d¡¢latch free,Óë˨Ïà¹ØµÄÁË£¬ÐèҪרÃŵ÷½Ú¡£
¡¡¡¡e¡¢ÆäËû²ÎÊý¿ÉÒÔ²»Ìرð¹Û×¢¡£
¡¡¡¡ÆäËûµÄÓÅ»¯ÊÖ¶ÎËƺõÖ÷Òª¼¯ÖÐÔÚSQL²éѯÓï¾äÉÏÃ棬Oracle±¾ÉíÒ²ÌṩÁËÓÅ»¯Æ÷¡£¿´À´DBAµÄѧÎʲ»ÉÙ°¡¡£
ÎÄÕÂÀ´Ô´£ºÌ켫ÂÛ̳ÕûÀí |