DBAORACLE

»¶Ó­À´µ½DBAORACLE>>¡¡¡¡ | Ê×Ò³ ×ÊÔ´ÖÐÐÄ | OracleÊý¾Ý¿â | ²Ù×÷ϵͳ | »³¾É¾­µä | ¾­¼Ãѧ | ÆäËû | С·É·É | ITPUBÂÛ̳

¹À¼Æ´´½¨Ë÷ÒýÐèÒªµÄÅÅÐò¿Õ¼äÊýÁ¿

·¢±íÈË:dbaoracle | ·¢±íʱ¼ä: 2005ÄêÎåÔÂ12ÈÕ, 16:58

±í T 3765888 rows  ×¼±¸ÔÚ2¸ö×Ö¶ÎÉϽ¨Á¢Ë÷Òý(object_type,object_name) £¬·ÖÎö¹ýºó´Óuser_tab_columnsÖлñµÃƽ¾ùÁг¤¶ÈµÄͳ¼ÆÐÅÏ¢

avg_row_len object_name 23 avg_row_len object_type 8

9iµÃutlxplsËäÈ»Äܹ»¹À¼Æ²éѯʹÓõÄÁÙʱ±í¿Õ¼ä£¬µ«ÊÇÈÔÈ»²»ÄܹÀ¼Æ´´½¨Ë÷ÒýËùÐèÒªµÄÁÙʱ±í¿Õ¼äÊýÁ¿£¬ÈçÏÂ

 SQL> explain plan for create index tidx on t(object_type,object_name) ;

Explained.

SQL> @C:oracleora92rdbmsadminutlxpls

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
----------------------------------------------------------------------
| Id  | Operation              |  Name       | Rows  | Bytes | Cost  |
----------------------------------------------------------------------
|   0 | CREATE INDEX STATEMENT |             |  3765K|   111M|  4975 |
|   1 |  INDEX BUILD NON UNIQUE| TIDX        |       |       |       |
|   2 |   SORT CREATE INDEX    |             |  3765K|   111M|       |
|   3 |    TABLE ACCESS FULL   | T           |  3765K|   111M|  4975 |
----------------------------------------------------------------------

 111M¾ÍÊÇoracle¸ù¾Ýavg_row_len ºÍ±íµÄnum_rows¼ÆËã¶øµÃ£»Èç¹ûʹÓÃselectÅÅÐò²Ù×÷£¬²âÊԵõ½µÄ½á¹ûÏÔÈ»¹ý´ó¡£

SQL> explain plan for select object_type,object_name from t order by object_type
,object_name;

Explained.

SQL> @c:oracleora92rdbmsadminutlxpls

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes |TempSpc| Cost  |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |  3765K|   111M|       | 26877 |
|   1 |  SORT ORDER BY       |             |  3765K|   111M|   288M| 26877 |
|   2 |   TABLE ACCESS FULL  | T           |  3765K|   111M|       |  4975 |
----------------------------------------------------------------------------

Note: cpu costing is off

SQL> select 288*1024/8 from dual;

288*1024/8
----------
     36864 ¸öblock,²»Çå³þcboÊÇʹÓöàÉÙsort_area_size¹À¼ÆµÄ288M,»òÐíÊÇmultiple merge sort pass

ʵ¼Ê²âÊÔ create index on t(object_type,object_name)ʹÓÃÁË24192¸öÁÙʱ±í¿Õ¼äblocks £¨v$sort_usage£©
Ë÷Òý´´½¨ºó£¬index segmentʹÓÃÁË 23424 blocks£¨ÊÜpctfreeÓ°Ï죩.ÇÒ´´½¨Ë÷ÒýÊÇÔÚ one merge pass sort Çé¿öÏ  (oracle9i¿ÉÒÔ´Óv$sesstatµÄworkarea%ͳ¼ÆÊý¾Ý²ì¿´).

  • °´ÕÕÿ¸öË÷ÒýÏ¶È44¼ÆËã 1+6+1+8+1+23+3= 44  20226 block¡£
    °´ÕÕÿ¸öË÷ÒýÏ¶È48¼ÆËã 2+6+2+8+2+23+4= 48  22065 block¡£

¸Ð¾õ»¹±È½Ï½Ó½ü¡£±£Ö¤20%»òÕß30%µÄ×ÔÓÉÁÙʱ¿Õ¼ä¾Í¿ÉÒÔÁË



  • ÀíÂÛÖ§³Ö

´´½¨´óË÷ÒýµÄʱºò£¬±£Ö¤sort_area_size×ã¹»´ó£¬Ê¹ÅÅÐò²Ù×÷Ö»ÐèÒªone merge pass sort¡£ÎÒÒ»°ã¶¼ÉèÖü¸°ÙMµ½¼¸G.²»¹ýÉèÖÃÌ«´ó£¬¿ÉÄÜ»áÓö¼ûpga sort-heap allocateµÄ´íÎó£¬Óö¼û¹ý£¬»¹²»ÖªµÀΪºÎ£¬¿ÉÄÜÊÇ32bitµÄÏÞÖÆ¡£

one merge pass sortÇé¿öÏ£¬ÐèÒªµÄÁÙʱ±í¿Õ¼äµÄÊýÁ¿¾ÍÊDzÎÓëÅÅÐòµÄÊý¾ÝÔ´´óС¡£Òò´Ë´´½¨Ë÷ÒýµÄʱºò£¬Òª²ÎÓëÅÅÐòµÄÊý¾ÝÔ´°üÀ¨ËùÓÐÒªË÷ÒýµÄÁкÍrowid,»¹ÓÐÿ¸öÁеij¤¶È£¬»¹ÓÐindex entry header. µ«ÎÒ»¹²»¿Ï¶¨column lengthÊÇÕ¼1bytes»¹ÊÇ2bytes£»index entry headerÊÇ2£¬3 or 4 bytes£¿

ÏȼÆËãÿ¸öindex entryµÄ×ܳ¤¶È

   ÿ¸öindexed columnµÄƽ¾ù³¤¶È+2*Ë÷ÒýÁÒµÄÊýÄ¿+rowid³¤¶È£¨6 for non-partition 10 for partition£©+rowid column length(maybe 1 or 2)+index header length(  3 or 4 bytes which I'm not sure)

ÕÛºÏΪ½üËÆ4µÄÕûÊý¡£  ½«¼ÆËãµÄƽ¾ùË÷ÒýÏ¶È* num_rows (*_tables)£¬¾Í¿ÉÒÔ¹À¼Æ³öÐèҪʹÓõÄÁÙʱ±í¿Õ¼ä£¨Ëü²¢²»ÊÜË÷Òýpctfree²ÎÊýÓ°Ï죩¡£

ÄÚ´æÅÅÐòµÄʱºò£¬Ã¿¸öblock¿ÏÄÜ»áÓÐ60×Ö½ÚµÄÀË·Ñ(here are  some bytes waste in block during  sort,maybe 60 bytes per block).µ«²»»á¶Ô¹À¼ÆµÄ½á¹ûÓдóµÄÓ°Ïì¡£ ×îºÃ±£Ö¤Êµ¼Ê¿ÉÓõÄÁÙʱ±í¿Õ¼ä´óС±ÈÎÒÃǹÀ¼ÆµÄ´ó20%»ò30%£¬²»È»³öÏÖunable to extend sort segment in TEMPµÄ´íÎó¿É¾ÍÀË·Ñʱ¼äÁË¡£

²Î¿¼ http://groups-beta.google.com/group/comp.databases.oracle.server/browse_frm/thread/2b44c7c9ee47e528/8cd7604f6a6c3943?tvc=1&hl=en&

Óм¸¸öÎÊÌâÇë½Ì [»Ø¸´]

1¡¢Êµ¼Ê²âÊÔ create index on t(object_type,object_name)ʹÓÃÁË24192¸öÁÙʱ±í¿Õ¼äblocks £¨v$sort_usage£©

ÎÊ£ºÕâÀïµÄ¡±24192¸öÁÙʱ±í¿Õ¼äblocks¡°ÊÇÈçºÎ»ñÈ¡´ËÊý¾ÝµÄ£¿ÊÇ´Óv$sort_usage
ÊÓͼÖеõ½µÄÂ𣿠Çë˵Ã÷²Ù×÷²½Öè¡£

2¡¢index segmentʹÓÃÁË 23424 blocks£¨ÊÜpctfreeÓ°Ï죩.ÇÒ´´½¨Ë÷ÒýÊÇÔÚ one merge pass sort Çé¿öÏ (oracle9i¿ÉÒÔ´Óv$sesstatµÄworkarea%ͳ¼ÆÊý¾Ý²ì¿´).

ÎÊ£º¡±oracle9i¿ÉÒÔ´Óv$sesstatµÄworkarea%ͳ¼ÆÊý¾Ý²ì¿´¡° ÊÇÕâÑù¼ÆËãµÃÀ´µÄ
Â𣿣º select sum(value) from v$sesstat a,v$statname b where a.statstic#=b.statstic# and a.sid="??" and name like workarea%£»

3¡¢Õâ¶Î»°£º´´½¨´óË÷ÒýµÄʱºò£¬±£Ö¤sort_area_size×ã¹»´ó£¬Ê¹ÅÅÐò²Ù×÷Ö»ÐèÒªone merge pass sort¡£ÎÒÒ»°ã¶¼ÉèÖü¸°ÙMµ½¼¸G.²»¹ýÉèÖÃÌ«´ó£¬¿ÉÄÜ»áÓö¼ûpga sort-heap allocateµÄ´íÎó£¬

9IÀï²»ÊÇʹÓÃpga_aggregate_size À´¸øÅÅÐò¼ÆËã·ÖÅäÄÚ´æ¿Õ¼äÁËÂð£¿Ôõô»¹
ʹÓÃsort_area_size²ÎÊý£¿

ZALBB | 18/05/2005, 19:59

[»Ø¸´]

1 ¸ú×Ùv$sort_usage;½¨Á¢Ë÷ÒýÐèÒª3¸ö²½Öè:Ô´Êý¾ÝɨÃ裬ÅÅÐò£¬Ð´Ë÷Òý¶Î£»Òò´ËÔÚдË÷Òý¶ÎµÄʱºò£¬v$sort_usageÖеÄblocks¼Í¼»¹²»»áÏûʧ

2Õâ¸öÊÇ9i²ÅÓеIJÎÊýv$statname£»8iÏÂÎÒ²»Çå³þÔõô²ì¿´
workarea executions - optimal ±íʾÍêÈ«ÊÇÄÚ´æÅÅÐò
workarea executions - onepass ±íʾÅÅÐòÔÚone pass merge sortÄÚ½áÊø
workarea executions - multipass ±íʾÅÅÐòÔÚ¶à¸ömerge sortÄÚ½áÊø
optimalºÍonepassÅÅÐòÊÇ×îºÃ/½ÏºÃµÄ£»Òª±ÜÃâmultipass ÅÅÐò

3ÎÒÃÇÕâÀïʹÓõÄÊÇ8i; ²»¹ý9iĬÈÏ pga_aggregate_size Ϊÿ¸ösessionÖ¸¶¨pgaµÄÓиöÏÞÖÆ max£¨100M,5%*pga_aggregate_size )£» ĬÈÏÖµÓÐʱºòÓ¦¸Ã»¹²»¹»£¬ÐèÒªÊÖ¹¤¼Ó´ó

ÓñÃæ·ÉÁú | 20/05/2005, 01:01

·¢±íÆÀÂÛ

±êÌâ

ÔÚ´ËÌí¼ÓÆÀÂÛ

³Æºô

ÓÊÏ䵨ַ£¨¿ÉÑ¡£©

¸öÈËÖ÷Ò³£¨¿ÉÑ¡£©


authimage



Valid XHTML 1.0 Strict and CSS. Powered by pLog
Design by Blog.lvwo.com