天天看點

記一次項目網站通路慢問題排查處理問題排查問題解決mysql索引相關傳送門

文章目錄

  • 問題排查
    • 1 伺服器資訊檢視
      • top指令使用
      • 顯示資訊詳解
        • top指令第一行
        • top指令第二行--程序狀态
        • top指令第三行--CPU狀态
        • top指令第四行--記憶體狀态
        • top指令第五行--swap交換分區
        • top指令第七行--程序監控
    • 2 資料庫分析
    • 3 慢查詢分析
  • 問題解決
  • mysql索引相關傳送門

問題排查

1 伺服器資訊檢視

top指令使用

使用top指令進行伺服器相關資訊檢視,檢視是記憶體不夠、CPU處理能力不夠、IO讀寫過高….等。

記一次項目網站通路慢問題排查處理問題排查問題解決mysql索引相關傳送門

伺服器為多核,是以需要按下按鍵“1”檢視全部CPU具體資訊。

記一次項目網站通路慢問題排查處理問題排查問題解決mysql索引相關傳送門

顯示資訊詳解

top指令第一行

top - 11:01:20 up 486 days, 19:31,  1 user,  load average: 0.21, 0.28, 0.30
           

依次對應:系統目前時間 up 系統到目前為止i運作的時間, 目前登陸系統的使用者數量, load average後面的三個數字分别表示距離現在一分鐘,五分鐘,十五分鐘的負載情況。

這行資訊與指令uptime顯示的資訊相同

注意:load average資料是每隔5秒鐘檢查一次活躍的程序數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高于5的時候就表明系統在超負荷運轉了。

top指令第二行–程序狀态

Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
           

依次對應:tasks表示任務(程序),183 total則表示現在有183個程序,其中處于運作中的有1個,182個在休眠(挂起),stopped狀态即停止的程序數為0,zombie狀态即僵屍的程序數為0個。

top指令第三行–CPU狀态

%Cpu(s):  0.6 us,  0.2 sy,  0.0 ni, 95.0 id,  0.0 wa,  0.0 hi,  0.0 si,  4.1 st
           

依次對應:

us:user 使用者空間占用cpu的百分比

sy:system 核心空間占用cpu的百分比

ni:niced 改變過優先級的程序占用cpu的百分比

空閑cpu百分比

wa:IO wait IO等待占用cpu的百分比

hi:Hardware IRQ 硬中斷 占用cpu的百分比

si:software 軟中斷 占用cpu的百分比

st:被hypervisor偷去的時間

多核伺服器需要展開檢視具體CPU狀态

top指令第四行–記憶體狀态

KiB Mem : 32753588 total,  1142352 free, 25133012 used,  6478224 buff/cache
           

依次對應:實體記憶體總量;空閑記憶體總量;使用中的記憶體總量;緩沖記憶體量;

第四行中使用中的記憶體總量(used)指的是現在系統核心控制的記憶體數,空閑記憶體總量(free)是核心還未納入其管控範圍的數量。納入核心管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重複利用的記憶體,核心并不把這些可被重新使用的記憶體交還到free中去,是以在linux上free記憶體會越來越少,但不用為此擔心

top指令第五行–swap交換分區

KiB Swap:  4194300 total,  2880252 free,  1314048 used.  6677308 avail Mem 
           

依次對應:交換區總量;空閑交換區總量;使用的交換區總量;在不交換的情況下,對啟動新應用程式可用記憶體的估計

對于記憶體監控,在top裡我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明核心在不斷進行記憶體和swap的資料交換,這是真正的記憶體不夠用了。

top指令第七行–程序監控

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 
           
  • 1

依次對應:

PID — 程序id

USER — 程序所有者

PR — 程序優先級

NI — nice值。負值表示高優先級,正值表示低優先級

VIRT — 程序使用的虛拟記憶體總量,機關kb。VIRT=SWAP+RES

RES — 程序使用的、未被換出的實體記憶體大小,機關kb。RES=CODE+DATA

SHR — 共享記憶體大小,機關kb

S — 程序狀态。D=不可中斷的睡眠狀态 R=運作 S=睡眠 T=跟蹤/停止 Z=僵屍程序

%CPU — 上次更新到現在的CPU時間占用百分比

%MEM — 程序使用的實體記憶體百分比

TIME+ — 程序使用的CPU時間總計,機關1/100秒

COMMAND — 程序名稱(指令名/指令行)

2 資料庫分析

show PROCESSLIST

檢視資料庫程序資訊,從執行及等待時間查找慢語句

記一次項目網站通路慢問題排查處理問題排查問題解決mysql索引相關傳送門

有時info的sql語句過長無法全部顯示,則需要使用下面指令

select * from information_schema.processlist;
記一次項目網站通路慢問題排查處理問題排查問題解決mysql索引相關傳送門
show OPEN TABLES where In_use > 0;

查詢是否鎖表 ,使用下面指令可進行鎖表程序kill

SELECT CONCAT(‘kill ‘,trx_mysql_thread_id,’;’) FROM INFORMATION_SCHEMA.INNODB_TRX;
記一次項目網站通路慢問題排查處理問題排查問題解決mysql索引相關傳送門

反複執行該語句檢視是否存在同一程序或程序過多,直接執行“kill 4147”則可殺死該程序

3 慢查詢分析

開啟并配置完慢查詢日志後,超過配置閥值的查詢時間語句會寫入slow.log中。【如何開啟及配置不做描述,可查閱相關資料】

使用tail指令動态閱讀慢查詢日志看是否存在長時間查詢語句,如下。

記一次項目網站通路慢問題排查處理問題排查問題解決mysql索引相關傳送門

若日志重新整理過快可使用日志截取語句進行截取:

先進入log所在檔案夾下:
sed -n "/16:40:00/,/16:53:00/p" slow.log >2021slow.log
           

問題解決

由于大量通路造成的資料庫查詢壓力,排查慢查得知查詢過慢語句,添加索引進行優化處理。

mysql索引相關傳送門

MySQL索引的建立與使用

mysql 如何添加索引

USING BTREE 是什麼意思 有什麼作用 Mysql

繼續閱讀