PerconaXtraDBClusterGCache和Record-Set快取

leshami發表於2018-04-19

在Percona XtraDB叢集中,有一個GCache和Record-Set快取(也可稱為事務寫集快取)的概念。如果您正在執行長事務,那麼使用這兩個快取通常會造成混淆,因為它們都會導致建立磁碟級檔案。本手冊介紹了它們的主要區別。

一、記錄集快取(Record-Set Cache)

當您在任何特定節點上執行長時間執行的事務時,它將嘗試為其嘗試修改的每一行附加一個金鑰(金鑰是該行的唯一識別符號{db,table,pk.columns})。這些資訊被快取在out-write-set中,然後傳送給組進行認證。

金鑰被快取在HeapStore中(有page-size=64K和total-size=4MB)。如果事務資料大小超過此限制,則儲存將從堆切換到頁(其具有page-size=64MB和total-limit=free-space-on-disk)。

所有這些限制都是不可配置的,但每次事務的記憶體頁大小大於4MB可能會由於記憶體壓力而導致事件停止,因此此限制是合理的。當Galera支援大型事務時,這是另一個限制。

同樣長時間執行的事務也會生成binlog資料,這些資料也會附加到commit(HeapStore-> FileStore)上的out-write-set。 這些資料可能很重要,因為它是由事務插入/更新/刪除的行的二進位制日誌映像。 wsrep_max_ws_size變數控制這部分寫入集的大小。 該閾值不考慮為快取鍵和標題分配的大小。

如果FileStore被使用,它將在磁碟上建立一個檔案(名稱如xxxx_keys和xxxx_data)以儲存快取資料。這些檔案一直儲存到提交事務,因此事務的生命週期被連結。

當節點完成事務並即將提交時,它將使用這兩個檔案(如果資料大小足夠長以便使用FileStore)生成最終寫入集HEADER,並將其釋出為叢集認證。

執行事務的本地節點也將充當訂閱節點,並將通過群集釋出機制接收其自己的寫入集。這一次,本地節點將嘗試將寫入集快取到其GCache中。GCache配置控制GCache保留多少資料。

二、GCache

GCache儲存在群集上釋出的寫入集以進行復制。在GCache中寫入集的生命週期不是事務連結的。

當一個JOINER節點需要一個IST時,它將通過這個GCache進行服務(如果可能的話)。

GCache也將建立檔案到磁碟。

在任何給定的時間點,本地節點都有兩個寫入集副本:一個在GCache中,另一個在記錄集快取中(Record-Set Cache)。

例如,讓我們INSERT/UPDATE在一個表格中說出200萬行,並使用以下模式。

(int , char (100 ), char (100 ) 與 pk (int , char (100 ))
它將在後臺建立寫入鍵/資料檔案,類似於以下內容:

-rw ——- 1 XXX XXX 67108864年04月11 12:26 0x00000707_data.000000
-rw ——- 1 XXX XXX 67108864年04月11 12:26 0x00000707_data.000001
-rw ——- 1 XXX XXX 67108864年04月11 12:26 0x00000707_data.000002
-rw ——- 1 XXX XXX 67108864年04月11 12:26 0x00000707_keys.000000


相關文章