MySQL資料庫狀態檢查教程

檢查mysql 相關狀態值

  1.關註連接數

  如果連接數達到瞭最大連接數,那不管 有多少資源,用戶都會阻塞在外面。

  修改mysql最大連接數:

  打開my.ini,修改max_connections=100(默認為100)。

  請根據硬件情況調整到合適的大小,一般經驗值可設為3000。Windows伺服器大概支持量為1500-1800個連接,linux伺服器可以支持到8000個左右。

  請將max_user_connections設0——–這個0代表不限制單用戶的最大連接數,其最大連接值可以等於max_connections值。  

mysql> show global status like ‘Max_used_connections’;

檢查下最大的過往使用連接數,這個值在max_connections的85%左右是比較合適的,如果過高則是max_connections過少或者系統負荷過高瞭。

  ①mysqladmin -uroot status

[root@mysql1 ~]# mysqladmin -uroot status

  Uptime: 1742276 Threads: 2 Questions: 2538 Slow queries: 0 Opens: 145 Flush tables: 1 Open tables: 23 Queries per second avg: 0.1

  ②show full processlist

  顯示所有進程

mysql> show full processlist;

  +—–+——+———–+——+———+——+——-+———————–+

  | Id | User | Host | db | Command | Time | State | Info |

  +—–+——+———–+——+———+——+——-+———————–+

  | 629 | root | localhost | NULL | Query | 0 | NULL | show full processlist |

  | 633 | root | localhost | NULL | Sleep | 11 | | NULL |

  +—–+——+———–+——+———+——+——-+———————–+

  2 rows in set (0.00 sec)

  如果正在運行的語句太多,運行時間太長,表示MySQL效率有問題。必要的時候可以將對應的進程kill掉。

  殺死休眠的進程kill ID號

        mysql> kill 633;

  Query OK, 0 rows affected (0.00 sec)

  關註TIME參數,看看正在運行的用戶進程有多少是長時間占用的,具體分析下。

  ③使用mysqlreport關註Connections,Threads

__ Connections _________________________________________________________

  Max used 3 of 200 %Max: 1.50

  Total 30.16k 0.7/s

  。。。。。。

  __ Threads _____________________________________________________________

  Running 1 of 2

  Cached 1 of 300 %Hit: 99.99

  Created 3 0.0/s

  Slow 0 0/s

  2.關註下系統鎖情況

  ① mysql> show status like ‘%lock%’;

+——————————-+———+

  | Variable_name | Value |

  +——————————-+———+

  | Com_lock_tables | 0 |

  | Com_unlock_tables | 0 |

  | Innodb_row_lock_current_waits | 0 |

  | Innodb_row_lock_time | 0 |

  | Innodb_row_lock_time_avg | 0 |

  | Innodb_row_lock_time_max | 0 |

  | Innodb_row_lock_waits | 0 |

  | Table_locks_immediate | 2667760 |

  | Table_locks_waited | 0 |

  ②使用mysqlreport關註Table Locks,InnoDB Lock

__ Questions ___________________________________________________________

  Total 3.38M 81.4/s

  DMS 2.88M 69.3/s %Total: 85.11

  QC Hits 382.70k 9.2/s 11.32

  Com_ 90.50k 2.2/s 2.68

  COM_QUIT 30.15k 0.7/s 0.89

  +Unknown 18 0.0/s 0.00

  Slow 1 s 92 0.0/s 0.00 %DMS: 0.00 Log: OFF

  。。。。。。

  __ Table Locks _________________________________________________________

  Waited 0 0/s %Total: 0.00

  Immediate 2.67M 64.2/s

  。。。。。。

  __ InnoDB Lock _________________________________________________________

  Waits 0 0/s

  Current 0

  Time acquiring

  Total 0 ms

  Average 0 ms

  Max 0 ms

  。。。。。。

        如果wait過多,平均時間過長,那就是查詢設計的有問題,仔細關註下超長時間的查詢,並打開slow_query_log。

  3. 關註慢查詢(slow query)日志

  日志必然會拖慢系統速度,特別是CPU資源,所以如果CPU資源充分,可以一直打開,如果不充足,那就在需要調整的時候,或者在replication從伺服器上打開(針對select)

mysql> show variables like ‘%slow%’;

  +———————+—————————————-+

  | Variable_name | Value |

  +———————+—————————————-+

  | log_slow_queries | OFF |

  | slow_launch_time | 2 |

  | slow_query_log | OFF |

  | slow_query_log_file | /data0/mysql/3306/data/mysql1-slow.log |

  +———————+—————————————-+

  4 rows in set (0.00 sec)

  mysql> set GLOBAL slow_query_log=on;

  Query OK, 0 rows affected (0.00 sec)

        ①關註慢查詢涉及的表的相關狀態

  表內記錄數。盡量控制在500萬行以內(有索引),建議控制在200萬行

  表內索引的使用。

  表如果update,delete,insert頻繁,可以考慮optimize table優化下文件存放,索引,存儲空間。

  表內update,insert,delete查詢的鎖定時間。

  select for update如果條件字段無索引的話,會引起的是鎖全表而不是行鎖,請關註。

  如果查詢包括GROUP BY但你想要避免排序結果的消耗,你可以指定ORDER BY NULL禁止排序。

  ②定期分析表

  ANALYZE TABLE

  語法:

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …

   本語句用於分析和存儲表的關鍵字分佈。在分析期間,使用一個讀取鎖定對表進行鎖定。這對於MyISAM, BDB和InnoDB表有作用。對於MyISAM表,本語句與使用myisamchk -a相當。

  CHECK TABLE

  語法:

       CHECK TABLE tbl_name [, tbl_name] … [option] …

  option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

   檢查一個或多個表是否有錯誤。CHECK TABLE對MyISAM和InnoDB表有作用。對於MyISAM表,關鍵字統計數據被更新。

  CHECK TABLE也可以檢查視圖是否有錯誤,比如在視圖設定中被引用的表已不存在。

  CHECKSUM TABLE

  語法:

CHECKSUM TABLE tbl_name [, tbl_name] … [ QUICK | EXTENDED ]

   報告一個表校驗和。

  ③使用optimize table

  OPTIMIZE TABLE

  語法:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …

   如果已經刪除瞭表的一大部分,或者如果您已經對含有可變長度行的表(含有VARCHAR, BLOB或TEXT列的表)進行瞭很多更改,則應使用OPTIMIZE TABLE。被刪除的記錄被保持在鏈接清單中,後續的INSERT操作會重新使用舊的記錄位置。您可以使用OPTIMIZE TABLE來重新利用未使用的空間,並整理數據文件的碎片。

  OPTIMIZE TABLE隻對MyISAM, BDB和InnoDB表起作用。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *