熱點塊問題中pctfree的設定

byfree發表於2008-04-30

一段時間前做了一個STATSPACK,發現cache buffers chains等待較多,通過對x$bh的查詢找到熱點物件。(ORACLE9208

SQL> select owner,object_name from dba_objects where data_object_id in (select obj from (select obj from x$bh order by tch desc) where rownum < 11);

OWNER                          OBJECT_NAME

------------------------------ --------------------

WWW                            FORUM_THREAD

WWW                            FUNCTIONS_INFO

WWW                            SYS_C003869

WWW                            SYS_C003120

現在只以FORUM_THREAD物件為例做調優。

先檢視FORUM_THREAD物件的塊分佈:

SQL> select file_id,extent_id,block_id,blocks from dba_extents where segment_name='FORUM_THREAD';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12          0      27441          8

        12          1      27449          8

        12          2      27457          8

        12          3      27465          8

        12          4      27473          8

        12          5      27481          8

        12          6      27489          8

        12          7      27497          8

        12          8      27505          8

        12          9      27513          8

        12         10      27521          8

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12         11      27529          8

        12         12      27537          8

        12         13      27545          8

        12         14      27553          8

        12         15      27561          8

        12         16      27657        128

        12         17      27785        128

        12         18      27913        128

        12         19      28041        128

        12         20      47497        128

        12         21      47625        128

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12         22      47753        128

        12         23      47881        128

        12         24      48009        128

        12         25      48137        128

        12         26      48265        128

        12         27      48393        128

        12         28      48521        128

        12         29      48649        128

        12         30      48777        128

        12         31      48905        128

        12         32      49033        128

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12         33      49161        128

        12         34      49289        128

        12         35      49417        128

        12         36      49545        128

已選擇37

以上資訊表示FORUM_THREAD物件在儲存在37extent中,由於此物件是一個表,我們再檢視錶的PCTFREE引數(表空間是非ASSM的)

SQL> select table_name,pct_free from dba_tables where table_name='FORUM_THREAD';

TABLE_NAME                       PCT_FREE

------------------------------ ----------

FORUM_THREAD                           10

PCTFREE引數為預設的10,對於我的系統訪問量來說這個值已經不合適,應該適當增大

SQL> alter table forum_thread pctfree 40;

PCTFREE修改為40之後,通過一段時間的觀察FORUM_THREAD物件仍然是排在前列的熱點物件,通過對dba_extents的檢視,資料分佈仍然與之前差不多,此時可判斷表的PCTFREE變化不影響已有塊的資料分佈。

通過對錶進行move操作重組storage(注意move操作不能線上做)

SQL> alter table forum_thread move;

SQL> select file_id,extent_id,block_id,blocks from dba_extents where segment_name='FORUM_THREAD';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12          0      27569          8

        12          1      27577          8

        12          2      27585          8

        12          3      27593          8

        12          4      47073          8

        12          5      47081          8

        12          6      47089          8

        12          7      47097          8

        12          8      47105          8

        12          9      49673          8

        12         10      49681          8

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12         11      49689          8

        12         12      49697          8

        12         13      49705          8

        12         14      49713          8

        12         15      49721          8

        12         16      49801        128

        12         17      49929        128

        12         18      50057        128

        12         19      50185        128

        12         20      50313        128

        12         21      50441        128

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12         22      50569        128

        12         23      50697        128

        12         24      50825        128

        12         25      50953        128

        12         26      51081        128

        12         27      51209        128

        12         28      51337        128

        12         29      51465        128

        12         30      51593        128

        12         31      51721        128

        12         32      51849        128

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12         33      51977        128

        12         34      52105        128

        12         35      52233        128

        12         36      52361        128

        12         37      52489        128

        12         38      52617        128

        12         39      52745        128

        12         40      52873        128

        12         41      53001        128

        12         42      53129        128

        12         43      53257        128

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

        12         44      53385        128

        12         45      53513        128

        12         46      53641        128

        12         47      53769        128

        12         48      53897        128

已選擇49

move表之後,可看到FORUM_THREAD物件被分佈到了49extent中了,資料分佈增大。

隨機選取某幾個資料塊,通過DUMP資訊的對比:

l         PCTFREE=10dump出的資料塊資訊片斷

SQL> alter system dump datafile 12 block 27458;

Start dump data blocks tsn: 14 file#: 12 minblk 27458 maxblk 27458

……

ntab=1

nrow=45

frre=-1

fsbo=0x6c

fseo=0x3b1

avsp=0x345

tosp=0x345

0xe:pti[0] nrow=45 offs=0

以上資訊中可看出27458資料塊中包含45行資料。

l         PCTFREE=40,且對錶做MOVE操作後,dump出的資料塊資訊片斷:

SQL> alter system dump datafile 12 block 27586;

Start dump data blocks tsn: 14 file#: 12 minblk 27586 maxblk 27586

……

ntab=1

nrow=7

frre=-1

fsbo=0x20

fseo=0xd87

avsp=0xd67

tosp=0xd67

0xe:pti[0] nrow=7   offs=0

以上資訊中可看出27586資料塊中包含7行資料。

對比資料塊匯出資訊,可看到在MOVE表之後一個塊包含的行數減小,資料得到了更大的分佈,從而在一定程度上減少了熱點塊問題發生。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17997/viewspace-257139/,如需轉載,請註明出處,否則將追究法律責任。

相關文章