修改Innodb的數(shù)據(jù)頁(yè)大小以優(yōu)化MySQL的方法
我們知道Innodb的數(shù)據(jù)頁(yè)是16K,而且是一個(gè)硬性的規(guī)定,系統(tǒng)里沒(méi)更改的辦法,希望將來(lái)MySQL也能也Oracle一樣支持多種數(shù)據(jù)頁(yè)的大小。
但實(shí)際應(yīng)用中有時(shí)16K顯的有點(diǎn)大了,特別是很多業(yè)務(wù)在Oracle或是SQL SERVER運(yùn)行的挺好的情況下遷到了MySQL上發(fā)現(xiàn)IO增長(zhǎng)太明顯的情況下,
就會(huì)想到更改數(shù)據(jù)頁(yè)大小了。
實(shí)際上innodb的數(shù)據(jù)頁(yè)大小也是可以更改的,只是需要在源碼層去更改,然后重新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就是數(shù)據(jù)頁(yè)大小,默認(rèn)的是16K. 后面的備注里標(biāo)明,該值是可以設(shè)置必須為2的次方。對(duì)于該值可以設(shè)置成4k,8k,16k,32K,64K,在大也沒(méi)意義了。
同時(shí)更改了UNIV_PAGE_SIZE后需要更改 UNIV_PAGE_SIZE_SHIFT 該值是2的多少次方為UNIV_PAGE_SIZE,所以設(shè)置數(shù)據(jù)頁(yè)分別情況如下:
#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的數(shù)據(jù)頁(yè)為8K,相應(yīng)修改為:
/* 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
重新編譯,然后測(cè)試測(cè)試,再測(cè)試。Good luck!
- php頁(yè)面,mysql數(shù)據(jù)庫(kù)轉(zhuǎn)utf-8亂碼,utf-8編碼問(wèn)題總結(jié)
- 在MySQL中使用LIMIT進(jìn)行分頁(yè)的方法
- Spring MVC+MyBatis+MySQL實(shí)現(xiàn)分頁(yè)功能實(shí)例
- nodejs mysql 實(shí)現(xiàn)分頁(yè)的方法
- 詳解MySQL的limit用法和分頁(yè)查詢語(yǔ)句的性能分析
- php+mysql實(shí)現(xiàn)簡(jiǎn)單登錄注冊(cè)修改密碼網(wǎng)頁(yè)
- MySQL百萬(wàn)級(jí)數(shù)據(jù)分頁(yè)查詢優(yōu)化方案
- Mysql排序和分頁(yè)(order by&limit)及存在的坑
- MySQL百萬(wàn)級(jí)數(shù)據(jù)量分頁(yè)查詢方法及其優(yōu)化建議
- 淺談MySQL之淺入深出頁(yè)原理
相關(guān)文章
mysql 5.7.21 winx64免安裝版配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.21 winx64免安裝版配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法示例
這篇文章主要介紹了MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05MySQL內(nèi)連接和外連接及七種SQL?JOINS的實(shí)現(xiàn)
這篇文章主要介紹了Mysql內(nèi)連接和外連接的區(qū)別以及七種SQL?Joins的實(shí)現(xiàn),相信看完這篇文章你對(duì)SQL內(nèi)外連接的多表查詢就足夠理解了,需要的朋友可以參考下2023-03-03MySQL的Flush-List和臟頁(yè)的落盤機(jī)制
這篇文章主要介紹了MySQL的Flush-List和臟頁(yè)的落盤機(jī)制,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下2020-11-11mysql 海量數(shù)據(jù)的存儲(chǔ)和訪問(wèn)解決方案
數(shù)據(jù)庫(kù)水平切分的實(shí)現(xiàn)原理解析---分庫(kù),分表,主從,集群,負(fù)載均衡器2010-05-05MySQL中大數(shù)據(jù)表增加字段的實(shí)現(xiàn)思路
最近遇到的一個(gè)問(wèn)題,需要在一張將近1000萬(wàn)數(shù)據(jù)量的表中添加加一個(gè)字段,但是直接添加會(huì)導(dǎo)致mysql 奔潰,所以需要利用其他的方法進(jìn)行添加,這篇文章主要給大家介紹了MySQL中大數(shù)據(jù)表增加字段的實(shí)現(xiàn)思路,需要的朋友可以參考借鑒。2017-01-01