mysql slow_log 記錄和擷取

來源:互聯網
上載者:User

標籤:mysql slow log

需要記錄慢查詢,在設定檔中加入慢查詢的相關配置。

/etc/my.cnf


general_log=off

log_output=table

slow_query_log=1

long_query_time=0.3


  • general_log=off      會記錄所有的查詢,建議關閉(set global general_log = off)

  • log_output=table     將log記錄到表中

  • slow_query_log=1     開啟慢查詢記錄

  • long_query_time=0.3  大於0.3秒的查詢會被記錄


配置好以後,我的做法是使用python每周讀取資料庫中的記錄,郵件發出來以便分析。


sql如下:

SELECT    max(user_host),    min(start_time),    max(start_time),    count(*),    sum(        CASE        WHEN TIME_TO_SEC(query_time) = 0 THEN            0.3        ELSE            TIME_TO_SEC(query_time)        END    ),    max(        CASE        WHEN TIME_TO_SEC(query_time) = 0 THEN            0.3        ELSE            TIME_TO_SEC(query_time)        END    ),    min(        CASE        WHEN TIME_TO_SEC(query_time) = 0 THEN            0.3        ELSE            TIME_TO_SEC(query_time)        END    ),    round(        avg(            CASE            WHEN TIME_TO_SEC(query_time) = 0 THEN                0.3            ELSE                TIME_TO_SEC(query_time)            END        ),        2    ),    sql_textFROM    slow_logWHERE    sql_text NOT LIKE ‘%SQL_NO_CACHE%‘GROUP BY    LEFT (sql_text, 40)ORDER BY    count(*) DESCLIMIT 20;


部分python代碼如下:

for i in range(len(conn)):            log=p.get_table(conn[i],sql)            query_log+=‘_‘*120+‘\r\n‘            query_log+="Slow_Log_%s:%s____%s\r\n\r\n" % (conn[i]["host"],conn[i]["port"],days)            for n in range(len(log)):                 query_log+="%s  %s  %s  %s  %s " % (str(log[n][3]),str(log[n][4]),str(log[n][5]),str(log[n][6]),str(log[n][7]))                query_log+="user_host :%s    start_time :%s   end_time :%s\r\n" % (str(log[n][0]),str(log[n][1]),str(log[n][2]))                query_log+=‘ ‘*40+squeeze(str(log[n][8]))+‘\r\n\r\n‘                        mail.send_mail(mail_list,mail_title,query_log)


得到的郵件部分:

Slow_Log_x.x.x.x:3306____2016-05-26

 

1889  704.4  33.0  0.3  0.37 user_host :x[x] @  [x]    start_time :2016-05-25 09:30:27   end_time :2016-05-26 09:16:05

                                        select max(online_user),round(sum(online_user)/count(id)) from online where datetime >= ‘2016-05-25‘ and server_id = 27


這樣就可以看到每周比較慢的查詢,然後進行最佳化分析。



本文出自 “hanchengway” 部落格,請務必保留此出處http://hanchengway.blog.51cto.com/10974268/1783520

mysql slow_log 記錄和擷取

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.