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