MySQL數據庫服務器端核心參數詳解和推薦配置之一
0
MySQL手冊上也有服務器端參數的解釋,以及參數值的相關說明信息,現針對我們大家重點需要注意、需要修改或影響性能的服務器端參數,作其用處的解釋和
如何配置參數值的推薦,此事情拖了不少時間,為方便大家幫忙糾錯(注:總是斷斷續續寫的,可能存在筆誤),先以文章的方式發布到網站,后續確定沒問題,將
會通過新浪微博的微盤提供PPT下載,方便學習和參考。
l lower_case_table_names
Linux或類Unix平臺,對文件名稱大小寫敏感,也即對數據庫、表、存儲過程等對象名稱大小寫敏 感,為減少開發人員的開發成本,為此推薦大家設置該參數使對象名稱都自動轉換成小寫;
l max_connect_errors
max_connect_errors默認值為10,也即mysqld線程沒重新啟動過,一臺物理服務器只要連接 異常中斷累計超過10次,就再也無法連接上mysqld服務,為此建議大家設置此值至少大于等于10W; 若異常中斷累計超過參數設置的值,有二種解決辦法,執行命令:FLUSH HOSTS;或者重新啟動mysqld服務;
l interactive_timeout and wait_timeout
u interactive_timeout
處于交互狀態連接的活動被服務器端強制關閉,而等待的時間,單位:秒;
u wait_timeout
與服務器端無交互狀態的連接,直到被服務器端強制關閉而等待的時間,此參數只對基于TCP/IP或基于 Socket通信協議建立的連接才有效,單位:秒;
u 推薦設置
interactive_timeout = 172800
wait_timeout = 172800
l transaction-isolation and binlog-format
u transaction-isolation
可供設置的值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、
SERIALIZABLE,默認的值為: REPEATABLE-READ,事務隔離級別設置的不同,對二進制日志登記格
式影響非常大,詳細信息可見文章解讀MySQL事務的隔離級別和日志登記模式選擇技巧;
u binlog-format
復制的模式,可供設置的值:STATEMENT、ROW、MIXED(注:5.0.*只有命令行式復制),
5.1.*版本默認設置:MIXED;
u 推薦配置
① 只讀為主的業務應用場景
transaction-isolation = read-committed
binlog-format = mixed #5.1.*版本,5.0.*只能設置為 statement
① 非只讀為主的業務應用場景
transaction-isolation = repeatabled-read
binlog-format = mixed #5.1.*版本,5.0.*只能設置為 statement
l event_scheduler
事務調度默認是關閉狀態,也推薦源碼編譯的版本可不編譯進來,以及實際生產環境保持默認禁用 狀態,當真正需要用的時候,可以臨時打開,命令:SET GLOBAL event_scheduler=1;
l skip_external_locking
外部鎖,也即操作系統所實施的鎖,只對MyISAM引擎有效,且容易造成死鎖發生,為此我們一律禁用;
l innodb_adaptive_hash_index
InnoDB引擎會根據數據的訪問頻繁度,把表的數據逐漸緩到內存,若是一張表的數據大量緩存在 內存中,則使用散列索引(注:Hash Index)會更高效。InnoDB內有Hash Index機制,監控數據的訪 問情況,可以自動創建和維護一個Hash Index,以提供訪問效率,減少內存的使用;
l innodb_max_dirty_pages_pct
InnoDB主線程直接更新Innodb_buffer_pool_size中存在的數據,并且不實時刷回磁盤,而是等待 相關的處罰事件發生,則允許緩存空間的數據量不實時刷回磁盤的最大百分比。比例設置較小,有利于 減少mysqld服務出現問題的時候恢復時間,缺點則是需要更多的物理I/O,為此我們必須根據業務特點 和可承受范圍進行一個折中,一般范圍建議設置為5%~90%,像我們SNS游戲行業的寫非常厲害,綜合 各方面因素,設置為20%;
l lower_case_table_names
Linux或類Unix平臺,對文件名稱大小寫敏感,也即對數據庫、表、存儲過程等對象名稱大小寫敏 感,為減少開發人員的開發成本,為此推薦大家設置該參數使對象名稱都自動轉換成小寫;
l max_connect_errors
max_connect_errors默認值為10,也即mysqld線程沒重新啟動過,一臺物理服務器只要連接 異常中斷累計超過10次,就再也無法連接上mysqld服務,為此建議大家設置此值至少大于等于10W; 若異常中斷累計超過參數設置的值,有二種解決辦法,執行命令:FLUSH HOSTS;或者重新啟動mysqld服務;
l interactive_timeout and wait_timeout
u interactive_timeout
處于交互狀態連接的活動被服務器端強制關閉,而等待的時間,單位:秒;
u wait_timeout
與服務器端無交互狀態的連接,直到被服務器端強制關閉而等待的時間,此參數只對基于TCP/IP或基于 Socket通信協議建立的連接才有效,單位:秒;
u 推薦設置
interactive_timeout = 172800
wait_timeout = 172800
l transaction-isolation and binlog-format
u transaction-isolation
可供設置的值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、
SERIALIZABLE,默認的值為: REPEATABLE-READ,事務隔離級別設置的不同,對二進制日志登記格
式影響非常大,詳細信息可見文章解讀MySQL事務的隔離級別和日志登記模式選擇技巧;
u binlog-format
復制的模式,可供設置的值:STATEMENT、ROW、MIXED(注:5.0.*只有命令行式復制),
5.1.*版本默認設置:MIXED;
u 推薦配置
① 只讀為主的業務應用場景
transaction-isolation = read-committed
binlog-format = mixed #5.1.*版本,5.0.*只能設置為 statement
① 非只讀為主的業務應用場景
transaction-isolation = repeatabled-read
binlog-format = mixed #5.1.*版本,5.0.*只能設置為 statement
l event_scheduler
事務調度默認是關閉狀態,也推薦源碼編譯的版本可不編譯進來,以及實際生產環境保持默認禁用 狀態,當真正需要用的時候,可以臨時打開,命令:SET GLOBAL event_scheduler=1;
l skip_external_locking
外部鎖,也即操作系統所實施的鎖,只對MyISAM引擎有效,且容易造成死鎖發生,為此我們一律禁用;
l innodb_adaptive_hash_index
InnoDB引擎會根據數據的訪問頻繁度,把表的數據逐漸緩到內存,若是一張表的數據大量緩存在 內存中,則使用散列索引(注:Hash Index)會更高效。InnoDB內有Hash Index機制,監控數據的訪 問情況,可以自動創建和維護一個Hash Index,以提供訪問效率,減少內存的使用;
l innodb_max_dirty_pages_pct
InnoDB主線程直接更新Innodb_buffer_pool_size中存在的數據,并且不實時刷回磁盤,而是等待 相關的處罰事件發生,則允許緩存空間的數據量不實時刷回磁盤的最大百分比。比例設置較小,有利于 減少mysqld服務出現問題的時候恢復時間,缺點則是需要更多的物理I/O,為此我們必須根據業務特點 和可承受范圍進行一個折中,一般范圍建議設置為5%~90%,像我們SNS游戲行業的寫非常厲害,綜合 各方面因素,設置為20%;