MySQL预读失效_华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题...
隨著用戶對數據訪問速度的日益重視,MySQL數據庫在最初的設計中,采用了線性預讀的方式,提前將即將使用的數據預讀到Buffer pool中,來提升數據的訪問速度,但在實際使用過程中,線性預讀失效的問題愈來愈突出。
對于存在時間比較長,變更又比較頻繁,除非我們對于這張表進行重建,否則該表會存在大量的數據碎片,導致數據存放不連續,這樣會使MySQL原有的線性預讀功能失效,導致某些查詢語句變很慢,如:全表掃描,范圍掃描等。
頻繁變更操作會破壞數據的連續性
一般情況下,當我們在數據存放連續時執行全表掃描,數據庫就會異步地把這些數據從磁盤加載到Buffer pool,從而提高數據庫的處理速度。比如當我們訪問了Row A1,Row A2,Row A3時,數據庫會認為你下次有極大的概率去訪問Row A4,Row A5,Row A6,從而自動異步地把這些數據加載到Buffer pool中。
但如果在這張表上頻繁地執行變更操作,則會破壞數據的連續性。在我們訪問Row A1,Row A2,Row A3時,數據庫發現這三行數據并不連續,所以數據庫不會提前將Row A5,Row A6從磁盤異步地加載到Buffer pool,只能一個一個的去請求、加載,從而影響訪問效率。數據連續時,訪問500w Row數據需要12s,但是數據不連續時,訪問500w Row數據需要34s。
對于在線應用來說,重建表會產生較大的運維風險,數據面臨丟失的可能。那到底有沒有什么特性可以在不重建表的情況下,彌補線性預讀失效的問題呢?
線性預讀的失效催生出“邏輯預讀”特性
華為云RDS數據庫服務,新開發了“邏輯預讀”特性,在不重建表的情況下,彌補線性預讀失效的問題,從而提高分析型業務的執行效率。
“邏輯預讀”特性,在預讀數據的時候,首先通過對要預讀的數據的頁號進行排序,去除數據不連續的影響,然后合并相鄰數據頁的IO請求,減少磁盤IO的總請求次數,從而提高數據預讀的命中率和效率。
華為云數據庫團隊做了一個測試:采用8核16GB 100GB?SSD規格的Linux機器,測試2.4GB大小500w Rows存在碎片的數據,執行select *from tablename(全表掃描查詢),結果如下:
由此可見,相比開源版本,華為云MySQL邏輯預讀特性大大縮短了訪問時長,極大提升了執行效率,為分析型業務的進一步發展注入了新動力。
每一個改變都是為了更好的服務客戶,華為云MySQL邏輯預讀特性的推出,不僅很好地彌補了線性預讀的失效問題,提升了分析型業務的執行效率,更是為客戶的業務場景保駕護航,助力其創新發展,實現更多價值。
更多詳情了解,敬請前往華為云官網:產品——基礎服務——數據庫。
(本內容屬于網絡轉載,文中涉及圖片等內容如有侵權,請聯系編輯刪除)
總結
以上是生活随笔為你收集整理的MySQL预读失效_华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html公式输入空格,mathtype怎
- 下一篇: day15 webUI自动化