資料庫的 Buffer Pool 如何提高並行度?

時間 2021-05-08 02:30:19

1樓:李晨曦

既然鎖的粒度太大了,最簡單的方法就是減小鎖的粒度就好了,你的實現是全域性鎖,這種肯定慢,執行緒數多的時候甚至比單執行緒還慢。改成範圍鎖或者槽鎖就能夠大幅度提公升效能了,hashtable的每個槽一把鎖,操作page_id對映到同乙個槽的page時才會有衝突,否則是沒有鎖衝突的。極端情況下所有執行緒總是操作同乙個槽,也會相當於一把大鎖,但是概率上會均勻分布的,基本上可以達到隨著cpu數量增加效能線性擴充套件。

但是鎖的個數多了,占用的記憶體空間就大了,假如乙個鎖是4 bytes,頁面大小為4KB,記憶體空間為256G,全部給buffer pool用,那麼頁面的個數為256*1024*1024/4=67108864個,為了使hashtable鍊錶的長度較短,槽的數量設為1000萬個,鎖的空間就是4*1000萬/1024/1024=38.15 MB,不過也還好。

2樓:郭忠明

我覺得最簡單的方法是拆分成多個,類似mysql的buffer pool設計,利用乙個hash函式,按照page id值計算,分出cpu數量的buffer pool,根據hash值訪問不同的buffer pool, 將原來的一把鎖拆分為N把鎖,那麼就幾乎沒有衝突了,併發度約等於cpu數量。

3樓:

說到底, 還是KV對映.

我知道有兩條路,

一條叫做無鎖Skiplist

一條叫做BW-Tree

Skiplist好實現, 而且也不繞.

雲資料庫對比傳統資料庫好在哪?

這是哪個雲廠商又來搞運營話題了嗎?凡事有利必有弊,需要根據自己的情況選擇合適自己的。正式一點來說,雲資料庫省掉了機房 機器 安裝 調優 運維等等下幾路的基礎工作,外包給別人了,而且擴容 縮容之類的工作也都可能外包了。可是,這個外包並不總是比自己靠譜。而且還有服務響應速度,資料安全保密,是否跟你有競爭...

資料庫的選擇?

破緊逼 推薦學習oracle,因為sqlserver還是做了比較多的封裝,但是oracle會比較複雜,概念也比較多,能學到比較多的資料庫細節,之後學其他資料庫就游刃有餘 postgres django,在搬瓦工買個vps,3.99刀用一年。資料庫遷移沒什麼難度,django提供了 URL routi...

Arcgis建立的個人資料庫和檔案資料庫有什麼區別呢?

xomap Personal GDB 檔案實質是Access庫,檔案大小最大2G。File GDB則沒有檔案大小上線,且可以跨平台。 補充,gdb可以使用gdal驅動中的filegdb api進行簡單讀寫 相同 均為GeoDatabase資料模型的實現,均為物件導向的地理資料庫,不開源 不同 個人地...