我們知道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
12345678910111213
/* database
version control ********************====*/
/* the universal page size
ofthe 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,所以設定資料頁分別情況如下:
123#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,相應修改為:
12345678910111213
/* database
version control ********************====*/
/* the universal page size
ofthe 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的方法
我們知道innodb的資料頁是16k,而且是乙個硬性的規定,系統裡沒更改的辦法,希望將來mysql也能也oracle一樣支援多種資料頁的大小。但實際應用中有時16k顯的有點大了,特別是很多業務在oracle或是sql server執行的挺好的情況下遷到了mysql上發現io增長太明顯的情況下,就會想...
InnoDB資料頁結構
file header 檔案頭 page header 頁頭 infimun和supermum records user records 使用者記錄,即行記錄 free space 空閒空間 page directory 頁目錄 file trailer 檔案結尾資訊 file header pag...
Mysql資料讀取方式以及InnoDb頁儲存
將資料劃分為若干個頁,以頁作為磁碟和記憶體之間互動的基本單位,inoodb中頁的大小為16kb,一般情況下一次最少讀取16kb到記憶體中並重新整理到磁碟。1頁中至少存放兩行記錄 mysql表中行儲存資料分四種 compact redundant dynamic和compressed行格式。儲存結構類...