MySQL專用服務(wù)器自動(dòng)配置參數(shù)的實(shí)現(xiàn)
MySQL8.0推出了專用數(shù)據(jù)庫(kù)服務(wù)器自動(dòng)配置參數(shù),通過(guò)打開innodb_dedicated_server,數(shù)據(jù)庫(kù)會(huì)自己完成緩沖池大小,重做日志,磁盤刷新方式等一系列配置,且配置還會(huì)根據(jù)服務(wù)器的配置升級(jí)自行調(diào)整。
一、打開參數(shù)
需要注意的是innodb_dedicated_server只能在數(shù)據(jù)庫(kù)專用服務(wù)器上打開,因?yàn)榇蜷_此參數(shù)MySQL會(huì)盡可能多的使用服務(wù)器資源。如果服務(wù)器上還運(yùn)行了其他應(yīng)用,則不推薦打開此參數(shù)。
innodb_dedicated_server是一個(gè)靜態(tài)參數(shù),我們需要通過(guò)配置文件來(lái)開打此特性,在my.cnf的[mysqld]或[server]模塊下添加下面參數(shù)后重啟mysqld,重啟后確認(rèn)參數(shù)是否打開:
innodb_dedicated_server = on;

此參數(shù)打開后,每次重啟MySQL都會(huì)評(píng)估服務(wù)器配置,服務(wù)器升級(jí)后,相關(guān)配置也會(huì)相應(yīng)升級(jí)。
二、參數(shù)自動(dòng)配置內(nèi)容
打開innodb_dedicated_server后,MySQL會(huì)自動(dòng)配置下列參數(shù):
- innodb_buffer_pool_size
- innodb_log_file_size, innodb_log_files_in_group(MySQL8.0.30后廢棄)
- innodb_redo_log_capacity(替代上面2個(gè)參數(shù))
- innodb_flush_method
2.1 innodb_buffer_pool_size
innodb_buffer_pool_size是緩沖池的大小,這是MySQL最關(guān)鍵的參數(shù)之一,buffer pool緩存了數(shù)據(jù),索引等對(duì)象,足夠的大的緩沖池意味著可以緩存更多的內(nèi)容,避免數(shù)據(jù)頻繁被刷回磁盤。在打開innodb_dedicated_server參數(shù)的情況下,MySQL按照下面的規(guī)則計(jì)算緩沖池大?。?/p>
| 服務(wù)器內(nèi)存 | 緩沖池大小 |
|---|---|
| 小于1G | 128M(默認(rèn)值) |
| 1G到4G | 服務(wù)器內(nèi)存 * 50% |
| 4G以上 | 服務(wù)器內(nèi)存 * 75% |
注意:如果參數(shù)innodb_buffer_pool_size和innodb_dedicated_server同時(shí)配置,那么MySQL會(huì)按照innodb_buffer_pool_size配置buffer pool的大小,即buffer pool自動(dòng)配置會(huì)失效。這里我的服務(wù)器內(nèi)存是4G,按照自動(dòng)配置應(yīng)該是4G*0.5=2G,但啟動(dòng)后buffer pool依然是1G:


將參數(shù)innodb_buffer_pool_size注銷后,重啟MySQL,可以看到buffer pool的大小變成了2G,自動(dòng)配置成功:


2.2 innodb_log_file_size 和 innodb_log_files_in_group
innodb_log_file_size控制的是innodb重做日志的大小,它會(huì)根據(jù)自動(dòng)配置規(guī)則計(jì)算出的緩沖池大小進(jìn)行配置(不是顯式指定的innodb_buffer_pool_size值),配置規(guī)則如下(MySQL8.0.30后廢棄):
| 緩沖池大小 | 重做日志大小 |
|---|---|
| 小于8G | 512M |
| 8G到128G | 1G |
| 大于128G | 2G |
innodb_log_files_in_group控制innodb重做日志的數(shù)量,它也是根據(jù)自動(dòng)配置規(guī)則計(jì)算出的緩沖池的大小進(jìn)行配置,采用round(緩沖池的GB數(shù))計(jì)算,最小值為2,配置規(guī)則如下(MySQL8.0.30后廢棄):
| 緩沖池大小 | 重做日志數(shù)量(緩沖池大小單位為G) |
|---|---|
| 小于8G | round(緩沖池大小) |
| 8G到128G | round(緩沖池大小*0.75) |
| 大于128G | 64 |
2.3 innodb_redo_log_capacity
inodb_redo_log_capacity配置重做日志文件可以占用的磁盤大小,這個(gè)參數(shù)是innodb_log_file_size和innodb_log_files_in_group的替代,默認(rèn)的配置規(guī)則是:
- 當(dāng)inodb_redo_log_capacity顯式配置時(shí),參數(shù)innodb_log_file_size和innodb_log_files_in_group將被忽略。
- 當(dāng)inodb_redo_log_capacity未顯式配置時(shí),將使用innodb_log_file_size*innodb_log_files_in_group的值作為其配置。
當(dāng)打開innodb_dedicated_server后,此參數(shù)計(jì)算規(guī)則在某些情況下會(huì)同時(shí)受到"服務(wù)器內(nèi)存"和"緩沖池是否顯式配置(innodb_buffer_pool_size)"2個(gè)因素影響,計(jì)算規(guī)則如下:
| 服務(wù)器內(nèi)存 | 緩沖池 | innodb_redo_log_capacity(表內(nèi)服務(wù)器內(nèi)存大小單位為G) |
|---|---|---|
| 小于2G | 無(wú)影響 | 100M |
| 2G到4G | 未顯式配置 | 1G |
| 2G到4G | 顯式配置 | round(0.5*服務(wù)器內(nèi)存大小)*0.5G |
| 4G到10.66G | 無(wú)影響 | round(0.75*服務(wù)器內(nèi)存大小)*0.5G |
| 10.66G170.66G | 無(wú)影響 | round(0.5625*服務(wù)器內(nèi)存大小)*1G |
| 170.66G以上 | 無(wú)影響 | 128G |
2.4 innodb_flush_method
innodb_fulsh_method控制的是MySQL的數(shù)據(jù)文件和日志文件寫磁盤的方式,默認(rèn)值為fsync,即每次寫磁盤實(shí)際寫入的是操作系統(tǒng)緩存,后續(xù)需要操作系統(tǒng)調(diào)用fsync才會(huì)真正將數(shù)據(jù)寫到磁盤上(innodb_flush_log_at_trx_commit=1這個(gè)經(jīng)常推薦的安全設(shè)置就是事務(wù)提交時(shí)將日志寫入操作系統(tǒng)緩存后立刻調(diào)用sync寫入磁盤,防止系統(tǒng)崩潰導(dǎo)致事務(wù)丟失),而MySQL的buffer pool和redo log buffer已經(jīng)實(shí)現(xiàn)了緩存,沒必要經(jīng)過(guò)操作系統(tǒng)再緩存一次(反正都在內(nèi)存中,斷電都會(huì)丟失,寫來(lái)寫去沒有意義)。
而打開innodb_dedicated_server后,innodb_flush_method會(huì)被嘗試設(shè)置為o_direct_no_fsync,數(shù)據(jù)文件和日志文件會(huì)忽略操作系統(tǒng)緩存直接寫磁盤文件并忽略fsync調(diào)用。如果設(shè)置不成功則會(huì)保持默認(rèn)值。
show variables like 'innodb_flush_method';

innodb_dedicated_server可以自動(dòng)完成數(shù)據(jù)庫(kù)的部分參數(shù)配置,并且可以做到隨服務(wù)器升級(jí)自動(dòng)升級(jí)。簡(jiǎn)化了DBA的調(diào)試工作,在專有服務(wù)器上,還是推薦打開此參數(shù)(MySQL在參數(shù)的自適應(yīng)調(diào)整上越來(lái)越像Oracle了)。
到此這篇關(guān)于MySQL專用服務(wù)器自動(dòng)配置參數(shù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL服務(wù)器自動(dòng)配置參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
安裝配置Zabbix來(lái)監(jiān)控MySQL的基本教程
這篇文章主要介紹了安裝配置Zabbix來(lái)監(jiān)控MySQL的基本教程,Zabbix擁有web頁(yè)面端顯示數(shù)據(jù)的功能,文中的安裝環(huán)境為CentOS系統(tǒng),需要的朋友可以參考下2015-12-12
MySQL中Delete和Truncate區(qū)別及使用說(shuō)明
article summary:MySQL中,DELETE和TRUNCATE都是清空表數(shù)據(jù)的語(yǔ)句,但它們?cè)谥С謼l件刪除、自增列重置、執(zhí)行速度、操作類型、空間釋放和回滾支持等方面存在顯著差異2026-03-03
MYSQL 數(shù)據(jù)庫(kù)命名與設(shè)計(jì)規(guī)范
對(duì)于MYSQL 數(shù)據(jù)庫(kù)的命名與設(shè)計(jì),需要一定的規(guī)范,所以我們要了解和快速的掌握mysql有很多的幫助。2008-12-12
MySQL修改innodb_data_file_path參數(shù)的一些注意事項(xiàng)
這篇文章主要給大家介紹了關(guān)于MySQL修改innodb_data_file_path參數(shù)的一些注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
MySQL中使用PROFILING來(lái)查看SQL執(zhí)行流程的實(shí)現(xiàn)步驟
在MySQL中,PROFILING功能提供了一種方式來(lái)分析SQL語(yǔ)句的執(zhí)行時(shí)間,包括查詢執(zhí)行的各個(gè)階段,如發(fā)送、解析、優(yōu)化、執(zhí)行等,這對(duì)于診斷性能問(wèn)題非常有用,本文給大家介紹了MySQL中使用PROFILING來(lái)查看SQL執(zhí)行流程的實(shí)現(xiàn)步驟,需要的朋友可以參考下2024-07-07
mysql 8.0.16 winx64.zip安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 8.0.16 winx64.zip安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

