MYSQL學(xué)習(xí)總結(jié)(六):my.cnf 各參數(shù)配置及根據(jù)狀態(tài)優(yōu)化

#這里只說[mysqld]部分
? datadir = /data/mysql ? //mysql的數(shù)據(jù)目錄
? skip-locking ? ? ? ? ?//減少出錯(cuò)機(jī)率
? key_buffer = 384m ? ?//索引緩沖區(qū)大小,后面會(huì)詳細(xì)講如何設(shè)置
? max_allowed_packet = 1m //網(wǎng)絡(luò)傳輸中一次消息傳輸量的最大值
? table_cache = 512 ? ?//表緩沖區(qū)大小
? sort_buffer_size = 2m //查詢排序時(shí),緩沖區(qū)大小,后面會(huì)詳細(xì)講
? read_buffer_size=2m//查詢操作所能使用的緩沖區(qū)大小
? read_rnd_buffer_size = 8m //隨機(jī)查詢操作所能作用的內(nèi)存大小
? myisam_sort_buffer_size=64m //myisam表發(fā)生變化時(shí)重新排序所需的緩沖
? thread_cache_size = 8m //設(shè)置tread cache池中可以緩存的連接線程最大數(shù)量,內(nèi)存4g以上配64或更大的值
? query_cache_size = 32m //查詢緩沖區(qū)大小
? thread_concurrency = 8 //設(shè)置為邏輯服務(wù)器數(shù)量*2
? thread_stack = 256k //mysql每個(gè)線程的堆棧大小,默認(rèn)值夠大,當(dāng)出現(xiàn)error:1436 thread stack overrun時(shí),可提高該值
? skip-name-resolve ?//最好加上,去除連接過來的機(jī)器的dns解析,常出現(xiàn)error:2013是由這個(gè)引起
? log-bin=mysql-bin //打開二進(jìn)制日志
?log-slow-queries = /usr/local/mysql/var/slowquery.log //打開慢查詢?nèi)罩荆梢耘袛嗄男┎樵兂瑫r(shí),及哪些沒有索引的查詢。慢查詢時(shí)間默認(rèn)是5秒,超過5秒的查詢被記錄下來。可以使用set long_query_time = 2來設(shè)置慢查詢時(shí)間,同時(shí)也可使用mysqldumpslow對(duì)慢查詢?nèi)罩具M(jìn)行分析,如:分析出訪問次數(shù)最多的20次語句,mysqldumpslow –s c –t 20 /usr/local/mysql/var/slowquery.log

#通過查看mysql狀態(tài),來修改各參數(shù)的值

#查看mysql狀態(tài)主要使用show命令,一般查系統(tǒng)狀態(tài),及變量參數(shù)的值
? 如:查看目前系統(tǒng)有多少慢查詢?nèi)罩?br />? ? ?show global status like “%slow%”; ? //可以得出慢查詢條數(shù) slow_queries
? ? ? 查看目前慢查詢?cè)O(shè)置情況
? ? ?show variables like “%slow%”; ? ? //可以得出slow_launch_time?
#設(shè)置max_connections的值及查看
? ? ?show variables like “max_connections”;
? ? ?show global status like “max_used_connections”;
? ?若 max_used_connections 快接近max_connections值,則需要增大max_connections值。set max_connections = 256 (重啟后失效,最好寫進(jìn)my.cnf中)

? ?#設(shè)置key_buffer_size的值
? ? ? ?show global status like ”key_read%”; ?//查看key_buffer_size的使用情況
? ? ? ? ??
? ? ? ? ?計(jì)算公式:key_reads/ key_read_requests

? ?#查看進(jìn)程使用情況
show global status like “thread%”;
?
如果threads_created過大的話,說明mysql服務(wù)器一直在創(chuàng)建線程,這時(shí)可調(diào)整thread_cache_size的值。

#查看查詢緩存(qurey_cache_size)設(shè)置情況
? show global status like “qcache%”;
? ?
show variables like “query_cache%”; ? ?//查看query_cache配置情況
? ?
查詢這里有三個(gè)指標(biāo):
查詢緩存碎片率=qcache_free_blocks/qcache_total_blocks,如果超過20%,可以使用flush query cache整理緩存碎片。
查詢緩存利用率=(query_cache_size-qcache_free_memory)/query_cache_size,如果在25%以下的話,說明 query_cache_size設(shè)置過大。如果在80%以上而且qcache_lowmem_prunes>50,則說明query_cache_size有點(diǎn)小。
查詢緩存命中率=(qcache_hits-qcache_inserts)/qcache_hits,這個(gè)只是給參考吧,如果太小,說明讀寫頻繁,而且有碎片。

?#查看文件打開數(shù)情況
show global status like “open_files”;
?
show variables like “open_files_limit”;
?
一般地,打開文件數(shù)/限制打開文件數(shù)應(yīng)

綜上面所述,平時(shí)我們應(yīng)關(guān)注的就是以下參數(shù):
? ? ? ? ?
key_buffer = 384m ? ?//根據(jù)實(shí)際狀態(tài)調(diào)整
max_connections = 256 //根據(jù)實(shí)際狀態(tài)調(diào)整
thread_cache_size = 64m //內(nèi)存大于4g則配64或更大
query_cache_size = 64m
tmp_table_size = 256m ?//內(nèi)存臨時(shí)表最大值
table_cache = 614 ?//訪問表分配的內(nèi)存,可降低io
skip-name-resolve ?//加上后避免訪問超時(shí)等問

?以上就是MYSQL學(xué)習(xí)總結(jié)(六):my.cnf 各參數(shù)配置及根據(jù)狀態(tài)優(yōu)化的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊6 分享