ÔÚ¹ýÈ¥µÄÊ®ÄêÖУ¬ Oracle ÒѾ³ÉΪÊÀ½çÉÏ×îרҵµÄÊý¾Ý¿âÖ®Ò»¡£¶ÔÓÚ IT ר¼ÒÀ´Ëµ£¬¾ÍÊÇҪȷ±£ÀûÓà Oracle µÄÇ¿´óÌØÐÔÀ´Ìá¸ßËûÃǹ«Ë¾µÄÉú²úÁ¦¡£×îÓÐЧµÄ·½·¨Ö®Ò»ÊÇͨ¹ý Oracle µ÷ÓÅ¡£ËüÓдóÁ¿µÄµ÷Õû²ÎÊýºÍ¼¼ÊõÀ´¸Ä½øÄãµÄ Oracle Êý¾Ý¿âµÄÐÔÄÜ¡£
Oracle µ÷ÓÅÊÇÒ»¸ö¸´ÔÓµÄÖ÷Ìâ¡£¹ØÓÚµ÷ÓÅ¿ÉÒÔдÕûÕûÒ»±¾Ê飬²»¹ý£¬ÎªÁ˸ÄÉÆ Oracle Êý¾Ý¿âµÄÐÔÄÜ£¬ÓÐһЩ»ù±¾µÄ¸ÅÄîÊÇÿ¸ö Oracle DBA ¶¼Ó¦¸Ã×ñ´ÓµÄ¡£
¡¡¡¡ ÔÚÕâƪ¼ò½éÖУ¬ÎÒÃǽ«¼òÒªµØ½éÉÜÒÔÏ嵀 Oracle Ö÷Ì⣺
¡¡¡¡-- Íⲿµ÷Õû£ºÎÒÃÇÓ¦¸Ã¼Çס Oracle ²¢²»Êǵ¥¶ÀÔËÐеġ£Òò´ËÎÒÃǽ«²é¿´Ò»ÏÂͨ¹ýµ÷Õû Oracle ·þÎñÆ÷ÒԵõ½¸ßµÄÐÔÄÜ¡£
¡¡¡¡--Row re-sequencing ÒÔ¼õÉÙ´ÅÅÌ I/O £ºÎÒÃÇÓ¦¸Ã¶®µÃ Oracle µ÷ÓÅ×îÖØÒªµÄÄ¿±êÊǼõÉÙ I/O ¡£
¡¡¡¡--Oracle SQL µ÷Õû¡£ Oracle SQL µ÷ÕûÊÇ Oracle µ÷ÕûÖÐ×îÖØÒªµÄÁìÓòÖ®Ò»£¬Ö»ÒªÍ¨¹ýһЩ¼òµ¥µÄ SQL µ÷ÓŹæÔò¾Í¿ÉÒÔ´ó·ù¶ÈµØÌáÉý SQL Óï¾äµÄÐÔÄÜ£¬ÕâÊÇÒ»µã¶¼²»Ææ¹ÖµÄ¡£
¡¡¡¡-- µ÷Õû Oracle ÅÅÐò£ºÅÅÐò¶ÔÓÚ Oracle ÐÔÄÜÒ²ÊÇÓкܴóÓ°ÏìµÄ¡£
¡¡¡¡-- µ÷Õû Oracle µÄ¾ºÕù£º±íºÍË÷ÒýµÄ²ÎÊýÉèÖöÔÓÚ UPDATE ºÍ INSERT µÄÐÔÄÜÓкܴóµÄÓ°Ïì¡£
¡¡¡¡ ÎÒÃÇÊ×ÏÈ´Óµ÷Õû Oracle ÍⲿµÄ»·¾³¿ªÊ¼¡£Èç¹ûÄÚ´æºÍ CPU µÄ×ÊÔ´²»×ãµÄ»°£¬ÈÎºÎµÄ Oracle µ÷Õû¶¼ÊÇûÓаïÖúµÄ¡£
¡¡¡¡ÍⲿµÄÐÔÄÜÎÊÌâ
¡¡¡¡
¡¡¡¡Oracle ²¢²»Êǵ¥¶ÀÔËÐеġ£ Oracle Êý¾Ý¿âµÄÐÔÄܺÍÍⲿµÄ»·¾³ÓкܴóµÄ¹Øϵ¡£ÕâЩÍⲿµÄÌõ¼þ°üÀ¨ÓУº
¡¡¡¡ £® CPU--CPU ×ÊÔ´µÄ²»×ãÁî²éѯ±äÂý¡£µ±²éѯ³¬¹ýÁË Oracle ·þÎñÆ÷µÄ CPU ÐÔÄÜʱ£¬ÄãµÄÊý¾Ý¿âÐÔÄܾÍÊܵ½ CPU µÄÏÞÖÆ¡£
¡¡¡¡ £®ÄÚ´æ -- ¿ÉÓÃÓÚ Oralce µÄÄÚ´æÊýÁ¿Ò²»áÓ°Ïì SQL µÄÐÔÄÜ£¬ÌرðÊÇÔÚÊý¾Ý»º³åºÍÄÚ´æÅÅÐò·½Ãæ¡£
¡¡¡¡ £®ÍøÂç -- ´óÁ¿µÄ Net8 ͨÐÅÁî SQL µÄÐÔÄܱäÂý¡£
¡¡¡¡ Ðí¶àÐÂÊÖ¶¼´íÎóµÄÈÏΪӦ¸ÃÊ×Ïȵ÷Õû Oracle Êý¾Ý¿â£¬¶ø²»ÊÇÏÈÈ·ÈÏÍⲿ×ÊÔ´ÊÇ·ñ×ã¹»¡£Êµ¼ÊÉÏ£¬Èç¹ûÍⲿ»·¾³³öÏÖÆ¿¾±£¬ÔÙ¶àµÄ Oracle µ÷Õû¶¼ÊÇûÓаïÖúµÄ¡£
¡¡¡¡ ÔÚ¼ì²é Oracle µÄÍⲿ»·¾³Ê±£¬ÓÐÁ½¸ö·½ÃæÊÇÐèҪעÒâµÄ£º
¡¡¡¡1 ¡¢µ±ÔËÐжÓÁеÄÊýÄ¿³¬¹ý·þÎñÆ÷µÄ CPU ÊýÁ¿Ê±£¬·þÎñÆ÷µÄÐÔÄܾͻáÊܵ½ CPU µÄÏÞÖÆ¡£²¹¾ÈµÄ·½·¨ÊÇΪ·þÎñÆ÷Ôö¼Ó¶îÍâµÄ CPU »òÕ߹رÕÐèÒªºÜ¶à´¦Àí×ÊÔ´µÄ×é¼þ£¬ÀýÈç Oracle Parallel Query ¡£
¡¡¡¡2 ¡¢ÄÚ´æ·ÖÒ³¡£µ±ÄÚ´æ·Öҳʱ£¬ÄÚ´æÈÝÁ¿ÒѾ²»×㣬¶øÄÚ´æÒ³ÊÇÓë´ÅÅÌÉϵĽ»»»Çø½øÐн»»¥µÄ¡£²¹¾ÈµÄ·½·¨ÊÇÔö¼Ó¸ü¶àµÄÄڴ棬¼õÉÙ Oracle SGA µÄ´óС£¬»òÕß¹Ø±Õ Oracle µÄ¶àÏ̷߳þÎñÆ÷¡£
¡¡¡¡ ¿ÉÒÔʹÓø÷ÖÖ±ê×¼µÄ·þÎñÆ÷¹¤¾ßÀ´µÃµ½·þÎñÆ÷µÄͳ¼ÆÊý¾Ý£¬ÀýÈç vmstat,glance,top ºÍ sar ¡£ DBA µÄÄ¿±êÊÇÈ·±£Êý¾Ý¿â·þÎñÆ÷ÓµÓÐ×ã¹»µÄ CPU ºÍÄÚ´æ×ÊÔ´À´´¦Àí Oracle µÄÇëÇó¡£
¡¡¡¡ ÒÔÏÂÈÃÎÒÃÇÀ´¿´Ò»Ï Oracle µÄ row-resequencing ÊÇÈçºÎÄܹ»¼«´óµØ¼õÉÙ´ÅÅÌ I/O µÄ¡£
¡¡¡¡Row-resequencing £¨ÐеÄÖØÐÂÅÅÐò£©
¡¡¡¡
¡¡¡¡¾ÍÏóÎÒÃÇÉÏÃæÌáµ½µÄ£¬ÓоÑéµÄ Oracle DBA ¶¼ÖªµÀ I/O ÊÇÏìӦʱ¼äµÄ×î´ó×é³É²¿·Ö¡£ÆäÖдÅÅÌ I/O ÌرðÀ÷º¦£¬ÒòΪµ± Oracle ÓÉ´ÅÅÌÉϵÄÒ»¸öÊý¾ÝÎļþµÃµ½Ò»¸öÊý¾Ý¿éʱ£¬¶ÁµÄ½ø³Ì¾Í±ØÐëµÈ´ýÎïÀí I/O ²Ù×÷Íê³É¡£´ÅÅ̲Ù×÷Òª±ÈÊý¾Ý»º³åÂý 10,000 ±¶¡£Òò´Ë£¬Èç¹û¿ÉÒÔÁî I/O ×îС»¯£¬»òÕß¼õÉÙÓÉÓÚ´ÅÅÌÉϵÄÎļþ¾ºÕù¶ø´øÀ´µÄÆ¿¾±£¬¾Í¿ÉÒÔ´ó´óµØ¸ÄÉÆ Oracle Êý¾Ý¿âµÄÐÔÄÜ¡£
¡¡¡¡ Èç¹ûϵͳÏìÓ¦ºÜÂý£¬Í¨¹ý¼õÉÙ´ÅÅÌ I/O ¾Í¿ÉÒÔÓÐÒ»¸öºÜ¿ìµÄ¸ÄÉÆ¡£Èç¹ûÔÚÒ»¸öÊÂÎñÖÐͨ¹ý°´Ò»¶¨µÄ·¶Î§ËÑË÷ primary-key Ë÷ÒýÀ´·ÃÎÊ±í£¬ÄÇôÖØÐÂÒÔ CTAS µÄ·½·¨×éÖ¯±í½«ÊÇÄã¼õÉÙ I/O µÄÊ×Òª²ßÂÔ¡£Í¨¹ýÔÚÎïÀíÉϽ«ÐÐÅÅÐòΪºÍ primary-key Ë÷ÒýÒ»ÑùµÄ˳Ðò£¬¾Í¿ÉÒÔ¼Ó¿ì»ñµÃÊý¾ÝµÄËٶȡ£
¡¡¡¡ ¾ÍÏó´ÅÅ̵ĸºÔØƽºâÒ»Ñù£¬ÐеÄÖØÐÂÅÅÐòÒ²ÊǺܼòµ¥µÄ£¬¶øÇÒÒ²ºÜ¿ì¡£Í¨¹ýÓëÆäËüµÄ DBA ¹ÜÀí¼¼ÇÉÒ»ÆðʹÓ㬾ͿÉÒÔÔÚ¸ß I/O µÄϵͳÖдó´óµØ¼õÉÙÏìÓ¦µÄʱ¼ä¡£
¡¡¡¡ ÔÚ¸ßÈÝÁ¿µÄÔÚÏßÊÂÎñ´¦Àí»·¾³ÖУ¨ online transaction processing £¬ OLTP £©£¬Êý¾ÝÊÇÓÉÒ»¸ö primary Ë÷ÒýµÃµ½µÄ£¬ÖØÐÂÅÅÐò±í¸ñµÄÐоͿÉÒÔÁîÁ¬Ðø¿éµÄ˳ÐòºÍËüÃÇµÄ primary Ë÷ÒýÒ»Ñù£¬ÕâÑù¾Í¿ÉÒÔÔÚË÷ÒýÇý¶¯µÄ±í¸ñ²éѯÖУ¬¼õÉÙÎïÀí I/O ²¢ÇÒ¸ÄÉÆÏìӦʱ¼ä¡£Õâ¸ö¼¼ÇɽöÔÚÓ¦ÓÃÑ¡Ôñ¶àÐеÄʱºòÓÐÓ㬻òÕßÔÚʹÓÃË÷Òý·¶Î§ËÑË÷ºÍÓ¦Ó÷¢³ö¶à¸ö²éѯÀ´µÃµ½Á¬ÐøµÄ key ʱÓÐЧ¡£¶ÔÓÚËæ»úµÄΨһ primary-key £¨Ö÷¼ü£©µÄ·ÃÎʽ«²»»áÓÉÐÐÖØÐÂÅÅÐòÖеõ½ºÃ´¦¡£
¡¡¡¡ ÈÃÎÒÃÇ¿´Ò»ÏÂËüÊÇÈçºÎ¹¤×÷µÄ¡£¿¼ÂÇÒÔϵÄÒ»¸ö SQL µÄ²éѯ£¬ËüʹÓÃÒ»¸öË÷ÒýÀ´µÃµ½ 100 ÐУº
selectsalaryfromemployeewherelast_name like 'B%';
Õâ¸ö²éѯ½«»áʹÓà last_name_index £¬ËÑË÷ÆäÖеÄÿһÐÐÀ´µÃµ½Ä¿±êÐС£Õâ¸ö²éѯ½«»áÖÁÉÙʹÓà 100 ´ÎÎïÀí´ÅÅ̵ĶÁÈ¡£¬ÒòΪ employee µÄÐдæ·ÅÔÚ²»Í¬µÄÊý¾Ý¿éÖС£
¡¡¡¡ ²»¹ý£¬Èç¹û±íÖеÄÐÐÒѾÖØÐÂÅÅÐòΪºÍ last_name_index µÄÒ»Ñù£¬Í¬ÑùµÄ²éѯÓÖ»áÔõÑù´¦ÀíÄØ£¿ÎÒÃÇ¿ÉÒÔ¿´µ½Õâ¸ö²éѯֻÐèÒªÈý´ÎµÄ´ÅÅÌ I/O ¾Í¶ÁÍêÈ«²¿ 100 ¸öÔ±¹¤µÄ×ÊÁÏ£¨Ò»´ÎÓÃ×÷Ë÷ÒýµÄ¶ÁÈ¡£¬Á½´ÎÓÃ×÷Êý¾Ý¿éµÄ¶ÁÈ¡£©£¬¼õÉÙÁË 97 ´ÎµÄ¿é¶ÁÈ¡¡£
¡¡¡¡ ÖØÐÂÅÅÐò´øÀ´µÄÐÔÄܸÄÉƵij̶ÈÔÚÓÚÔÚÄ㿪ʼµÄʱºòÐеÄÂÒÐòÐÔÈçºÎ£¬ÒÔ¼°ÄãÐèÒªÓÉÐòÁÐÖзÃÎʶàÉÙÐС£ÖÁÓÚÒ»¸ö±íÖеÄÐÐÓëË÷ÒýµÄÅÅÐò¼üµÄÆ¥Åä³Ì¶È£¬¿ÉÒԲ鿴Êý¾Ý×ÖµäÖÐµÄ dba_indexes ºÍ dba_tables ÊÓͼµÃµ½¡£
¡¡¡¡ ÔÚ dba_indexes µÄÊÓͼÖУ¬²é¿´ clustering_factor ÁС£Èç¹û clustering_factor µÄÖµºÍ±íÖеĿéÊýÄ¿´óÖÂÒ»Ñù£¬ÄÇôÄãµÄ±íºÍË÷ÒýµÄ˳ÐòÊÇÒ»ÑùµÄ¡£²»¹ý£¬Èç¹û clustering_factor µÄÖµ½Ó½ü±íÖеÄÐÐÊýÄ¿£¬ÄǾͱíÃ÷±í¸ñÖеÄÐкÍË÷ÒýµÄ˳ÐòÊDz»Ò»ÑùµÄ¡£
¡¡¡¡ ÐÐÖØÐÂÅÅÐòµÄ×÷ÓÃÊDz»¿ÉÒÔС¿´µÄ¡£ÔÚÐèÒª½øÐдó·¶Î§µÄË÷ÒýËÑË÷µÄ´ó±íÖУ¬ÐÐÖØÐÂÅÅÐò¿ÉÒÔÁî²éѯµÄÐÔÄÜÌá¸ßÈý±¶¡£
¡¡¡¡ Ò»µ©ÄãÒѾ¾ö¶¨ÖØÐÂÅÅÐò±íÖеÄÐУ¬Äã¿ÉÒÔʹÓÃÒÔÏµĹ¤¾ßÖ®Ò»À´ÖØÐÂ×éÖ¯±í¸ñ¡£
¡¡¡¡. ʹÓà Oracle µÄ Create Table As Select (CTAS) Óï·¨À´¿½±´±í¸ñ
¡¡¡¡. Oracle9i ×Ô´øµÄ±í¸ñÖØÐÂ×éÖ¯¹¤¾ß
¡¡¡¡
¡¡¡¡ ÒÔÏ£¬ÎÒÃÇÀ´¿´ÒÔÏ SQL Óï¾äµÄµ÷ÓÅ¡£
¡¡¡¡SQL µ÷ÓÅ
¡¡¡¡Oracle µÄ SQL µ÷ÓÅÊÇÒ»¸ö¸´ÔÓµÄÖ÷Ì⣬ÉõÖÁÊÇÐèÒªÕû±¾ÊéÀ´½éÉÜ Oracle SQL µ÷ÓŵÄϸ΢²î±ð¡£²»¹ýÓÐһЩ»ù±¾µÄ¹æÔòÊÇÿ¸ö Oracle DBA ¶¼ÐèÒª¸ú´ÓµÄ£¬ÕâЩ¹æÔò¿ÉÒÔ¸ÄÉÆËûÃÇϵͳµÄÐÔÄÜ¡£ SQL µ÷ÓŵÄÄ¿±êÊǼòµ¥µÄ£º
¡¡¡¡. Ïû³ý²»±ØÒªµÄ´ó±íÈ«±íËÑË÷£º²»±ØÒªµÄÈ«±íËÑË÷µ¼Ö´óÁ¿²»±ØÒªµÄ I/O £¬´Ó¶øÍÏÂýÕû¸öÊý¾Ý¿âµÄÐÔÄÜ¡£µ÷ÓÅר¼ÒÊ×ÏÈ»á¸ù¾Ý²éѯ·µ»ØµÄÐÐÊýÄ¿À´ÆÀ¼Û SQL ¡£ÔÚÒ»¸öÓÐÐòµÄ±íÖУ¬Èç¹û²éѯ·µ»ØÉÙÓÚ 40% µÄÐУ¬»òÕßÔÚÒ»¸öÎÞÐòµÄ±íÖУ¬·µ»ØÉÙÓÚ 7% µÄÐУ¬ÄÇôÕâ¸ö²éѯ¶¼¿ÉÒÔµ÷ÕûΪʹÓÃÒ»¸öË÷ÒýÀ´´úÌæÈ«±íËÑË÷¡£¶ÔÓÚ²»±ØÒªµÄÈ«±íËÑË÷À´Ëµ£¬×î³£¼ûµÄµ÷ÓÅ·½·¨ÊÇÔö¼ÓË÷Òý¡£¿ÉÒÔÔÚ±íÖмÓÈë±ê×¼µÄ B Ê÷Ë÷Òý£¬Ò²¿ÉÒÔ¼ÓÈë bitmap ºÍ»ùÓÚº¯ÊýµÄË÷Òý¡£Òª¾ö¶¨ÊÇ·ñÏû³ýÒ»¸öÈ«±íËÑË÷£¬Äã¿ÉÒÔ×Ðϸ¼ì²éË÷ÒýËÑË÷µÄ I/O ¿ªÏúºÍÈ«±íËÑË÷µÄ¿ªÏú£¬ËüÃǵĿªÏúºÍÊý¾Ý¿éµÄ¶ÁÈ¡ºÍ¿ÉÄܵIJ¢ÐÐÖ´ÐÐÓйأ¬²¢½«Á½Õß×÷¶Ô±È¡£ÔÚһЩÇé¿öÏ£¬Ò»Ð©²»±ØÒªµÄÈ«±íËÑË÷µÄÏû³ý¿ÉÒÔͨ¹ýÇ¿ÖÆʹÓÃÒ»¸ö index À´´ïµ½£¬Ö»ÐèÒªÔÚ SQL Óï¾äÖмÓÈëÒ»¸öË÷ÒýµÄÌáʾ¾Í¿ÉÒÔÁË¡£
¡¡¡¡. ÔÚÈ«±íËÑË÷ÊÇÒ»¸ö×î¿ìµÄ·ÃÎÊ·½·¨Ê±£¬½«Ð¡±íµÄÈ«±íËÑË÷·Åµ½»º´æÖУ¬µ÷ÓÅר¼ÒÓ¦¸ÃÈ·±£ÓÐÒ»¸öרÃŵÄÊý¾Ý»º³åÓÃ×÷Ðлº³å¡£ÔÚ Oracle7 ÖУ¬Äã¿ÉÒÔʹÓà alter table xxx cache Óï¾ä£¬ÔÚ Oracle8 »òÒÔÉÏ£¬Ð¡±í¿ÉÒÔ±»Ç¿ÖÆΪ·Åµ½ KEEP ³ØÖлº³å¡£
¡¡¡¡. È·±£×îÓŵÄË÷ÒýʹÓà £º¶ÔÓÚ¸ÄÉƲéѯµÄËٶȣ¬ÕâÊÇÌرðÖØÒªµÄ¡£ÓÐʱ Oracle ¿ÉÒÔÑ¡Ôñ¶à¸öË÷ÒýÀ´½øÐвéѯ£¬µ÷ÓÅר¼Ò±ØÐë¼ì²éÿ¸öË÷Òý²¢ÇÒÈ·±£ Oracle ʹÓÃÕýÈ·µÄË÷Òý¡£Ëü»¹°üÀ¨ bitmap ºÍ»ùÓÚº¯ÊýµÄË÷ÒýµÄʹÓá£
¡¡¡¡. È·±£×îÓÅµÄ JOIN ²Ù×÷£ºÓÐЩ²éѯʹÓà NESTED LOOP join ¿ìһЩ£¬ÓÐЩÔòÊÇ HASH join ¿ìһЩ£¬ÁíÍâһЩÔòÊÇ sort-merge join ¸ü¿ì¡£
¡¡¡¡ ÕâЩ¹æÔò¿´À´¼òµ¥£¬²»¹ýËüÃÇÕ¼ SQL µ÷ÓÅÈÎÎñµÄ 90% £¬²¢ÇÒËüÃÇÒ²ÎÞÐèÍêÈ«¶®µÃ Oracle SQL µÄÄÚ²¿ÔË×÷¡£ÒÔÏÂÎÒÃÇÀ´¼òµ¥¸ÅÀÀÒÔÏ Oracle SQL µÄÓÅ»¯¡£
¡¡¡¡ ÎÒÃÇÊ×ÏȼòÒª²é¿´ Oracle µÄÅÅÐò£¬²¢ÇÒ¿´Ò»¿´ÅÅÐò²Ù×÷ÊÇÈçºÎÓ°ÏìÐÔÄܵġ£
¡¡¡¡ µ÷Õû Oracle µÄÅÅÐò²Ù×÷
¡¡¡¡ ÅÅÐòÊÇ SQL Óï·¨ÖÐÒ»¸öСµÄ·½Ã棬µ«ºÜÖØÒª£¬ÔÚ Oracle µÄµ÷ÕûÖУ¬Ëü³£³£±»ºöÂÔ¡£µ±Ê¹Óà create index ¡¢ ORDER BY »òÕß GROUP BY µÄÓï¾äʱ£¬ Oracle Êý¾Ý¿â½«»á×Ô¶¯Ö´ÐÐÅÅÐòµÄ²Ù×÷¡£Í¨³££¬ÔÚÒÔϵÄÇé¿öÏ Oracle »á½øÐÐÅÅÐòµÄ²Ù×÷£º
¡¡¡¡ ʹÓà Order by µÄ SQL Óï¾ä
¡¡¡¡ ʹÓà Group by µÄ SQL Óï¾ä
¡¡¡¡ ÔÚ´´½¨Ë÷ÒýµÄʱºò
¡¡¡¡ ½øÐÐ table join ʱ£¬ÓÉÓÚÏÖÓÐË÷ÒýµÄ²»×ã¶øµ¼Ö SQL ÓÅ»¯Æ÷µ÷Óà MERGE SORT
¡¡¡¡ µ±Óë Oracle ½¨Á¢ÆðÒ»¸ö session ʱ£¬ÔÚÄÚ´æÖоͻáΪ¸Ã session ·ÖÅäÒ»¸ö˽ÓеÄÅÅÐòÇøÓò¡£Èç¹û¸ÃÁ¬½ÓÊÇÒ»¸öרÓõÄÁ¬½Ó (dedicated connection) £¬ÄÇô¾Í»á¸ù¾Ý init.ora ÖÐ sort_area_size ²ÎÊýµÄ´óСÔÚÄÚ´æÖзÖÅäÒ»¸ö Program Global Area (PGA) ¡£Èç¹ûÁ¬½ÓÊÇͨ¹ý¶àÏ̷߳þÎñÆ÷½¨Á¢µÄ£¬ÄÇôÅÅÐòµÄ¿Õ¼ä¾ÍÔÚ large_pool ÖзÖÅä¡£²»ÐÒµÄÊÇ£¬¶ÔÓÚËùÓÐµÄ session £¬ÓÃ×öÅÅÐòµÄÄÚ´æÁ¿¶¼±ØÐëÊÇÒ»ÑùµÄ£¬ÎÒÃDz»ÄÜΪÐèÒª¸ü´óÅÅÐòµÄ²Ù×÷·ÖÅä¶îÍâµÄÅÅÐòÇøÓò¡£Òò´Ë£¬Éè¼ÆÕß±ØÐë×÷³öÒ»¸öƽºâ£¬ÔÚ·ÖÅä×ã¹»µÄÅÅÐòÇøÓòÒÔ±ÜÃâ·¢Éú´óµÄÅÅÐòÈÎÎñʱ³öÏÖ´ÅÅÌÅÅÐò£¨ disk sorts £©µÄͬʱ£¬¶ÔÓÚÄÇЩ²¢²»ÐèÒª½øÐкܴóÅÅÐòµÄÈÎÎñ£¬¾Í»á³öÏÖһЩÀË·Ñ¡£µ±È»£¬µ±ÅÅÐòµÄ¿Õ¼äÐèÇ󳬳öÁË sort_area_size µÄ´óСʱ£¬Õâʱ½«»áÔÚ TEMP ±í¿Õ¼äÖзÖÒ³½øÐдÅÅÌÅÅÐò¡£´ÅÅÌÅÅÐòÒª±ÈÄÚ´æÅÅÐò´ó¸ÅÂý 14,000 ±¶¡£
¡¡¡¡ ÉÏÃæÎÒÃÇÒѾÌáµ½£¬Ë½ÓÐÅÅÐòÇøÓòµÄ´óСÊÇÓÐ init.ora ÖÐµÄ sort_area_size ²ÎÊý¾ö¶¨µÄ¡£Ã¿¸öÅÅÐòËùÕ¼ÓõĴóСÓÉ init.ora ÖÐµÄ sort_area_retained_size ²ÎÊý¾ö¶¨¡£µ±ÅÅÐò²»ÄÜÔÚ·ÖÅäµÄ¿Õ¼äÖÐÍê³Éʱ£¬¾Í»áʹÓôÅÅÌÅÅÐòµÄ·½Ê½£¬¼´ÔÚ Oracle ʵÀýÖеÄÁÙʱ±í¿Õ¼äÖнøÐС£
¡¡¡¡ ´ÅÅÌÅÅÐòµÄ¿ªÏúÊǺܴóµÄ£¬Óм¸¸ö·½ÃæµÄÔÒò¡£Ê×ÏÈ£¬ºÍÄÚ´æÅÅÐòÏà±È½Ï£¬ËüÃÇÌرðÂý£»¶øÇÒ´ÅÅÌÅÅÐò»áÏûºÄÁÙʱ±í¿Õ¼äÖеÄ×ÊÔ´¡£ Oracle »¹±ØÐë·ÖÅ仺³å³Ø¿éÀ´±£³ÖÁÙʱ±í¿Õ¼äÖеĿ顣ÎÞÂÛʲôʱºò£¬ÄÚ´æÅÅÐò¶¼±È´ÅÅÌÅÅÐòºÃ£¬´ÅÅÌÅÅÐò½«»áÁîÈÎÎñ±äÂý£¬²¢ÇÒ»áÓ°Ïì Oracle ʵÀýµÄµ±Ç°ÈÎÎñµÄÖ´ÐС£»¹ÓУ¬¹ý¶àµÄ´ÅÅÌÅÅÐò½«»áÁî free buffer waits µÄÖµ±ä¸ß£¬´Ó¶øÁîÆäËüÈÎÎñµÄÊý¾Ý¿éÓÉ»º³åÖÐÒÆ×ß¡£
¡¡¡¡ ½Ó×Å£¬ÈÃÎÒÃÇ¿´Ò»Ï Oracle µÄ¾ºÕù£¬²¢ÇÒ¿´Ò»Ï±íµÄ´æ´¢²ÎÊýµÄÉèÖÃÊÇÈçºÎÓ°Ïì SQL UPDATE ºÍ INSERT Óï¾äµÄÐÔÄܵġ£
µ÷Õû Oracle µÄ¾ºÕù
¡¡¡¡Oracle µÄÆäÖÐÒ»¸öÓŵãʱËü¿ÉÒÔ¹ÜÀíÿ¸ö±í¿Õ¼äÖеÄ×ÔÓɿռ䡣 Oracle ¸ºÔð´¦Àí±íºÍË÷ÒýµÄ¿Õ¼ä¹ÜÀí£¬ÕâÑù¾Í¿ÉÒÔÈÃÎÒÃÇÎÞÐ趮µÃ Oracle µÄ±íºÍË÷ÒýµÄÄÚ²¿ÔË×÷¡£²»¹ý£¬¶ÔÓÚÓоÑéµÄ Oracle µ÷ÓÅר¼ÒÀ´Ëµ£¬ËûÐèÒª¶®µÃ Oracle ÊÇÈçºÎ¹ÜÀí±íµÄ extent ºÍ¿ÕÏеÄÊý¾Ý¿é¡£¶ÔÓÚµ÷ÕûÓµÓÐ¸ßµÄ insert »òÕß update µÄϵͳÀ´Ëµ£¬ÕâÊǷdz£ÖØÒªµÄ¡£
¡¡¡¡ Òª¾«Í¨¶ÔÏóµÄµ÷Õû£¬ÄãÐèÒª¶®µÃ freelists ºÍ freelist ×éµÄÐÐΪ£¬ËüÃÇºÍ pctfree ¼° pctused ²ÎÊýµÄÖµÓйء£ÕâЩ֪ʶ¶ÔÓÚÆóÒµ×ÊÔ´¼Æ»®£¨ ERP £©µÄÓ¦ÓÃÊÇÌرðÖØÒªµÄ£¬ÒòΪÔÚÕâЩӦÓÃÖУ¬²»ÕýÈ·µÄ±íÉèÖÃͨ³£ÊÇ DML Óï¾äÖ´ÐÐÂýµÄÔÒò¡£
¡¡¡¡ ¶ÔÓÚ³õѧÕßÀ´Ëµ£¬×î³£¼ûµÄ´íÎóÊÇÈÏΪĬÈ쵀 Oracle ²ÎÊý¶ÔÓÚËùÓеĶÔÏó¶¼ÊÇ×î¼ÑµÄ¡£³ý·Ç´ÅÅ̵ÄÏûºÄ²»ÊÇÒ»¸öÎÊÌ⣬·ñÔòÔÚÉèÖñíµÄ pctfree ºÍ pctused ²ÎÊýʱ£¬¾Í±ØÐ뿼ÂÇƽ¾ùµÄÐг¤ºÍÊý¾Ý¿âµÄ¿é´óС£¬ÕâÑù¿ÕµÄ¿é²Å»á±»ÓÐЧµØ·Åµ½ freelists ÖС£µ±ÕâЩÉèÖò»Õýȷʱ£¬ÄÇЩµÃµ½µÄ freelists Ò²ÊÇ "dead" ¿é£¬ÒòΪËüÃÇûÓÐ×ã¹»µÄ¿Õ¼äÀ´´æ´¢Ò»ÐУ¬ÕâÑù½«»áµ¼ÖÂÃ÷ÏԵĴ¦ÀíÑÓ³Ù¡£
Freelists ¶ÔÓÚÓÐЧµØÖØÐÂʹÓà Oracle ±í¿Õ¼äÖеĿռäÊǺÜÖØÒªµÄ£¬ËüºÍ pctfree ¼° pctused ÕâÁ½¸ö´æ´¢²ÎÊýµÄÉèÖÃÖ±½ÓÏà¹Ø¡£Í¨¹ý½« pctused ÉèÖÃΪһ¸ö¸ßµÄÖµ£¬ÕâʱÊý¾Ý¿â¾Í»á¾¡¿ìµØÖØÐÂʹÓÿ顣²»¹ý£¬¸ßÐÔÄܺÍÓÐЧµØÖØÐÂʹÓñíµÄ¿éÊǶÔÁ¢µÄ¡£ÔÚµ÷Õû Oracle µÄ±í¸ñºÍË÷Òýʱ£¬ÐèÒªÈÏÕ濼ÂǾ¿¾¹ÐèÒª¸ßÐÔÄÜ»¹ÊÇÓÐЧµÄ¿Õ¼äÖØÓ㬲¢ÇҾݴËÀ´ÉèÖñíµÄ²ÎÊý¡£ÒÔÏÂÎÒÃÇÀ´¿´Ò»ÏÂÕâЩ freelists ÊÇÈçºÎÓ°Ïì Oracle µÄÐÔÄܵġ£
¡¡¡¡ µ±ÓÐÒ»¸öÇëÇóÐèÒª²åÈëÒ»Ðе½±í¸ñÖÐʱ£¬ Oracle ¾Í»áµ½ freelist ÖÐÑ°ÕÒÒ»¸öÓÐ×ã¹»µÄ¿Õ¼äÀ´ÈÝÄÉÒ»ÐеĿ顣ÄãÒ²ÐíÖªµÀ£¬ freelist ´®ÊÇ·ÅÔÚ±í¸ñ»òÕßË÷ÒýµÄµÚÒ»¸ö¿éÖУ¬Õâ¸ö¿éÒ²±»³ÆΪ¶ÎÍ·£¨ segment header £©¡£ pctfree ºÍ pctused ²ÎÊýµÄΨһĿµÄ¾ÍÊÇΪÁË¿ØÖÆ¿éÈçºÎÔÚ freelists Öнø³ö¡£ËäÈ» freelist link ºÍ unlink ÊǼòµ¥µÄ Oracle ¹¦ÄÜ£¬²»¹ýÉèÖà freelist link (pctused) ºÍ unlink (pctfree) ¶Ô Oracle µÄÐÔÄÜȷʵÓÐÓ°Ïì¡£
¡¡¡¡ ÓÉ DBA µÄ»ù±¾ÖªÊ¶ÖªµÀ£¬ pctfree ²ÎÊýÊÇ¿ØÖÆ freelist un-links µÄ£¨¼´½«¿éÓÉ freelists ÖÐÒƳý£©¡£ÉèÖà pctfree=10 Òâζ×Åÿ¸ö¿é¶¼±£Áô 10% µÄ¿Õ¼äÓÃ×÷ÐÐÀ©Õ¹¡£ pctused ²ÎÊýÊÇ¿ØÖÆ freelist re-links µÄ¡£ÉèÖà pctused=40 Òâζ×ÅÖ»ÓÐÔÚ¿éµÄʹÓõÍÓÚ 40% ʱ²Å»á»Øµ½±í¸ñµÄ freelists ÖС£
¡¡¡¡ Ðí¶àÐÂÊÖ¶ÔÓÚÒ»¸ö¿éÖØлص½ freelists ºóµÄ´¦Àí¶¼ÓÐЩÎó½â¡£Æäʵ£¬Ò»µ©ÓÉÓÚÒ»¸öɾ³ýµÄ²Ù×÷¶øÁî¿é±»ÖØмÓÈëµ½ freelist ÖУ¬Ëü½«»áÒ»Ö±±£ÁôÔÚ freelist Öм´Ê¹¿Õ¼äµÄʹÓó¬¹ýÁË 60% £¬Ö»ÓÐÔÚµ½´ï pctfree ʱ²Å»á½«Êý¾Ý¿éÓÉ freelist ÖÐÒÆ×ß¡£
¡¡¡¡ ±í¸ñºÍË÷Òý´æ´¢²ÎÊýÉèÖõÄÒªÇó×ܽá
¡¡¡¡ ÒÔϵÄһЩ¹æÔòÊÇÓÃÀ´ÉèÖà freelists, freelist groups, pctfree ºÍ pctused ´æ´¢²ÎÊýµÄ¡£ÄãÒ²ÖªµÀ£¬ pctused ºÍ pctfree µÄÖµÊÇ¿ÉÒÔºÜÈÝÒ×µØͨ¹ý alter table ÃüÁîÐ޸ĵģ¬Ò»¸öºÃµÄ DBA Ó¦¸ÃÖªµÀÈçºÎÉèÖÃÕâЩ²ÎÊýµÄ×î¼ÑÖµ¡£
¡¡¡¡ ÓÐЧµØʹÓÿռäºÍ¸ßÐÔÄÜÖ®¼äÊÇÓÐì¶ÜµÄ£¬¶ø±í¸ñµÄ´æ´¢²ÎÊý¾ÍÊÇ¿ØÖÆÕâ¸ö·½ÃæµÄì¶Ü£º
. ¶ÔÓÚÐèÒªÓÐЧµØÖØÐÂʹÓÿռ䣬¿ÉÒÔÉèÖÃÒ»¸ö¸ßµÄ pctused Öµ£¬²»¹ý¸±×÷ÓÃÊÇÐèÒª¶îÍâµÄ I/O ¡£Ò»¸ö¸ßµÄ pctused ÖµÒâζ×ÅÏà¶ÔÂúµÄ¿é¶¼»á·Åµ½ freelist ÖС£Òò´Ë£¬ÕâЩ¿éÔÚÔÙ´ÎÂú֮ǰֻ¿ÉÒÔ½ÓÊܼ¸ÐмǼ£¬´Ó¶øµ¼Ö¸ü¶àµÄ I/O ¡£
. ×·Çó¸ßÐÔÄܵĻ°£¬¿ÉÒÔ½« pctused ÉèÖÃΪһ¸öµÍµÄÖµ£¬ÕâÒâζ×Å Oracle ²»»á½«Êý¾Ý¿é·Åµ½ freelists ÖÐÖ±µ½Ëü¼¸ºõÊǿյġ£ÄÇô¿é½«¿ÉÒÔÔÚÂú֮ǰ½ÓÊÕ¸ü¶àµÄÐУ¬Òò´Ë¿ÉÒÔ¼õÉÙ²åÈë²Ù×÷µÄ I/O ¡£Òª¼Çס Oracle À©Õ¹Ð¿éµÄÐÔÄÜÒª±ÈÖØÐÂʹÓÃÏÖÓеĿé¸ß¡£¶ÔÓÚ Oracle À´Ëµ£¬À©Õ¹Ò»¸ö±í±È¹ÜÀí freelists ÏûºÄ¸üÉÙµÄ×ÊÔ´¡£
¡¡¡¡ ÈÃÎÒÃÇÀ´»Ø¹ËÒ»ÏÂÉèÖöÔÏó´æ´¢²ÎÊýµÄһЩ³£¼û¹æÔò£º
¡¡¡¡ £®¾³£½« pctused ÉèÖÃΪ¿ÉÒÔ½ÓÊÕÒ»ÌõÐÂÐС£¶ÔÓÚ²»ÄܽÓÊÜÒ»ÐÐµÄ free blocks ¶ÔÓÚÎÒÃÇÀ´ËµÊÇûÓÐÓõġ£Èç¹ûÕâÑù×ö£¬½«»áÁî Oracle µÄÐÔÄܱäÂý£¬ÒòΪ Oracle ½«ÔÚÀ©Õ¹±íÀ´µÃµ½Ò»¸ö¿ÕµÄ¿é֮ǰ£¬Æóͼ¶ÁÈ¡ 5 ¸ö "dead" µÄ free block ¡£
¡¡¡¡ £®±í¸ñÖÐ chained rows µÄ³öÏÖÒâζ×Å pctfree Ì«µÍ»òÕßÊÇ db_block_size Ì«ÉÙ¡£ÔںܶàÇé¿öÏ£¬ RAW ºÍ LONG RAW Áж¼ºÜ¾Þ´ó£¬ÒÔÖÁ³¬¹ýÁË Oracle µÄ×î´ó¿éµÄ´óС£¬Õâʱ chained rows ÊDz»¿ÉÒÔ±ÜÃâµÄ¡£
¡¡¡¡ £®Èç¹ûÒ»¸ö±íÓÐͬʱ²åÈëµÄ SQL Óï¾ä£¬ÄÇôËüÐèÒªÓÐͬʱɾ³ýµÄÓï¾ä¡£ÔËÐе¥Ò»¸öÒ»¸öÇå³ýµÄ¹¤×÷½«»á°ÑÈ«²¿µÄ¿ÕÏпé·Åµ½Ò»¸ö freelist ÖУ¬¶øûÓÐÆäËü°üº¬ÓÐÈκοÕÏпéµÄ freelists ³öÏÖ¡£
¡¡¡¡ £® freelist ²ÎÊýÓ¦¸ÃÉèÖÃΪ±í¸ñͬʱ¸üеÄ×î´óÖµ¡£ÀýÈ磬Èç¹ûÔÚÈκÎʱºò£¬Ä³¸ö±í×î¶àÓÐ 20 ¸öÓû§Ö´ÐвåÈëµÄ²Ù×÷£¬ÄÇô¸Ã±íµÄ²ÎÊýÓ¦¸ÃÉèÖÃΪ freelists=20 ¡£
¡¡¡¡ Ó¦¼ÇסµÄÊÇ freelist groups ²ÎÊýµÄÖµÖ»ÊǶÔÓÚ Oracle Parallel Server ºÍ Real Application Clusters ²ÅÊÇÓÐÓõġ£¶ÔÓÚÕâÀà Oracle £¬ freelist groups Ó¦¸ÃÉèÖÃΪ·ÃÎʸñí¸ñµÄ Oracle Parallel Server ʵÀýµÄÊýÄ¿¡£