在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