MySQL 配置文件优化
MySQL 配置文件優(yōu)化
查看MySQL服務(wù)器配置信息:
show variables;
查看MySQL服務(wù)器運(yùn)行的各種狀態(tài)值:
show global status;
1. 慢查詢
show variables like '%slow%';
show global status like '%slow%';
mysqldumpslow -s c -t 20 host -slow.log
分析慢查詢?nèi)罩?#xff0c;找出有問題的SQL語句,慢查詢時間不宜設(shè)置過長,否則意義不大,最好在5秒以內(nèi),如果你需要微秒級別的慢查詢,可以考慮給MySQL打補(bǔ)丁:http://www.percona.com/docs/wiki/release:start,記得找對應(yīng)的版本。
2. 連接數(shù)
經(jīng)常會遇見”MySQL: ERROR 1040: Too manyconnections” 的情況:
一種是訪問量確實(shí)很高,MySQL服務(wù)器抗不住,這個時候就要考慮增加從服務(wù)器分散讀壓力。
一種情況是MySQL配置文件中max_connections值過小。
查看最大連接數(shù):
show variables like 'max_connections';
查看mysql服務(wù)器過去的最大連接數(shù):
show global status like 'max_used_connections';
理想值:max_used_connections / max_connections * 100% ≈ 85%
最大連接數(shù)占上限連接數(shù)的85%左右,如果發(fā)現(xiàn)比例在10%以下,MySQL服務(wù)器連接數(shù)上限設(shè)置的過高了。
3. key_buffer_size
key_buffer_size是對MyISAM表性能影響最大的一個參數(shù),不過數(shù)據(jù)庫中多為Innodb
查看key_buffer_size設(shè)置大小:
show variables like 'key_buffer_size';
查看key_buffer_size使用情況:
show global status like 'key_read%';
計算索引未命中緩存的概率:key_cache_miss_rate = Key_reads / Key_read_requests * 100%
key_cache_miss_rate在0.1%以下都很好(每1000個請求有一個直接讀硬盤),如果key_cache_miss_rate在0.01%以下的話,key_buffer_size分配的過多,可以適當(dāng)減少。
4. key_blocks_*參數(shù)
show global status like 'key_blocks_u%';
Key_blocks_unused:表示未使用的緩存簇(blocks)數(shù)
Key_blocks_used:表示曾經(jīng)用到的最大的blocks數(shù)
理想值:Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%
5. 臨時表
當(dāng)執(zhí)行語句時,關(guān)于已經(jīng)被創(chuàng)造了的隱含臨時表的數(shù)量,查看命令:
show global status like 'created_tmp%';
每次創(chuàng)建表時Created_tmp_tables 都會增加,如果在磁盤上創(chuàng)建,Created_tmp_disk_tables也會增加,Created_tmp_files表示服務(wù)器創(chuàng)建的臨時文件數(shù)
理想值:Created_tmp_disk_tables / Created_tmp_tables * 100% ≤25%
查看服務(wù)器對臨時表的配置:
show variables where variable_name in('tmp_table_size','max_heap_table_size');
6.打開表的情況
show global status like 'open%tables%';
open_tables 表示打開表的數(shù)量,opened_tables表示打開過的表數(shù)量,如果opened_tables數(shù)量過大,說明配置中 table_cache(5.1.3之后這個值叫做table_open_cache)值可能太小
查詢服務(wù)器table_cache值:
show variables like 'table_open_cache';
理想值:open_tables / opened_tables * 100% ≥ 85%
理想值:open_tables / table_cache * 100% ≤95%
7. 進(jìn)程使用情況
如果我們在MySQL服務(wù)器配置文件中設(shè)置了thread_cache_size,當(dāng)客戶端斷開之后,服務(wù)器處理此客戶的線程將會緩存起來以響應(yīng)下一個客戶而不是銷毀(前提是緩存數(shù)未達(dá)上限)。Threads_created表示創(chuàng)建過的線程數(shù):
show global status like 'thread%';
如果發(fā)現(xiàn)Threads_created值過大的話,表明 MySQL服務(wù)器一直在創(chuàng)建線程,這也是比較耗資源,可以適當(dāng)增加配置文件中thread_cache_size值,查詢服務(wù)器 thread_cache_size配置:
show variables like 'thread_cache_size';
8. 查詢緩存(query cache)
查看服務(wù)器query_cache配置情況:
show variables like 'query_cache%';
參數(shù)解釋:
query_cache_limit:超過此大小的查詢將不緩存。
query_cache_min_res_unit:緩存塊的最小值。
query_cache_size:查詢緩存大小。
query_cache_type:緩存類型,決定緩存什么樣的查詢。
query_cache_wlock_invalidate:表示當(dāng)前客戶端,正在對MyISAM表進(jìn)行寫操作時,讀請求是要等SRITE LOCK釋放資源后再查詢,還是允許直接從Query Cache中讀取結(jié)果,默認(rèn)為OFF(可以直接從Query Cache 中讀取結(jié)果)。
查看服務(wù)器query_cache使用情況:
show global status like 'qcache%';
參數(shù)解釋:
Qcache_free_blocks:緩存中相鄰內(nèi)存塊的個數(shù)。數(shù)目大說明可能有碎片。FLUSH QUERY CACHE會對緩存中的碎片進(jìn)行整理,從而得到一個空閑塊。
Qcache_free_memory:緩存中的空閑內(nèi)存。
Qcache_hits:每次查詢在緩存中命中時就增大
Qcache_inserts:每次插入一個查詢時就增大。命中次數(shù)除以插入次數(shù)就是不中比率。
Qcache_lowmem_prunes:緩存出現(xiàn)內(nèi)存不足并且必須要進(jìn)行清理以便為更多查詢提供空間的次數(shù)。這個數(shù)字最好長時間來看;如果這個數(shù)字不斷增長,表示可能碎片非常嚴(yán)重,或內(nèi)存很少。
Qcache_not_cached:不適合進(jìn)行緩存的查詢的數(shù)量,通常是由于這些查詢不是 SELECT 語句或者用了now()之類的函數(shù)。
Qcache_queries_in_cache:當(dāng)前緩存的查詢(和響應(yīng))的數(shù)量。
Qcache_total_blocks:緩存中塊的數(shù)量。
9. 排序使用情況
它表示系統(tǒng)中對數(shù)據(jù)進(jìn)行排序時所使用Buffer,查看命令:
show global status like 'sort%';
增大sort_buffer_size 會減少Sort_merge_passes和創(chuàng)建臨時文件的次數(shù),但盲目增加并不一定能提高速度。
10. 文件打開數(shù)
當(dāng)open_files大于open_files_limit值時,mysql數(shù)據(jù)庫就會發(fā)生卡住的現(xiàn)象,導(dǎo)致web服務(wù)器打開不響應(yīng)的頁面。
查看open_files命令:
show global status like 'open_files';
查看open_files_limit命令:
show variables like 'open_files_limit';
理想值:open_files / open_files_limit *100% ≤ 75%
11.Innodb_buffer_pool_size 的合理設(shè)置
show status like 'Innodb_bufferpool_%';
根據(jù)實(shí)際運(yùn)行場景進(jìn)行調(diào)整
read 命中率:
(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / ?Innodb_buffer_pool_read_requests = ?
write 命中率:
Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total?
本文轉(zhuǎn)自 dengaosky 51CTO博客,原文鏈接:http://blog.51cto.com/dengaosky/1957327,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的MySQL 配置文件优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Maven生命周期详解
- 下一篇: SQLite 使用(创、升、增、删、改、