MySQL參數最佳化---Table Cache

來源:互聯網
上載者:User

 The Table Cache


--------------------------------------------------------------------------------
表緩衝的對象:表

      每個在緩衝中的對象 包含相關表 .frm檔案的解析結果,加上一些其它的資料。

      準確地說,在對象裡的其它資料的內容依賴於表的儲存引擎。例如:

      MyISAM,是表的資料和索引的檔案描述符。

      Merge, 可能是多個檔案描述符,因為Merge表可以有很多的底層表。


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

表緩衝特性:資源重用

      例如:

      當一個查詢請求訪問一張MyISAM表, MySQL 也許可以從緩衝的對象中擷取到檔案描述符。儘管這樣做可以避免開啟一個檔案描述符的開銷,但這個開銷其實並不大。開啟和關閉檔案描述符在本機存放區是很快的,伺服器可以輕鬆地完成每秒100萬次的操作。對MyISAM表來說,表緩衝的真正好處是:可以讓伺服器避免修改MyISAM檔案頭來標記表“正在使用中”。


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

表緩衝-->InnoDB

      表緩衝的設計是伺服器和儲存引擎之間分離不徹底的產物,屬於曆史問題。表緩衝對InnoDB重要性就小多了,因為InnoDB不依賴它來做那麼多的事(例如持有檔案描述符,InnoDB有自己的表緩衝版本)。儘管如此,InnoDB也能從緩衝解析的.frm檔案中獲益。


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

Table Cache 參數的演變

      在MySQL 5.1版本中及之後的版本,表緩衝分離成兩部分:

                一個是開啟表的緩衝  ---> table_open_cache

                一個是表定義的緩衝  ---> table_definition_cache

      其結果是,表定義(解析.frm檔案的結果)從其它資源中分離出來了,例如表描述符。開啟的表依然是每個線程,每個表用的,但是表定義是全域的,可以被所有串連有效地共用。

通常可以把table_definition_cache 設定得足夠高,以緩衝所有的表定義。除非有上萬張表,否則這可能是最簡單的方法。


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

參數的簡介:

Variable Name          Variable Scope    Dynamic Variable

table_open_cache          Global          Yes

table_definition_cache    Global          Yes

其中table_definition_cache預設值為400,取值範圍400-524288


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

判斷參數是否需調整

      如果Opened_tables狀態變數很大或者在增長,可能是因為表緩衝不夠大,那麼可以人為增加table_cache系統變數(或者是MySQL 5.1 中的table_open_cache)。然而,當建立和刪除暫存資料表時,要注意這個計數器的增長,如果經常需要建立和刪除暫存資料表,那麼該計數器就會不停地增長。www.bkjia.com

mysql> show status like 'Opened_files';

+---------------+------------+

| Variable_name | Value      |

+---------------+------------+

| Opened_files  | 1170770489 |

+---------------+------------+

 

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

Table Cache 設定過大的缺點

      把表緩衝設定過大的缺點:當伺服器有很多的MyISAM表時,可能會導致關機時間較長,因為關機前索引塊必須完成重新整理,表都必須標記為不再開啟。同樣的原因,也可能使FLUSH TABLES WITH READ LOCK操作花費很長一段時間。


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

Table Cache 總結:
      表緩衝實際上用的記憶體並不多,相反卻可以有效節約資源。雖然開啟一個新的表,相對於其他MySQL操作來說代價不算高,但它們的開銷是累加的。所以緩衝表有時可以提升效率。

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

個人感覺:

      對於,線上資料庫大多是MyISAM儲存引擎,應相應將table_open_cache的值調大些。

      至於table_definition_cache, 看資料庫的table容量。

 

特此說明:個人感覺,純屬自己的觀點,自己的理解,僅供參考。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.