MySQL 首行查詢陷阱

2021-09-23 19:35:52 字數 589 閱讀 4501

今天在執行一條 query 的時候,發現資料庫用了6分鐘才返回資料,而這條 query 僅僅是很簡單的select * from foo limit 1.

foo 這個表裡有近1t的資料, 但是這不應該成為返回慢的原因. 有同事發現這條語句只掃瞄了1行資料, 這是符合我們預期的, 但是為什麼掃瞄一行資料花了6分鐘呢?

接下來我們發現此時資料庫上io 壓力非常大, 而且髒頁比例很高. 問了下同事, 這個表最近在做歷史資料遷移, 這時候真相就水落石出了.

什麼叫髒頁? 在 mysql 刪除一條資料的時候, 並不是直接從資料檔案中刪除它, 而是先把它標記為 delete, 而後有非同步的purge執行緒進行清理.而還沒有被清理的資料所存在的頁, 我們稱之為髒頁.

在這個 case 中, 資料庫先去資料檔案中找1條記錄,拿出來一看,發現這條記錄是被標記 delete 的, 資料庫又只能回去找下一條. 而當髒頁比例很高且 io 壓力很大的情況下, 要遍歷找出第一條記錄前, 很可能有大量的髒記錄, 這就是為什麼資料庫花了6分鐘才返回的原因.

這個問題只有等資料庫 purge 執行緒再工作一段時間,就會自動消失.

mySQL首行縮排快捷鍵 首行縮排怎麼設定

本篇文章所說的內容是乙個用html縮排段落第一行的 我們要知道縮排段落需要用到的屬性是text indent,下面我們就來看一看具體的內容。語法格式 text indent 縮排寬度 示例1 縮排單個字元 通過指定 text indent 1em 縮排乙個字元的段落的開頭。如下 p 但教心似金鈿堅,...

mysql列傳行查詢

create table test2 name varchar 255 default null,kemu varchar 255 default null,chengji int 10 default null engine innodb default charset utf8 建立表 inse...

TextView首行縮排

方法一 settext u3000 u3000 xx 半形 u0020 全形 u3000 方法二 這種方式不同解析度會有問題 settext xx 方法三 是從網上大神看到的,就是首行多寫兩個字,但是顯示時,這兩個字要進行隱藏 spannablestringbuilder span new span...