mysql 连接 监控_mysql监控优化(一)连接数和缓存
一、mysql的連接數
MYSQL數據庫安裝完成后,默認最大連接數是100,一般流量稍微大一點的論壇或網站這個連接數是遠遠不夠的,連接數少的話,在大并發下連接數會不夠用,會有很多線程在等待其他連接釋放,就可能會導致數據庫連接超時或者響應時間過長,所以需要調整最大連接數。
1、設置mysql的最大連接數,在mysql的配置文件中增加:
max_connections = 1000#mysql的最大連接數,默認如果不寫的話是100個
wait_timeout = 10超時時間
2、查看當前有多少個連接
show status like '%Threads_connected%';
show processlist;
二、mysql的緩存。緩存來自兩個維度。
緩存1(MySQL層):查詢緩存 Query Cache
緩存2(存儲引擎層):InnoDB_Buffer_Pool
1、查詢緩存Qcache
緩存完整的SELECT查詢結果,當查詢命中緩存,MySQL會立刻返回結果,跳過解析、優化和執行階段。
查詢緩存會跟蹤系統中的每張表,如果這些表發生變化,那么和這張表相關的所有查詢緩存全部失效。
查詢緩存對應用程序是完全透明的。應用程序無須關心MySQL是通過查詢緩存返回的結果還是實際執行返回的結果。事實上,這2種結果是完全相同的。
在檢查查詢緩存的時候,MySQL不會對SQL進行任何處理,它精確的使用客戶端傳來的查詢(select),只要字符大小寫,或者注釋有一點點不同,查詢緩存就認為是不同的查詢。
任何一個包含不確定的函數(比如now(),current_date())的查詢不會被緩存。
(1)mysql查詢緩存開啟需要注意的問題
開啟查詢緩存對于讀寫都增加了額外的開銷。對于讀,在查詢開始前需要先檢查緩存;對于寫,在寫入后需要更新緩存。
一般情況這些開銷相對較小,所以查詢緩存一般還是有好處的。但也要根據業務特征權衡是否需要開啟查詢緩存。
(2)Qcache參數。查詢緩存參數,在mysql配置文件中添加,linux下為my.cnf,windows下為my.ini:
1.query_cache_type = on ? ?? ? ? ? 是否開啟查詢緩存,具體選項是off,on
2.query_cache_size = 200M? ? ? ??分配給查詢緩存的總內存,一般建議不超過256M
3.query_cache_limit = 1M ? ? ? ? ??這個選項限制了MySQL存儲的最大結果。如果查詢的結果比這個大,那么就不會被緩存。
(3)查看Qcache狀態
查詢qcache狀態:
SHOW VARIABLES LIKE '%query_cache%';
命令參數列表
have_query_cache 該MySQL 是否支持Query Cache;
query_cache_limit 緩存塊大小,超過該大小不會被緩存
query_cache_min_res_unit 每個qcache最小的緩存空間大小
query_cache_size 分配給查詢緩存的總內存
query_cache_type 是否開啟
query_cache_wlock_invalidate 控制當有鎖加在表上的時候,是否先讓該表相關的 Query Cache失效
(4)監控Qcache的使用情況
查詢qcache當前使用情況:
SHOW STATUS LIKE 'Qcache%';
命令參數列表
Qcache_free_blocks? Query Cache中目前還有多少剩余的blocks。如果該值顯示較大,則說明Query Cache 中的內存碎片較多了,可能需要尋找合適的機會進行整理。如果這個值非常大,可以使用FLUSH QUERY CACHE;語句來清理查詢緩存碎片以提高內存使用性能。該語句不從緩存中移出任何查詢。
Qcache_free_memory? Query Cache 中目前剩余的內存大小
Qcache_hits? 緩存命中次數
Qcache_inserts 多少次未命中然后插入
Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts );
Qcache_lowmem_prunes 多少條Query 因為內存不足而被清除出Query
Qcache_not_cached? ?因為query_cache_type 的設置或者不能被cache 的Query 的數量
Qcache_queries_in_cache? 當前Query Cache 中cache 的Query 數量;
Qcache_total_blocks 當前Query Cache 中的block 數量
2、存儲引擎層-innodb buffer pool
buffer pool是innodb存儲引擎帶的一個緩存池,查詢數據的時候,它首先會從內存中查詢,如果內存中存在的話,直接返回,從而提高查詢響應時間。
innodb buffer pool和qcache的區別是:qcacche緩存的是sql語句對應的結果集,buffer pool中緩存的是表中的數據。Buffer pool是設置的越大越好,一般設置為服務器物理內存的70%。
(1)Innodb_buffer_pool參數:
innodb_buffer_pool_size :Innodb_buffer_pool的大小
innodb_buffer_pool_dump_now:默認為關閉OFF。如果開啟該參數,停止MySQL服務時,InnoDB將InnoDB緩沖池中的熱數據保存到本地硬盤。
innodb_buffer_pool_load_at_startup:默認為關閉OFF。如果開啟該參數,啟動MySQL服務時,MySQL將本地熱數據加載到InnoDB緩沖池中。
(2)查看Innodb_buffer_pool的狀態
查詢Innodb_buffer_pool狀態:
SHOW VARIABLES LIKE '%innodb_buffer_pool%';
命令參數列表
innodb_buffer_pool_size 設置的bp大小
innodb_buffer_pool_filename? 熱數據文件名稱
innodb_buffer_pool_dump_at_shutdown 停止mysq服務時是否自動保存熱數據
innodb_buffer_pool_dump_now 啟動mysql服務時是否自動讀取熱數據
(3)監控Innodb_buffer_pool使用情況
查詢Innodb_buffer_pool當前使用情況:
SHOW STATUS LIKE '%Innodb_buffer_pool%';
命令參數列表
主要關注的兩個參數
Innodb_buffer_pool_read_requests 總共查詢bp的次數
Innodb_buffer_pool_reads 從物理磁盤中獲取到數據的次數
通過這兩個參數我們可以知道bp的命中率
總結
以上是生活随笔為你收集整理的mysql 连接 监控_mysql监控优化(一)连接数和缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Layui --- [Mar]给渲染后
- 下一篇: linux cmake编译源码,linu