首頁  >  文章  >  資料庫  >  修改Innodb的資料頁大小以優化MySQL的方法實例詳解

修改Innodb的資料頁大小以優化MySQL的方法實例詳解

怪我咯
怪我咯原創
2017-07-05 11:22:291621瀏覽

這篇文章主要介紹了修改Innodb的資料頁大小以優化MySQL的方法,Innodb是MySQL下一個頗具人氣的資料引擎,需要的朋友可以參考下

我們知道Innodb的資料頁是16K,而且是一個硬性的規定,系統裡沒更改的辦法,希望將來MySQL也能也Oracle一樣支援多種資料頁的大小。
但實際應用中有時16K顯的有點大了,特別是很多業務在Oracle或是SQL SERVER運行的挺好的情況下遷到了MySQL上發現IO增長太明顯的情況下,
就會想到更改資料頁大小了。
  實際上innodb的資料頁大小也是可以更改的,只是需要在源碼層去更改,然後重新rebuild一下MySQL.
    更改方法:
    (以MySQL-5.1.38源碼為例)
    位置在storage/innobase/include/univ.i ,在univ.i中找出:UNIV_PAGE_SIZE

/*
  DATABASE VERSION CONTROL
  ========================
*/
 
/* The universal page size of the database */
#define UNIV_PAGE_SIZE     (2 * 8192) /* NOTE! Currently, this has to be a
   power of 2 */
/* The 2-logarithm of UNIV_PAGE_SIZE: */
#define UNIV_PAGE_SIZE_SHIFT 14
 
/* Maximum number of parallel threads in a parallelized operation */
#define UNIV_MAX_PARALLELISM 32

   UNIV_PAGE_SIZE就是資料頁大小,預設的是16K. 後面的備註裡標明,該值是可以設定必須為2的次方。對於該值可以設定成4k,8k,16k,32K,64K,在大也沒意義了。
同時更改了UNIV_PAGE_SIZE後需要更改UNIV_PAGE_SIZE_SHIFT 該值是2的多少次方為UNIV_PAGE_SIZE,所以設定資料頁分別情況如下:

#define UNIV_PAGE_SIZE_SHIFT 12 if UNIV_PAGE_SIZ=4K
#define UNIV_PAGE_SIZE_SHIFT 13 if UNIV_PAGE_SIZ=8K
#define UNIV_PAGE_SIZE_SHIFT 15 if UNIV_PAGE_SIZ=32K

範例:
 更改innodb的資料頁為8K,對應修改為:

/*
  DATABASE VERSION CONTROL
  ========================
*/
 
/* The universal page size of the database */
#define UNIV_PAGE_SIZE     8192  /* NOTE! Currently, this has to be a
   power of 2 */
/* The 2-logarithm of UNIV_PAGE_SIZE: */
#define UNIV_PAGE_SIZE_SHIFT 13
 
/* Maximum number of parallel threads in a parallelized operation */
#define UNIV_MAX_PARALLELISM 32

重新編譯,然後測試測試,再測試。 Good luck!

以上是修改Innodb的資料頁大小以優化MySQL的方法實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn