當您需要應對資料庫磁碟IO效能瓶頸時,雲資料庫RDS PostgreSQL的通用雲端硬碟IO加速功能為您提供了一個高效的解決方案。本文檔將詳細介紹該技術的優勢、適用情境和工作原理,協助您在面臨大規模或頻繁資料讀寫需求時顯著提升資料庫效能。
背景
RDS PostgreSQL在資料處理過程中,資料會從磁碟讀取到記憶體,在記憶體中處理完成後,資料再從記憶體寫入到磁碟中。與記憶體操作相比,磁碟IO操作運行速度較慢,將會消耗更多的時間。當業務出現大規模資料讀寫或頻繁資料讀寫請求時,磁碟IO操作可能成為資料庫系統的瓶頸。
因此,阿里雲資料庫RDS PostgreSQL推出新的儲存類型——通用雲端硬碟。在相容ESSD雲端硬碟所有特性的基礎上,通用雲端硬碟採用三級儲存架構對不同類型的資料進行分級管理,並且引入了IO加速功能,以提升RDS PostgreSQL執行個體的QPS效能。更多資訊,請參見通用雲端硬碟。
功能介紹
IO加速功能對應通用雲端硬碟三級儲存架構中的緩衝層,主要是通過快取介質來提升資料庫的讀寫效能,以提高SQL查詢處理的速度。針對暫存資料表和查詢產生的臨時檔案,RDS PostgreSQL的IO加速能力允許將這些臨時資料存放區到高速的緩衝介質中,使得資料庫引擎對這些臨時資料的讀寫IO更快,大大加快查詢的處理,在複雜查詢情境下可提高100%查詢效能。
價值效益
RDS PostgreSQL執行個體開啟IO加速功能後,目前無需支付任何額外費用。您可以在無任何成本變化和業務改動的情況下,在適用情境下大幅度提升資料庫的QPS效能。具體適用情境,請詳見適用情境。
適用情境
下列是一些IO加速功能適用的業務情境:
排序、分組彙總、聯合等產生臨時結果的複雜操作
使用CTE通用運算式的遞迴查詢
無法使用適當索引的複雜查詢
對大表或多個表的分析型查詢
其他使用暫存資料表的工作負載
支援範圍
滿足以下條件的RDS PostgreSQL執行個體支援該功能:
計費方式:訂用帳戶或隨用隨付
執行個體大版本:PostgreSQL 11或以上
核心小版本:20231030或以上
產品系列:高可用系列
產品類型:標準版
儲存類型:通用雲端硬碟
執行個體規格類型系列:通用型
執行個體所在地區及可用性區域:
地區
可用性區域
西南1(成都)
可用性區域B
華北2(北京)
可用性區域I
華東2(上海)
可用性區域M
可用性區域N
華東1(杭州)
可用性區域J
說明在售賣頁面開啟IO加速功能後,可在主可用性區域及網路處查看是否支援。
技術原理
Cache Disk表示快取介質,是一種讀寫效能介於記憶體和通用雲端硬碟之間的儲存介質,其讀寫效能要優於通用雲端硬碟,因此非常適合作為資料庫中臨時資料的緩衝盤。
RDS PostgreSQL資料庫服務端收到使用者的SQL查詢後,由查詢執行器對查詢進行處理,其根據查詢要訪問的資料所在的資料表空間決定資料存放區的位置。
在未開啟IO加速功能時,所有資料只能儲存在雲端硬碟上。
開啟IO加速功能後:
如訪問的是非臨時資料(正常的表、視圖等資料),則還是從雲端硬碟讀取資料到記憶體中進行處理;
如訪問的是臨時資料(暫存資料表、臨時檔案等資料),則從快取盤讀寫資料。
具體而言,執行個體建立的暫存資料表等臨時對象(不顯式指定資料表空間)和在查詢執行過程中產生的臨時檔案都將被儲存到快取介質中,從而提升資料庫對這些臨時資料的讀寫,在一定時間內可以執行處理更多的查詢。
RDS PostgreSQL是通過資料表空間來設定資料庫物件的儲存位置,以實現資料的冷熱分離,因此我們使用資料表空間rds_temp_tablespace
來抽象其背後的快取介質。您可以在開啟IO加速的執行個體中看到該資料表空間。而使用該資料表空間還需要您正確設定資料庫參數temp_tablespaces
,具體詳見開啟IO加速。
注意事項
快取介質僅用於儲存臨時快取資料,RDS PostgreSQL不保證儲存在資料表空間
rds_temp_tablespace
的資料的持久性,當執行個體發生變更配置等遷移動作後,這些資料會丟失,所以請勿將非暫存資料表等資料對象的資料表空間設定為該資料表空間。RDS PostgreSQL開啟IO加速功能後,會根據不同執行個體規格提供一定容量的快取空間,當該空間寫滿時,會報錯
No space left on device
,該問題不影響非臨時資料的相關SQL執行。開啟或關閉IO加速功能後,執行個體約有30秒不可用,建議在業務低峰期執行功能的開啟和關閉操作。
開啟IO加速
開啟IO加速開關。
RDS PostgreSQL支援在購買新執行個體時開啟IO加速開關,也支援對滿足支援範圍的已有執行個體開啟IO加速開關。
修改資料庫參數。
當執行個體開啟IO加速開關後,RDS PostgreSQL會產生一個名為
rds_temp_tablespace
的資料表空間,其背後使用的儲存介質是支援IO加速的快取介質。使用該資料表空間作為預設的暫存資料表空間,您還需要將資料庫參數temp_tablespaces
設定為rds_temp_tablespace
。參數設定請詳見設定執行個體參數。說明您可以執行以下的SET語句在會話層級設定該參數:
SET temp_tablespace TO 'rds_temp_tablespace';
您可以將參數
temp_tablespaces
設定為''
,切換回雲端硬碟儲存。
使用緩衝加速功能。
開啟IO加速開關並修改資料庫參數後,您就可以在建立暫存資料表時,預設使用
rds_temp_tablespace
資料表空間。建立測試表。
-- 建立非暫存資料表test_table CREATE TABLE test_table (di INT); -- 建立暫存資料表test_temp_table CREATE TEMPORARY TABLE test_temp_table (id INT);
查詢測試表的資料表空間。
SELECT c.relname AS table_name, COALESCE(t.spcname, 'pg_default') AS tablespace_name FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid LEFT JOIN pg_tablespace t ON c.reltablespace = t.oid WHERE c.relkind = 'r' AND c.relname IN ('test_table', 'test_temp_table');
返回結果樣本:
table_name | tablespace_name -----------------+--------------------- test_table | pg_default test_temp_table | rds_temp_tablespace (2 rows)
相關文檔
常見問題
Q:SQL執行時,報錯ERROR: could not write to file "pg_tblspc/xxxx": No space left on device
,如何處理?
A:該報錯是由於快取介質的資料表空間rds_temp_tablespace
已滿造成的,您可以結束當前會話(RDS PostgreSQL核心將自動清理臨時檔案回收空間),重連執行個體後再次嘗試之前失敗的SQL語句。
如問題仍未解決,您可以修改參數temp_tablespaces
的取值為''
,切換回雲端硬碟儲存。