中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

wordpress 文章結(jié)尾杭州seo網(wǎng)站排名優(yōu)化

wordpress 文章結(jié)尾,杭州seo網(wǎng)站排名優(yōu)化,怎么做黑客攻擊網(wǎng)站,廣州空港經(jīng)濟區(qū)門戶網(wǎng)站Buffer Pool 本文參考開源項目:小林coding在線文檔; 01-緩沖池概述 ? 在MySQL查詢數(shù)據(jù)的時候,是通過存儲引擎去磁盤做IO來獲取數(shù)據(jù)庫中的數(shù)據(jù),這樣每次查詢一條數(shù)據(jù)都要去做一次或者多次磁盤的IO,無疑是非常慢的?!?article class="baidu_pl">

Buffer Pool

本文參考開源項目:小林coding在線文檔;

01-緩沖池概述

? 在MySQL查詢數(shù)據(jù)的時候,是通過存儲引擎去磁盤做IO來獲取數(shù)據(jù)庫中的數(shù)據(jù),這樣每次查詢一條數(shù)據(jù)都要去做一次或者多次磁盤的IO,無疑是非常慢的。而緩沖池就能非常好的解決這個問題。

? 當數(shù)據(jù)從磁盤中取出后,緩存內(nèi)存中,下次查詢同樣的數(shù)據(jù)的時候,直接從內(nèi)存中讀取。為此,Innodb 存儲引擎設計了一個緩沖池(Buffer Pool),來提高數(shù)據(jù)庫的讀寫性能

有了緩沖池后:

  • 當讀取數(shù)據(jù)時,如果數(shù)據(jù)存在于 Buffer Pool 中,客戶端就會直接讀取 Buffer Pool 中的數(shù)據(jù),否則再去磁盤中讀取。
  • 當修改數(shù)據(jù)時,首先是修改 Buffer Pool 中數(shù)據(jù)所在的頁,然后將其頁設置為臟頁,最后由后臺線程將臟頁寫入到磁盤。

在這里插入圖片描述

02-緩沖池存儲的內(nèi)容

2.1-數(shù)據(jù)頁在緩沖池中的存儲

? InnoDB 會把存儲的數(shù)據(jù)劃分為若干個「頁」,以頁作為磁盤和內(nèi)存交互的基本單位,一個頁的默認大小為 16KB。因此,Buffer Pool 同樣需要按「頁」來劃分。

? 在 MySQL 啟動的時候,InnoDB 會為 Buffer Pool 申請一片連續(xù)的內(nèi)存空間,然后按照默認的16KB的大小劃分出一個個的頁,Buffer Pool 中的頁就叫做緩存頁。此時這些緩存頁都是空閑的,之后隨著程序的運行,才會有磁盤上的頁被緩存到 Buffer Pool 中。

Buffer Pool 除了緩存「索引頁」和「數(shù)據(jù)頁」,還包括了 undo 頁,插入緩存、自適應哈希索引、鎖信息等等。

在這里插入圖片描述

接下來我們討論一下數(shù)據(jù)在緩沖池中是如何存儲以及處理的:

1、既然我們要在緩沖池里存儲數(shù)據(jù)頁,那么數(shù)據(jù)頁是怎樣存儲的呢?

? 在MySQL啟動的時候,會申請一段連續(xù)的內(nèi)存空間,緩沖池里有著許多的緩存頁,而每個緩存頁有唯一對應一個控制塊,實際的存儲情況如下圖所示:

在這里插入圖片描述

2、為什么上圖會有空白的地方?

? 上圖中控制塊和緩存頁之間灰色部分稱為碎片空間。每一個控制塊都對應一個緩存頁,那在分配足夠多的控制塊和緩存頁后,可能剩余的那點兒空間不夠一對控制塊和緩存頁的大小,自然就用不到嘍,這個用不到的那點兒內(nèi)存空間就被稱為碎片了。

? 當然,如果你把 Buffer Pool 的大小設置的剛剛好的話,也可能不會產(chǎn)生碎片。

2.2-緩沖池數(shù)據(jù)頁的管理

2.2.1-Free鏈表

? 當我們的MySQL運行了一段時間后,緩沖池中的頁有空閑的也有被使用的,當讀取緩沖池中沒有的數(shù)據(jù)時,我們要從磁盤去讀取,磁盤讀取之后,需要存到緩沖池。

? 但是此時我們讀取到的數(shù)據(jù)應該放到哪個頁中呢?當然是得放在空閑頁中,那么我們應該如何找到空閑頁呢,在MySQL緩沖池中,MySQL建立了一個Free鏈表,用來管理空閑的緩存頁,當我們從磁盤新讀到的數(shù)據(jù),Free鏈表如圖所示。

在這里插入圖片描述

2.2.2-Flush鏈表

? 當對MySQL的數(shù)據(jù)進行修改操作后,并不需要每次都將緩沖池中的頁寫入磁盤,因為這樣效率是比較低的,當緩存頁中的數(shù)據(jù)發(fā)生改變后,MySQL會將該頁標識為臟頁。

? 與空閑頁相同,MySQL也有一個Flush鏈表,記錄了緩沖池中所有的臟頁,Flush鏈表中的元素都是臟頁,這樣將臟頁寫入磁盤中就不用再去遍歷所有的緩存頁查看是否是臟頁了,直接將Flush鏈表中的所有對應的緩存頁寫入磁盤就行,Flush鏈表如下圖所示:

在這里插入圖片描述

2.2.4-LRU鏈表

? MySQL為了提高緩沖池的命中率,對于一些頻繁使用的數(shù)據(jù)需要將其留在緩沖池中,在MySQL中使用了LRU(最近最少使用算法),該算法會淘汰最近最少使用的頁,在MySQL緩沖池中有一個LRU鏈表。

下圖我們可以看到LRU鏈表有一個頭指針和尾指針,一個簡單的LRU算法的實現(xiàn)是這樣的:

  • 當訪問的頁在 Buffer Pool 里,就直接把該頁對應的 LRU 鏈表節(jié)點移動到鏈表的頭部
  • 當訪問的頁不在Buffer Pool里時,需要先把頁放在LRU鏈表的頭部,還要將尾部的頁淘汰掉

假設現(xiàn)在有一個LRU鏈表,長度為5,目前有1、2、3、4、5五個頁位于LRU鏈表中,也就是說有五個位于緩沖池中,如圖所示:

在這里插入圖片描述

現(xiàn)在假設我們要訪問頁3,那么我們就會將頁3移動到head的位置,如圖下圖所示:

在這里插入圖片描述

現(xiàn)在假設我們要訪問頁8,但是頁8位于磁盤中,所以此時我們要將頁8加入到LRU鏈表中,因此我們會淘汰掉末尾的頁5,如圖所示:

在這里插入圖片描述

2.2.5-預讀失效

? 對于如上所示的LRU算法會有一個預讀失效的問題,我們先來解釋一下預讀失效是什么。

? 在MySQL加載數(shù)據(jù)頁到緩沖池中時,由于空間局部性【訪問謀個數(shù)據(jù)后,接下來很可能會訪問其相鄰的數(shù)據(jù)】,加載磁盤中的頁到內(nèi)存時,會將相鄰存儲的頁也加載到內(nèi)存中,但是如果提前加載的數(shù)據(jù)接下來不會被訪問,這個就叫做預讀失效。

? 預讀失效導致的問題:

? 如果使用上述的LRU算法,那么就會導致一個問題,由于預讀失效,加載了不會被訪問的頁放在了緩沖池中,由于加載了新的頁,所以會要淘汰緩沖池中存在的頁,那么就會導致緩沖池中可能會被頻繁訪問的頁被淘汰了出去,這樣就會降低緩沖池命中率。

? MySQL對于預讀問題的解決方案是將LRU鏈表劃分成young區(qū)域和old區(qū)域,young區(qū)在LRU鏈表的前半部分,而old區(qū)域在LRU鏈表的后半部分。如下圖所示。

在這里插入圖片描述

? 關于young區(qū)域和old區(qū)域在LRU鏈表中的占比也可以通過參數(shù)設置,可以通過innodb_old_blocks_pct參數(shù)進行設置,默認值是37,代表在緩沖池中,young區(qū)域和old區(qū)域占比是63:37。

? 解決預讀失效產(chǎn)生的問題,當發(fā)生預讀的時候,MySQL不會將預讀的數(shù)據(jù)放到y(tǒng)oung區(qū)域,而是放在old區(qū)域的head部分,只有當預讀的數(shù)據(jù)被訪問的時候,才會被放在young區(qū)域的head部分,

2.2.6-Buffer Pool污染

? 上述使用LRU鏈表分young區(qū)和old區(qū)雖然能夠解決預讀失效導致的命中率下降問題,但是還存在Buffer Pool污染問題,我們先來介紹一下什么是buffer pool污染。

? 當一個SQL語句掃描了大量的數(shù)據(jù)的時候,在緩沖池空間比較有限的情況下,可能會將緩沖池中所有的熱點數(shù)據(jù)都替換出去,等這些熱點數(shù)據(jù)被再次訪問的時候,由于緩存沒有命中,就會產(chǎn)生大量磁盤IO,導致MySQL性能急劇下降,這種情況就叫Buffer Pool污染。

? 關于Buffer Pool污染的問題,MySQL是這樣處理的,進入young區(qū)域條件增加了一個停留在old區(qū)域的時間判斷。具體的處理是這樣的,當訪問第一次old區(qū)域的某個緩存頁時,在其對應的控制塊中記錄當前訪問的時間:

  • 如果后續(xù)訪問時間與第一次訪問的時間在某個時間段內(nèi),那么這個緩存頁不會從old區(qū)移到y(tǒng)oung區(qū)的頭部
  • 如果后續(xù)訪問時間與第一次訪問的時間不在某個時間段內(nèi),那么就會將這個緩存頁從old區(qū)域移動到y(tǒng)oung區(qū)的頭部

這個時間間隔可以通過innodb_old_blocks_time控制,默認的時間是1000ms。

? 如果在默認的情況下,只有同時滿足一次以上的訪問以及在old區(qū)停留超過1s兩個條件,才會被從old區(qū)移動到y(tǒng)oung區(qū)的頭部,這樣就解決了Buffer Pool污染的問題。

?

http://www.risenshineclean.com/news/44541.html

相關文章:

  • 描述政府網(wǎng)站網(wǎng)站建設seo推廣網(wǎng)絡
  • 淘寶網(wǎng)站怎么做適配seo專員的工作內(nèi)容
  • 商業(yè)網(wǎng)站建設規(guī)劃范文招商外包
  • 濟南有哪些網(wǎng)站是做家具團購的2023第二波疫情已經(jīng)到來了嗎
  • 衡陽做網(wǎng)站的挖掘愛站網(wǎng)
  • 找什么人做公司網(wǎng)站小小課堂seo自學網(wǎng)
  • 南寧網(wǎng)站建設推廣優(yōu)化種子搜索引擎torrentkitty
  • 中國農(nóng)村建設網(wǎng)站關于進一步優(yōu)化
  • 網(wǎng)站開發(fā)語言是什么網(wǎng)站制作app免費軟件
  • 吉林省軟環(huán)境建設辦公室網(wǎng)站百度快速排名點擊器
  • 企業(yè)管理系統(tǒng)項目經(jīng)理招聘seo優(yōu)化排名易下拉效率
  • 中企動力做的網(wǎng)站容易SEO嗎投放廣告的網(wǎng)站
  • 那些網(wǎng)站企業(yè)可以免費展示輕松seo優(yōu)化排名
  • 如何做虛擬幣交易網(wǎng)站外貿(mào)推廣如何做
  • 做經(jīng)營性網(wǎng)站需要哪些東西搜狗站長推送工具
  • 二手的家具哪個網(wǎng)站做的好濟南新聞頭條最新事件
  • 網(wǎng)站設計的能力要求哈爾濱新聞頭條今日新聞
  • 暴雪退款申請快速入口seo 0xu
  • 西安成品網(wǎng)站建設怎么打廣告吸引客戶
  • 免費設計海報網(wǎng)站seo優(yōu)化網(wǎng)站
  • 北京建設網(wǎng)站網(wǎng)站上海做seo的公司
  • 網(wǎng)站版塊設計廣告營銷
  • 沒有主機怎么做自己的網(wǎng)站西安網(wǎng)站seo哪家公司好
  • 福建省建設工程招投標信息網(wǎng)優(yōu)化大師會員兌換碼
  • 怎么做網(wǎng)站統(tǒng)計流量寶官網(wǎng)
  • 網(wǎng)站設計與建設的2345瀏覽器影視大全
  • 網(wǎng)站如何做視頻鏈接地址個人友情鏈接推廣
  • 谷城網(wǎng)站快速排名百度競價排名醫(yī)院事件
  • 淄博市 網(wǎng)站建設報價大一html網(wǎng)頁制作作業(yè)簡單
  • 黃岡網(wǎng)站建設有哪些seo代理計費系統(tǒng)