程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql辦事器查詢慢緣由剖析與處理辦法小結

mysql辦事器查詢慢緣由剖析與處理辦法小結

編輯:MySQL綜合教程

mysql辦事器查詢慢緣由剖析與處理辦法小結。本站提示廣大學習愛好者:(mysql辦事器查詢慢緣由剖析與處理辦法小結)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql辦事器查詢慢緣由剖析與處理辦法小結正文


會常常發明開辟人員查一下沒用索引的語句或許沒有limit n的語句,這些沒語句會對數據庫形成很年夜的影響,例如一個幾萬萬筆記錄的年夜表要全體掃描,或許是一直的做filesort,對數據庫和辦事器形成io影響等。這是鏡像庫下面的情形。

而到了線上庫,除湧現沒有索引的語句,沒有效limit的語句,還多了一個情形,mysql銜接數過量的成績。說到這裡,先來看看之前我們的監控做法
1. 安排zabbix等開源散布式監控體系,獲得天天的數據庫的io,cpu,銜接數
2. 安排每周機能統計,包括數據增長量,iostat,vmstat,datasize的情形
3. Mysql slowlog搜集,列出top 10

之前認為做了這些監控曾經是很完善了,如今安排了mysql節點過程監控以後,才發明許多弊病
第一種做法的弊病: zabbix太宏大,並且不是在mysql外部做的監控,許多數據不長短常預備,如今普通都是用來查經歷史的數據情形
第二種做法的弊病:由於是每周只跑一次,許多情形沒法發明和報警
第三種做法的弊病: 當節點的slowlog異常多的時刻,top10就變得沒意義了,並且許多時刻會給出那些是必定要跑的按期義務語句給你。。參考的價值不年夜
那末我們怎樣來處理和查詢這些成績呢

關於排盤問題找出機能瓶頸來講,最輕易發明並處理的成績就是MYSQL的慢查詢和沒有得用索引的查詢。
OK,開端找出mysql中履行起來不“爽”的SQL語句吧。
=========================================================
辦法一: 這個辦法我正在用,呵呵,比擬愛好這類即時性的。

Mysql5.0以上的版本可以支撐將履行比擬慢的SQL語句記載上去。
mysql> show variables like 'long%'; 注:這個long_query_time是用來界說慢於若干秒的才算“慢查詢”
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
mysql> set long_query_time=1; 注: 我設置了1, 也就是履行時光跨越1秒的都算慢查詢。
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'slow%';
+---------------------+---------------+
| Variable_name | Value |
+---------------------+---------------+
| slow_launch_time | 2 |
| slow_query_log | ON | 注:能否翻開日記記載
| slow_query_log_file | /tmp/slow.log | 注: 設置到甚麼地位
+---------------------+---------------+
3 rows in set (0.00 sec)
mysql> set global slow_query_log='ON' 注:翻開日記記載
一旦slow_query_log變量被設置為ON,mysql會立刻開端記載。
/etc/my.cnf 外面可以設置下面MYSQL全局變量的初始值。
long_query_time=1
slow_query_log_file=/tmp/slow.log

辦法二:mysqldumpslow敕令

/path/mysqldumpslow -s c -t 10 /tmp/slow-log
這會輸入記載次數最多的10條SQL語句,個中:
-s, 是表現依照何種方法排序,c、t、l、r分離是依照記載次數、時光、查詢時光、前往的記載數來排序,ac、at、al、ar,表現響應的倒敘;
-t, 是top n的意思,即為前往後面若干條的數據;
-g, 後邊可以寫一個正則婚配形式,年夜小寫不敏感的;
好比
/path/mysqldumpslow -s r -t 10 /tmp/slow-log
獲得前往記載集最多的10個查詢。
/path/mysqldumpslow -s t -t 10 -g “left join” /tmp/slow-log
獲得依照時光排序的前10條外面含有左銜接的查詢語句。

最初總結一下節點監控的利益
1. 輕量級的監控,並且是及時的,還可以依據現實的情形來定制和修正
2. 設置了過濾法式,可以對那些必定要跑的語句停止過濾
3. 實時發明那些沒有效索引,或許是不正當的查詢,固然這很耗時行止理那些慢語句,但如許可以免數據庫掛失落,照樣值得的
4. 在數據庫湧現銜接數過量的時刻,法式會主動保留以後數據庫的processlist,DBA停止緣由查找的時刻這可是利器
5. 應用mysqlbinlog 來剖析的時刻,可以獲得明白的數據庫狀況異常的時光段
有些人會建義我們來做mysql設置裝備擺設文件設置

調理tmp_table_size 的時刻發明別的一些參數
Qcache_queries_in_cache 在緩存中已注冊的查詢數量
Qcache_inserts 被參加到緩存中的查詢數量
Qcache_hits 緩存采樣數數量
Qcache_lowmem_prunes 由於缺乏內存而被從緩存中刪除的查詢數量
Qcache_not_cached 沒有被緩存的查詢數量 (不克不及被緩存的,或因為 QUERY_CACHE_TYPE)
Qcache_free_memory 查詢緩存的余暇內存總數
Qcache_free_blocks 查詢緩存中的余暇內存塊的數量
Qcache_total_blocks 查詢緩存中的塊的總數量
Qcache_free_memory 可以緩存一些經常使用的查詢,假如是經常使用的sql會被裝載到內存。那樣會增長數據庫拜訪速度。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved