Mysql監控及最佳化

來源:互聯網
上載者:User

標籤:提交   執行計畫   查詢條件   mysql   mysql伺服器   start   load   lamp   配置   

一、Mysql串連數

1、配置Mysql串連數:

  vim /etc/my.cnf [mysqld]下面修改

  max_connections=1000  不寫預設為100。

  wait_timeout=60  設定逾時時間

2、查看當前串連數:

  show status like ‘%Threads_connected%‘;

  

  show processlist;

  

 二、Mysql緩衝

1、開啟緩衝:

  vim /etc/my.cnf mysqld下面添加或修改

  query_cache_type=on #開啟緩衝

  query_cache_size=10M #緩衝總大小

  query_cache_limit=1M #查詢結果超過設定值,就不會緩衝

  需重啟mysql服務生效。

2、查看緩衝狀態:

  SHOW VARIABLES LIKE ‘%query_cache%‘;

  

3、開啟profile:

  set @@profiling=1;  設定profile開啟

  select @@profiling;  查看profile是否開啟

  show profiles;      查看所有的profile

  

  show profile for query  9;  查看指定的sql語句消耗的時間

  

  

  可以看出:同樣的sql語句,第9條是首次查詢消耗時間,耗時比較長,第10條是從緩衝查詢消耗時間,耗時明顯比較短。

  註:1、select語句必須完全相同才會從走緩衝,例如:大小寫不一樣,雖然查詢結果一樣,但是不會走緩衝。

    2、任何一個包含不確定的函數(比如:now(),current_date())的查詢不會被緩衝。

4、queryCache使用狀態:

  SHOW STATUS LIKE ‘Qcache%‘;

  

  Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts );
  Qcache_free_blocks    Query Cache中目前還有多少剩餘的blocks。如果該值顯示較大,則說明Query Cache 中的記憶體片段較多了,可能需要尋找合適的機會進行整理。如果這個值非常大,可以使用FLUSH QUERY CACHE;語句來清理查詢快取片段以提高記憶體使用量效能。該語句不從緩衝中移出任何查詢。

5、查詢語句生命週期:

  1.Mysql伺服器監聽3306連接埠

  2.驗證訪問使用者

  3.建立Mysql線程

  4.檢查記憶體(qcache)

  5.解析SQL

  6.產生查詢計劃

  7.開啟表

  8.檢查記憶體(Buffer Pool)

  9.到磁碟讀取資料

  10.寫入記憶體

  11.返回資料給用戶端

  12.關閉表

  13.關閉線程

  14.關閉串連

三、innodb 儲存引擎

1、開啟innodb_buffer_pool

  vim /etc/my.cnf mysqld 下面添加或修改

  innodb_buffer_pool_size=20M   #設定bufferpool大小

  innodb_buffer_pool_dump_now=on     #預設為關閉OFF。如果開啟該參數,停止MySQL服務時,InnoDB將InnoDB緩衝池中的熱資料儲存到本地硬碟。

  innodb_buffer_pool_load_at_startup = on   #預設為關閉OFF。如果開啟該參數,啟動MySQL服務時,MySQL將本地熱資料載入到InnoDB緩衝池中。

2、查看Innodb_buffer_pool狀態

  SHOW VARIABLES LIKE ‘%innodb_buffer_pool%‘;

  

3、查詢Innodb_buffer_pool當前使用方式:

  SHOW STATUS LIKE ‘%Innodb_buffer_pool%‘;

  

4、 自動認可

  set @@autocommit=0;  #關閉自動認可,僅對目前使用者有效

  修改設定檔my.cnf在[mysqld]模組下加入autocommit = 0; #重啟後永久生效

  select @@autocommit;  #查看自動認可是否開啟

  commit;  #提交執行語句

5、鎖:

  show processlist;  #查看當前鎖定sql

  

  註:如果修改的資料條件是索引列,則是行級鎖,否則就是表級鎖。

四、慢查詢

1、查詢慢查詢日誌是否開啟

  SHOW VARIABLES LIKE ‘%query%‘;

  

2、慢查詢日誌設定(執行命令)

  set global slow_query_log=on;  #開啟慢查詢日誌

  set global long_query_time=1;  #設定記錄查詢超過多少秒的Sql存入慢查詢

  set global slow_query_log_file=‘/opt/data/slow_query.log‘;  #設定慢查詢日誌路徑,此路徑需要有寫入許可權

3、解析慢查詢日誌

  -s:是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘;  -t:是top n的意思,即為返回前面多少條的資料;  -g:後邊可以寫一個正則匹配模式,大小寫不敏感的;   如:查詢按照Sql查詢時間最長的前10條sql

  mysqldumpslow -s t -t 10 -g ‘select‘  /opt/lampp/var/mysql/xiaoxitest-slow.log

  

4、使用EXPLAIN/DESC 查看Sql效率

  EXPLAIN update user set age=11 where id=1;

  DESC update user set age=11 where id=1;

  

  type列:依次從最差到最優

  all<index<range<ref<eq_ref<const,system<null

  ALL  就是全表掃描,通常意味著MySQL必須掃描整張表,從頭到尾,去找需要的行。對innodb表就是按主鍵順序。  Index  聯結類型與ALL相同,除了只有索引樹被掃描。這通常比ALL快,因為索引檔案通常比資料檔案小。(也就是說雖然all和Index都是讀全表,但index是從索引中讀取的,而all是從硬碟中讀的)。  Range  範圍掃描就是一個有限制的索引掃描,它開始於索引裡面的一個點,返回匹配整個範圍的行。這比全索引掃描好一些,因為它用不著遍曆全部索引。顯而易見的是between或在where字句帶有“>”或“<”的查詢或者in。  Ref  非唯一性索引掃描,返回匹配某個單獨值的所有行。  Eq_ref  使用這種索引尋找,MySQL知道最多隻返回一條合格記錄。這種訪問方式在MySQL使用主鍵或唯一索引時可以看到。MySQL對於這類訪問類型最佳化的非常好。  Const,system  當MySQL能對查詢的某部分進行最佳化並將其轉化成一個常量時,它就會使用這些類型訪問。  NULL  這種訪問方式意味著MySQL能在最佳化階段分解查詢語句,在執行階段甚至用不著再訪問表或者索引。 五、Mysql最佳化1、讀寫分離  主:只負責寫資料  從:只負責讀資料2、分布資料  MySQL通常不會對頻寬造成很大的壓力。因此可以在不同的地理位置來分布資料,實現跨機房跨地區的資料分布。3、負載平衡  通過MySQL複製可以將讀操作分布到多個伺服器上,實現對讀密集型應用的最佳化。4、減少IO次數  大部分資料庫操作中90%時間都是IO操作所佔用的,減少IO次數是Sql最佳化種第一優先考慮。也是收效最明顯最佳化手段。5、減少CPU計算  SQL最佳化中需要考慮的就是 CPU 運算量的最佳化了。order by, group by,distinct … 都是消耗 CPU 的大戶(這些操作基本上都是 CPU 處理記憶體中的資料比較運算)。當我們的 IO 最佳化做到一定階段之後,降低 CPU 計算也就成為了我們 SQL 最佳化的重要目標。6、改變 SQL 執行計畫  明確了最佳化目標之後,我們需要確定達到我們目標的方法。對於 SQL 陳述式來說,達到上述2個目標的方法其實只有一個,那就是改變 SQL 的執行計畫,讓他盡量“少走彎路”,盡量通過各種“捷徑”來找到我們需要的資料,以達到 “減少 IO 次數” 和 “降低 CPU 計算” 的目標。7、為經常使用的查詢條件建立索引

Mysql監控及最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.