• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      排查網(wǎng)站查詢緩慢故障

      2019-12-24 00:44:01河南劉進京
      網(wǎng)絡(luò)安全和信息化 2019年11期
      關(guān)鍵詞:磁盤線程命令

      ■河南 劉進京

      某商品銷售網(wǎng)站出現(xiàn)了查詢緩慢的問題,當執(zhí)行商品信息查詢時,需要等待十幾秒才出現(xiàn)回應(yīng)信息,這給用戶正常訪問帶來了不便。

      該網(wǎng)站采用了Python Flask 開發(fā),后臺使用的是MySQL 數(shù)據(jù)庫,所有的商品信息都存儲在MySQL 數(shù)據(jù)庫中,用戶或應(yīng)用可以通過MySQL接口,根據(jù)提供的商品信息,來查詢對應(yīng)的數(shù)據(jù)。但是過于緩慢的查詢速度,讓網(wǎng)站無法正常為外界提供服務(wù)。

      故障排查

      登錄到Web 服務(wù)器上,對系統(tǒng)狀態(tài)進行檢測,發(fā)現(xiàn)當執(zhí)行任意命令后,都會稍微停頓一下才看到回應(yīng)信息,可以明顯察覺系統(tǒng)響應(yīng)速度變慢。

      對于該情況,首先查看系統(tǒng)資源使用情況,檢測其是否存在異常狀態(tài)。執(zhí)行“top”命令,在返回信息中可以看到,兩個CPU 的iowait 值都比較高,尤其對于CPI0 來說,其iowait 的值已經(jīng)超過70%。但是對于各個進程進行查看,其CPU 占用率并不高。

      根據(jù)以上分析,CPU 的使用情況還算比較正常,接下來需要排查I/O 使用情況,檢測問題是都磁盤的I/O 瓶頸有關(guān)。執(zhí)行“iostat”命令,根據(jù)返回信息,發(fā)現(xiàn)磁盤每秒的讀取速率較高,I/O 使用率為98%,幾乎處于完全飽和的狀態(tài)。這表明磁盤的讀取出現(xiàn)了瓶頸。

      接著需要找到究竟是什么進程造成了這么高的磁盤讀取情況。執(zhí)行“pidstat-d 1”命令,顯示進程的I/O使用情況。

      在返回信息中看到,對于PID 為28716 的進程來說,在其“kB_rd/s”列中顯示較高的磁盤讀取值,這說明該進程正在進行大量的讀操作,其讀取的速率和上述執(zhí)行“iostat”命令檢測到的數(shù)值基本一致,該PID 對應(yīng)的是“mysqld”進程。這說明“mysqld”進程引發(fā)了I/O 瓶頸問題。

      但是,該進程為什么要去讀取大量的磁盤數(shù)據(jù)呢,這很有可能和MySQL 的慢查詢有關(guān)。對于慢查詢來說,其造成的故障現(xiàn)象基本上都會CPU 使用率過高的問題,一般并不會引發(fā)I/O 瓶頸。

      要想對MySQL 讀取數(shù)據(jù)情況進行分析,需要使用到Strace 命令。我們知道,Strace 是一個可用于診斷、調(diào)試和教學(xué)的Linux 用戶空間跟蹤器??梢岳迷撁顏肀O(jiān)控用戶空間進程和內(nèi)核的交互,比如系統(tǒng)調(diào)用、信號傳遞、進程狀態(tài)變更等。因為MySQL 是一個支持多線程的數(shù)據(jù)庫工具,因此需要對其使用到的線程進行全面分析。

      執(zhí) 行“strace -f -p 28716”命令,在返回信息中顯示和MySQL 相關(guān)的所有線程的數(shù)據(jù)讀取信息,可以看到PID 為21970 的線程正在讀取大量的磁盤數(shù)據(jù),其讀取的文件描述符編號為91,接著需要查找與該編號對應(yīng)的文件。

      執(zhí)行“l(fā)sof -p 21970”命令,奇怪的是并沒有返回任何信息,說明沒有找到對應(yīng)的文件。執(zhí)行“echo $?”命令,得到的返回值為“1”,這說明上述命令執(zhí)行失敗,因為只有返回“0”,才說明沒有問題。這表明MySQL 使用了很多線程,僅僅使用其中一個線程號進行查詢是沒有辦法找到目標文件的。

      執(zhí)行“l(fā)sof -p 28716”命令,使用MySQL 的進程的PID 進行查看,在返回信息中顯示MySQL 打開了很多的文件,根據(jù)上述文件描述符的編號,發(fā)現(xiàn)與其對應(yīng)的文件為“/var/lib/data/products.myd”,注意MySQL是以讀寫方式訪問該文件的。

      根據(jù)這些信息,說明使用了MyISAM 引擎來存儲數(shù)據(jù)。即MySQL 在讀取“DATA”數(shù)據(jù)庫中的“products”數(shù)據(jù)表。進入該目錄,執(zhí)行“l(fā)s”命令,可以顯示相關(guān)的表文件,索引文件,元數(shù)據(jù)文件和原信息文件等。

      進入MySQL 控制臺,執(zhí)行“show global variables like "%datadir% ";”命令,可以看到MySQL 當前正在使用的數(shù)據(jù)庫路徑,這和上述查詢到的信息一致。執(zhí)行“show full processlist;”命令,在返回信息中顯示當前的用戶名、主機名、使用的數(shù)據(jù)庫名稱、執(zhí)行的命令類型,執(zhí)行的時間、狀態(tài)、執(zhí)行的語句等信息,例如在“Command”列中顯示“query”,表示執(zhí)行的額是查詢操作,在“Info”列中顯示具體的查詢語句。

      故障解決

      對于MySQL 的慢查詢來說,如果沒有設(shè)置好索引的話,很容易出現(xiàn)查詢緩慢的問題。執(zhí)行“use data;”,“explain xxx;”命令,其中的“xxx”為在上述命令中找到的查詢命令。

      在返回信息中的“select_type”列中顯示查詢的類型,這里顯示為“simple”,表示查詢中沒有包括“union”查詢或者子查詢,在“table”列中顯示數(shù)據(jù)表的名稱,在“type”列中顯示查詢類型,在“possible_keys”列中顯示可能引用的索引,這里為“NULL”。在“key”列中顯示確切使用的索引,這里為“NULL”。在“rows”列中顯示掃描的行數(shù)。

      根據(jù)以上分析,這里并沒有使用索引,當掃描的行數(shù)很多時,自然會出現(xiàn)反應(yīng)遲緩的問題。

      看來,只要為其配置好索引,問題就可以解決了。執(zhí) 行“CREATE INDEX products_index ON products(produceID);”命令,為該表添加索引,但是出現(xiàn)“EEEOR 1170”的錯誤信息,這說明必須為該字段設(shè)置一個合適的前綴長度。

      執(zhí)行“CREATE INDEX products_index ONproducts(product ID(64));”命令,使用一個合適的的數(shù)值來充當前綴,順利為該表創(chuàng)建索引。這樣,再執(zhí)行查詢時,可以看到速度大大提高了。

      根據(jù)以上分析,不難發(fā)現(xiàn)對于MySQL慢查詢來說,如果沒有設(shè)置索引的話,很容易出現(xiàn)查詢緩慢的問題。其實,對于MySQL 的MyISAM 引擎來說,其主要依靠系統(tǒng)緩存來加速磁盤的I/O 訪問,如果系統(tǒng)中存在其他的進程,必然會占用一定的系統(tǒng)緩存,就會造成MyISAM引擎引擎難以充分利用系統(tǒng)緩存,自然會造成運行緩慢等問題。

      所以,不要將MySQL 等程序的的性能優(yōu)化完全建立在系統(tǒng)緩存之上,最好能夠在應(yīng)用程序內(nèi)部分配內(nèi)存,組建完全自主控制的緩存管理機制。

      猜你喜歡
      磁盤線程命令
      只聽主人的命令
      解決Windows磁盤簽名沖突
      電腦愛好者(2019年2期)2019-10-30 03:45:31
      修改磁盤屬性
      移防命令下達后
      磁盤組群組及iSCSI Target設(shè)置
      淺談linux多線程協(xié)作
      創(chuàng)建VSAN群集
      這是人民的命令
      藍色命令
      Linux線程實現(xiàn)技術(shù)研究
      临沭县| 岳阳县| 屏东市| 大名县| 石屏县| 乡城县| 县级市| 新郑市| 晋州市| 大方县| 绥江县| 三江| 曲水县| 宜昌市| 长宁区| 邢台县| 辰溪县| 尚志市| 墨竹工卡县| 博爱县| 大埔区| 新余市| 云安县| 酉阳| 武功县| 隆回县| 渝中区| 四会市| 綦江县| 田林县| 吉木萨尔县| 肥东县| 望都县| 弥勒县| 鄂尔多斯市| 泸西县| 泽库县| 南部县| 中山市| 麦盖提县| 广东省|