全部產品
Search
文件中心

ApsaraDB RDS:RDS PostgreSQL通用雲端硬碟IO加速

更新時間:Jun 28, 2024

當您需要應對資料庫磁碟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加速

  1. 開啟IO加速開關。

    RDS PostgreSQL支援在購買新執行個體時開啟IO加速開關,也支援對滿足支援範圍的已有執行個體開啟IO加速開關。

    • 購買新執行個體時開啟IO加速開關

      您可以在購買執行個體時,選擇滿足支援範圍的參數後,開啟IO加速功能:image

    • 滿足支援範圍的已有執行個體開啟IO加速開關

      1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
      2. 基本資料地區,單擊儲存類型後的通用雲端硬碟開關設定,在彈出的對話方塊中,開啟IO加速開關。image

  2. 修改資料庫參數。

    當執行個體開啟IO加速開關後,RDS PostgreSQL會產生一個名為rds_temp_tablespace的資料表空間,其背後使用的儲存介質是支援IO加速的快取介質。使用該資料表空間作為預設的暫存資料表空間,您還需要將資料庫參數temp_tablespaces設定為rds_temp_tablespace。參數設定請詳見設定執行個體參數

    說明
    • 您可以執行以下的SET語句在會話層級設定該參數:

      SET temp_tablespace TO 'rds_temp_tablespace';
    • 您可以將參數temp_tablespaces設定為'',切換回雲端硬碟儲存。

  3. 使用緩衝加速功能。

    開啟IO加速開關並修改資料庫參數後,您就可以在建立暫存資料表時,預設使用rds_temp_tablespace資料表空間。

    1. 串連RDS PostgreSQL執行個體

    2. 建立測試表。

      -- 建立非暫存資料表test_table
      CREATE TABLE test_table (di INT);
      
      -- 建立暫存資料表test_temp_table
      CREATE TEMPORARY TABLE test_temp_table (id INT);
    3. 查詢測試表的資料表空間。

      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)

相關文檔

  • RDS PostgreSQL支援的其他儲存類型,請參見儲存類型介紹

  • 通用雲端硬碟的更多介紹,請參見通用雲端硬碟

  • 如果您的業務波動較大,業務波峰較頻繁,可以開啟通用雲端硬碟的IO突發功能,使雲端硬碟的IOPS不受限於最大IOPS,在業務波峰時獲得更高的IO能力,滿足突發業務需求。更多資訊,請參見IO突發

常見問題

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的取值為'',切換回雲端硬碟儲存。