《Mysql必讀修改Innodb的數據頁大小以優化MySQL的方法》要點:
本文介紹了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_SIZEMYSQL教程
?
MYSQL教程
/* 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,所以設置數據頁分別情況如下:MYSQL教程
?
MYSQL教程
#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,相應修改為:MYSQL教程
?
MYSQL教程
/* 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!
MYSQL教程
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5262.html