91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL怎么快速定位慢查詢問題

發布時間:2021-07-13 15:59:06 來源:億速云 閱讀:293 作者:chen 欄目:云計算

這篇文章主要介紹“MySQL怎么快速定位慢查詢問題”,在日常操作中,相信很多人在MySQL怎么快速定位慢查詢問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL怎么快速定位慢查詢問題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一條慢查詢會造成什么后果?剛開始使用MySQL的開發、初級DBA 以為就是簡單的查詢變慢些,體驗稍微有一丟丟影響,殊不知,慢查詢的破壞力遠不止如此。業務高峰期,這頭SQL還沒處理完,大量新的查詢請求堆積,CPU使用率長時間居高不下,甚至高達100%,系統直接崩潰……慢查詢這樣的黑天鵝事件,可能直接影響業務穩定性,造成巨大經濟損失。

慢查詢,字面理解就是查詢慢的意思,比如某類查詢,正常情況下消耗100ms 左右,異常時可能飆升到 15s。為定位慢查詢問題,我們可以按如下幾個步驟進行:

一、開啟慢日志;

二、使用慢日志查詢分析管理工具;

三、基于已有的慢日志分析,對系統本身做優化(如查詢語句或表結構設計方面)。

MySQL怎么快速定位慢查詢問題

啟用慢日志,定位異常

慢日志默認情況下時不開啟的,如果需要對SQL做優化,可以開啟這個功能。登陸 MySQL 后,執行如下 SQL 語句即可開啟慢日志(這里以MySQL 5.7.33 為例 ,其它版本基本通用):

SET GLOBAL slow_query_log = 'ON';
-- 未使用索引的查詢也認為是一個可能的慢查詢
set global log_queries_not_using_indexes = 'ON';

一般情況下,MySQL 慢日志位于 /var/lib/mysql/<host-name>-slow.log,我們可以模擬一個慢查詢,然后即可看到慢日志記錄產生:

-- 手動觸發一個慢查詢:MySQL默認認為,一個大于 10s 的查詢就是慢查詢
SELECT sleep(11);

看下慢查詢日志:

$ sudo cat /var/lib/mysql/ubt-server-slow.log

/usr/sbin/mysqld, Version: 5.7.33-0ubuntu0.18.04.1 ((Ubuntu)). started with:

Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock

# Time: 2021-03-12T08:52:54.227174Z

# User@Host: df-test[df-test] @  [10.100.64.118]  Id:     2

# Query_time: 11.000551  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0

use number1;

SET timestamp=1615539174;

select sleep(11);

從該日志中,我們能看到如下幾個信息(根據不同的 MySQL 版本或者配置,這些信息可能有增減):

  • 產生時間:2021-03-12T08:52:54.227174Z

  • 來源:df-test[df-test] @  [10.100.64.118],即用戶 df-test 在10.100.64.118這個機器上執行了這個查詢

  • 查詢統計:如消耗的時間,發送/接收的行數

  • 具體的 SQL 語句

從這些信息中,我們可以比較清晰地知道這個慢查詢的來龍去脈,比較精確地定位具體的業務代碼。但這里有個問題,為保障MySQL數據庫安全,MySQL要求只有登錄到具體服務器才能看到慢查詢日志詳情,這直接影響到對異常出現時的處理效率,拖累異常地位、分析和解決的進度。

除開啟系統自帶的慢日志之外,還有什么有效的方式能讓開發人員快速、直接且準確地解決這個問題?

使用MySQL慢日志分析工具

常用的對慢SQL做優化的分析工具有:mysqldumpslow、mysqlsla、mysql-explain-slow-log、mysql-log-filter、myprofi。

MySQL怎么快速定位慢查詢問題

可參考:《4.6.9 mysqldumpslow-匯總慢查詢日志文件》

https://dev.mysql.com/doc/refman/8.0/en/mysqldumpslow.html

02 mysql-log-filter

google code 上找到的一個分析工具,提供了 python 和 php 兩種可執行的腳本。基本功能比官方的 mysqldumpslow 多了查詢時間的統計信息(平均、最大、累計),其他類似。特色功能除了統計信息外,針對輸出內容做了排版和格式化,保證整體輸出的簡潔。推薦給喜歡簡潔報表的朋友。

MySQL怎么快速定位慢查詢問題

安裝好 DataKit 后,在 /usr/local/cloudcare/dataflux/datakit/conf.d/log/ 目錄下,復制一份 MySQL 日志采集配置

$ sudo cp mysqlog.conf.sample mysqlog.conf

編輯 mysqlog.conf:

[[inputs.tailf]]
    # 填寫各種 MySQL 日志的文件路徑,不同版本可能不同
    # 注意,這里只支持文本文件。我們這里使用的版本是 MySQL 5.7.33
    
    logfiles = [
    "/var/lib/mysql/*.log",
    "/var/log/mysql/mysql.log",
    "/var/log/mysql/error.log",
    ]
    
    source = "mysqlog"
    
    # 指定服務名
    service = "mysqlog"
    
    # 專用的日志解析腳本(DataKit 已經內置了)
    pipeline = "mysql.p"
    
    [inputs.tailf.tags]
    # 這里可以添加一些標簽,比如:
    biz = "訂單系統"
    
    # 省略其它默認配置...

至此,MySQL 的日志采集就配置好了,重新啟動一下 DataKit 的即可(數據需要稍等一會才能在 Dataflux 平臺看到)

參考鏈接:《DataKit不同系統的重啟方式》

https://help.dataflux.cn/doc/0c6ebce225784bd2ad994d5f89c5dbc89e025792#toc27

接下來,我們就能在 DataFlux 平臺看到對應的日志了:

MySQL怎么快速定位慢查詢問題

從日志詳情圖中,我們可以看到紅框標記的慢查詢 SQL 語句,另外還有其它提取出來的日志信息,比如查詢時間、來源、服務器主機名、請求發送的數據行數等信息。

除此之外,我們在拉出來的日志詳情中,還可看到當前這臺主機在慢日志產生的那個時間點附近(紅色虛豎線)的資源占用情況(諸如 CPU、內存、磁盤、網絡等信息),在一定程度上能幫助開發人員更好的解決問題。

至此,我們解決了 MySQL 慢日志的采集、解析以及展示問題。現在數據已經有了,開發人員就能方便的在網頁上找到對應的慢查詢日志,并且綜合 MySQL 服務器的整體資源占用情況,給出更加合理的解決方案。

以上便是今天我們針對MySQL慢日志查詢問題,提供的幾種解決辦法。在實際應用過程中,我們還是要多嘗試不同維度的解決方案,并結合自身所處行業、業務等特點,挑選適合自己和團隊使用的數據庫分析工具,保障系統和業務的穩定。

到此,關于“MySQL怎么快速定位慢查詢問題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麦盖提县| 苍南县| 淄博市| 绍兴市| 会东县| 丹凤县| 弥勒县| 沙洋县| 固阳县| 昌都县| 梁山县| 怀宁县| 寻甸| 公安县| 林西县| 曲靖市| 兴国县| 循化| 遂川县| 迁西县| 丰都县| 乌兰县| 体育| 塔河县| 桦甸市| 濮阳市| 南丰县| 闽清县| 衡阳县| 金山区| 临城县| 阳曲县| 玉溪市| 厦门市| 乌兰县| 耒阳市| 洮南市| 乌兰察布市| 南投市| 仲巴县| 阿拉善左旗|