全部產品
Search
文件中心

PolarDB:X-Engine引擎常見問題

更新時間:Oct 25, 2024

本文匯總了與X-Engine引擎相關的常見問題。

X-Engine引擎是什麼,能解決什麼問題?

X-Engine是阿里巴巴自研的基於LSM-tree架構的儲存引擎,提供了強大的資料壓縮能力,滿足了歸檔資料庫低儲存成本的要求。通過LSM-Tree(Log-Structured Merge-Tree)層次化架構和Zstandard(ZSTD)壓縮演算法實現了更高的資料壓縮率,相較於使用InnoDB作為儲存引擎,最高可節省70%的儲存空間。相關文檔請參見高壓縮引擎(X-Engine)

X-Engine壓縮效果怎樣?

X-Engine引擎預設開啟資料壓縮功能。一般情況下,相對於InnoDB引擎,儲存空間能壓縮到1/3至1/10,具體壓縮比例與資料特徵有關。X-Engine引擎支援通過採樣資訊來估算壓縮比,您可以結合外部資訊(如資料匯入前的資料大小)自行計算準確的壓縮率。

假設需要查詢的表在資料庫test中,表名為test1,來查詢表資料估算後的壓縮比。SQL語句如下:

SELECT 
    TABLE_NAME,
    SUBTABLE_NAME,
	SUM(EXTENTS*APRROX_CMP_RATIO)/SUM(EXTENTS)
FROM 
	INFORMATION_SCHEMA.XENGINE_SUBTABLE 
WHERE TABLE_NAME = 'test.test1' AND SUBTABLE_NAME = 'PRIMARY' AND LEVEL in (1, 2);

SQL語句中XENGINE_SUBTABLE表的Schema資訊如下表:

列名

說明

TABLE_NAME

由資料庫名稱和表名拼接而成。如test.test1

SUBTABLE_NAME

索引名稱。

LEVEL

邏輯層號。

EXTENTS

邏輯層使用的extent數量。

NUM_ENTRIES

當前邏輯層的資料量。

NUM_DELETES

邏輯層刪除的資料量。

APRROX_CMP_RATIO

當前邏輯層採樣近似壓縮比。

SAMPLE_OUTDATED

當前邏輯層的採樣資訊是否到期。

說明
  • 支援使用SQL語句查詢壓縮比的企業版叢集版本需要滿足以下條件之一:

    • PolarDB MySQL版8.0.1版本,且修訂版本為8.0.1.1.40及以上。

    • PolarDB MySQL版8.0.2版本,且修訂版本為8.0.2.2.22及以上。

  • X-Engine引擎中的表是基於LSM-Tree的索引組織表,表資料存放區在主索引中。主索引LSM-Tree分為3層,大部分資料集中在第1層和第2層,其中第0層是從記憶體直接轉儲的資料,不進行資料壓縮。因此,查詢壓縮率的SQL語句中使用LEVEL in (1, 2)來計算這兩層壓縮比的加權平均值,從而得到X-Engine中的表資料的壓縮比。

  • 如果要查詢某個二級索引上的資料的壓縮比,需要在SQL語句中指定SUBTABLE_NAME索引名稱。

大量匯入資料到X-Engine表後為什麼壓縮率較低?

X-Engine採用後台非同步壓縮技術,是在不影響業務使用的情況下,逐漸重整並壓縮資料以達到理想壓縮率。重整和後台壓縮操作一般在業務低峰期進行。因此,大量匯入後,資料存放區空間可能接近壓縮前水平,一段時間後空間將逐步釋放。

X-Engine引擎相比RocksDB引擎、TokuDB引擎如何?

X-Engine引擎壓縮率與TokuDB、RocksDB引擎壓縮率接近。目前TokuDB社區已經停滯發展,後續資料庫服務的可持久性無法保證,之前阿里雲上存量的TokuDB使用者已全部轉到X-Engine引擎。相對RocksDB引擎以及對應的myrocks產品,PolarDB高壓縮引擎(X-Engine)的核心優勢是提供了海量儲存,彈性以及線上變更schema的能力。相關文檔請參見X-Engine性價比優勢

購買PolarDB叢集時,如何選擇使用X-Engine引擎?

PolarDB MySQL版8.0版本支援X-Engine引擎,PolarDB高壓縮引擎(X-Engine)的建立方式與PolarDB叢集建立方式一致,您只需在售賣頁選擇相容性MySQL 8.0,且系列高壓縮引擎(X-Engine)即可。

已經使用的PolarDB叢集,是否支援開啟X-Engine引擎?

目前PolarDB的最新版本已經支援存量PolarDB叢集開啟X-Engine引擎功能。選擇PolarDB叢集,在左側導覽列選擇配置與管理->高壓縮引擎即可。動態開啟X-Engine引擎的功能需要PolarDB MySQL版8.0版本且核心小版本需為8.0.1.1.31及以上。

如何使用X-Engine引擎表?

對於建立表,直接指定engine=xengine即可;對於存量表,可以通過ALTER語句將錶轉換為X-Engine引擎。相關文檔請參見InnoDB/TokuDB/Myrocks引擎轉換為X-Engine引擎

X-Engine是否有相關的客戶案例?

X-Engine引擎已經支援了阿里巴巴叢集和阿里雲的大量使用者,累計資料量達到PB層級,總體執行個體數目超過3000+。客戶案例相關文檔請參見X-Engine最佳實務

X-Engine引擎功能是否收費?

購買使用X-Engine引擎與InnoDB引擎計費規則一致,不額外單獨收費。具體來說,如果存放在InnoDB引擎的資料是100 GB,存放在X-Engine引擎時資料被壓縮為30 GB,就按照30 GB的儲存容量計費。

PolarDB(X-Engine)相對於RDS(X-Engine)優勢是什嗎?

PolarDB(X-Engine)提供了海量的儲存空間,徹底解決使用者的容量焦慮,最大支援500 TB的儲存空間,PolarDB(X-Engine)採用存算分離技術,彈性增/減唯讀節點,一份資料至多支援16個唯讀節點。PolarDB(X-Engine)採用分布式儲存,資料庫的高可用不再需要依賴Binlog複製,間接提高了寫入效能。

PolarDB MySQL版5.6/5.7版本是否支援X-Engine引擎?

不支援。

X-Engine支援事務嗎?

支援事務。

X-Engine支援OnlineDDL嗎?

支援,執行DDL變更過程中,不會阻塞其它事務的更新。

X-Engine支援並行DDL嗎?

支援。

X-Engine引擎支援行鎖嗎?

X-Engine引擎支援行粒度的並發控制,並支援死結檢測,與InnoDB引擎一致。

X-Engine引擎支援哪些隔離等級?

支援read-committed,repeatable-read隔離等級,預設的隔離等級是read-committed。

X-Engine引擎支援大事務嗎?

不支援大事務。對於大事務,內部會自動按行拆分,當一個事務修改的行數等於或大於10000行時,X-Engine會啟用commit in middle功能,即X-Engine會在內部提交該事務,並重新開啟一個子事務繼續執行該事務。

X-Engine支援分區表嗎?

支援。叢集版本需滿足以下要求:

  • PolarDB MySQL版8.0.1版本且修訂版本為8.0.1.1.34及以上。

  • PolarDB MySQL版8.0.2版本且修訂版本為8.0.2.2.16及以上。

說明
  • 該功能目前處於灰階發布階段,如果需要開啟該功能,請前往配額中心,根據配額IDpolardb_mysql_xengine_partition找到配額名稱,在對應的操作列單擊申請來申請開通該功能。

  • 如需瞭解更多關於建立X-Engine分區表的內容,請搜尋DingTalk群號加群進行諮詢。DingTalk群號:24490017825。

X-Engine支援列索引分析嗎?

不支援。

X-Engine引擎有哪些功能限制?

X-Engine引擎是一個事務引擎,完全相容MySQL協議,具備儲存引擎常用功能,對於一些進階功能的支援還不完善,具體使用限制請參見X-Engine使用說明

X-Engine支援不同儲存介質冷熱分離嗎?

不支援。

X-Engine支援並行查詢嗎?

目前僅PolarDB MySQL版8.0.1版本且修訂版本為8.0.1.1.34及以上的版本支援並行查詢。

X-Engine引擎的效能怎樣?

X-Engine引擎採用LSM-tree組織資料,寫入友好,寫入效能強,讀能力相對較弱。X-Engine引擎預設對資料開啟壓縮,綜合效能相對於InnoDB引擎略有下降,在標準Sysbench壓測情境下,效能較InnoDB引擎下降10%-20%之間。詳情請參見PolarDB MySQL版8.0.1版本高壓縮引擎(X-Engine)與叢集版效能對比

如何查看X-Engine引擎中的表佔用的儲存空間容量?

使用叢集主地址串連資料庫叢集,根據需要查詢的庫名和表名在XENGINE_SUBTABLE表中查詢該表對應的TABLE_SPACE_ID,並通過查詢到的TABLE_SPACE_IDINFORMATION_SCHEMAXENGINE_TABLE_SPACE表中查看該表已使用的extent數量,再根據extent數量計算出該表佔用的儲存空間容量。

說明

單個extent佔用的儲存空間容量為2 MB。

假設要查詢的表所在的資料庫為test,表名為test1,則查詢表佔用的儲存空間容量的SQL語句如下:

SELECT 
 	SUM(TOTAL_EXTENT_COUNT)/512 AS SIZE_GB,
  SUM(USED_EXTENT_COUNT)/512 AS USED_SIZE_GB,
  SUM(FREE_EXTENT_COUNT)/512 AS FREE_SIZE_GB
FROM 
	INFORMATION_SCHEMA.XENGINE_TABLE_SPACE
WHERE TABLE_SPACE_ID IN (
  SELECT TABLE_SPACE_ID 
FROM 
	INFORMATION_SCHEMA.XENGINE_SUBTABLE 
WHERE TABLE_NAME = 'test.test1');

其中,XENGINE_TABLE_SPACE是以檔案視角來統計儲存空間容量。該表中與空間相關的列及其說明如下:

列名

說明

TABLE_SPACE_ID

資料表空間的ID。

說明

您可以在XENGINE_SUBTABLE表中通過表名查詢該值。

TOTAL_EXTENT_COUNT

總extent數量。

USED_EXTENT_COUNT

已使用的extent數量。

FREE_EXTENT_COUNT

空閑extent數量。

XENGINE_SUBTABLE是以LSM各個層的角度來統計儲存空間容量。該表中的列及其說明如下:

列名

說明

TABLE_NAME

資料庫名和表名的拼接。如資料庫名為test,表名為test1,則TABLE_NAME為test.test1

SUBTABLE_NAME

索引名。

SUBTABLE_ID

索引ID。

TABLE_SPACE_ID

索引對應的table space ID。

LEVEL

邏輯層號。

LAYER

邏輯層中的物理層。

說明

level 0可能存在多個物理層,level1和level2隻有一個物理層。

EXTENTS

該層使用的extent數量。