mysql監控優化(一)鏈接數和緩存

1、mysql的鏈接數mysql

        MYSQL數據庫安裝完成後,默認最大鏈接數是100,通常流量稍微大一點的論壇或網站這個鏈接數是遠遠不夠的,鏈接數少的話,在大併發下鏈接數會不夠用,會有不少線程在等待其餘鏈接釋放,就可能會致使數據庫鏈接超時或者響應時間過長,因此須要調整最大鏈接數。linux

一、設置mysql的最大鏈接數,在mysql的配置文件中增長:
        max_connections = 1000 #mysql的最大鏈接數,默認若是不寫的話是100個
        wait_timeout = 10 超時時間
二、查看當前有多少個鏈接
        show status like '%Threads_connected%';
        show processlist;sql

2、mysql的緩存。緩存來自兩個維度。數據庫

          緩存1(MySQL層):查詢緩存 Query Cachewindows

          緩存2(存儲引擎層):InnoDB_Buffer_Pool緩存

一、查詢緩存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 數量

二、存儲引擎層-innodb buffer pool

  1. buffer pool是innodb存儲引擎帶的一個緩存池,查詢數據的時候,它首先會從內存中查詢,若是內存中存在的話,直接返回,從而提升查詢響應時間。
  2. 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的命中率

 

相關文章
相關標籤/搜索