使用 Amazon RDS Optimized Reads 改善 RDS for PostgreSQL 的查詢效能 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon RDS Optimized Reads 改善 RDS for PostgreSQL 的查詢效能

您可以使用 Amazon RDS Optimized Reads,為 RDS for PostgreSQL 實現更快的查詢處理。使用 RDS Optimized Reads 的 RDS for PostgreSQL 資料庫執行個體或多可用區域資料庫叢集,相較於不使用的情況,查詢處理速度最多可提高 50%。

PostgreSQL 中 RDS Optimized Reads 的概觀

根據預設,使用 NVMe 資料庫執行個體類別時,最佳化讀取可在 RDS for PostgreSQL 15.2 版及更新版本、14.7 版及更新版本,以及 13.10 版及更新版本上使用。如需指出哪些執行個體使用 NVMe 的硬體規格,請參閱 的資料庫執行個體類別的硬體規格

當您使用已開啟 RDS Optimized Reads 的 RDS for PostgreSQL 資料庫執行個體或多可用區域資料庫叢集時,其可透過使用本機非揮發性記憶體儲存裝置 (NVMe) 固態硬碟 (SSD) 區塊層級儲存體,將查詢效能最多提高 50%。您可以將 PostgreSQL 產生的暫存資料表放置在本機儲存體上,藉此減少透過網路傳送至 Elastic Block Storage (EBS) 的流量,以達到更快的查詢處理速度。

在 PostgreSQL 中,臨時物件被指派到暫時命名空間,該命名空間會在工作階段結束時自動丟棄。丟棄時的暫時命名空間會移除任何與工作階段相關的物件,包括結構描述限定物件,例如資料表、函數、運算子,甚至延伸。

在 RDS for PostgreSQL 中,會針對儲存臨時物件的暫存工作區域設定 temp_tablespaces 參數。

下列查詢會傳回資料表空間的名稱及其位置。

postgres=> show temp_tablespaces; temp_tablespaces --------------------- rds_temp_tablespace (1 row)

rds_temp_tablespace 是 RDS 設定的資料表空間,指向 NVMe 本機儲存體。您可以隨時Parameter group使用 修改 中的此參數 AWS Management Console ,以指向 以外的任何資料表空間,以切換回 Amazon EBS 儲存體rds_temp_tablespace。如需詳細資訊,請參閱修改 Amazon RDS Amazon 數據庫參數組中的參數。您也可以使用 SET 命令,在工作階段層級使用 SET 命令將 temp_tablespaces 參數的值修改為 pg_default。修改參數會將暫存工作區域重新導向至 Amazon EBS。當 RDS 執行個體或叢集的本機儲存空間不足以執行特定 SQL 操作時,切換回 Amazon EBS 會有所幫助。

postgres=> SET temp_tablespaces TO 'pg_default'; SET
postgres=> show temp_tablespaces; temp_tablespaces ------------------ pg_default

RDS Optimized Reads 的使用案例

下列是可從 Optimized Reads 中受益的一些使用案例:

  • 分析查詢,包括一般資料表表達式 (CTE)、衍生資料表和群組操作。

  • 處理應用程式未最佳化查詢的僅供讀取複本。

  • 具有複雜操作的隨需或動態報告查詢 (例如 GROUP BY 和 ORDER BY),無法始終使用適當的索引。

  • 使用內部暫存資料表的其他工作負載

  • CREATE INDEXREINDEX操作進行排序。

RDS Optimized Reads 的最佳實務

請使用 RDS Optimized Reads 的下列最佳實務:

  • 針對唯讀查詢新增重試邏輯,以防這些查詢在執行期間由於執行個體儲存體已滿而失敗。

  • 使用 CloudWatch 指標 FreeLocalStorage 監控執行個體儲存體上的可用儲存空間。如果執行個體儲存體由於資料庫執行個體或多可用區域資料庫叢集的工作負載而達到其限制,請對其修改以使用較大的資料庫執行個體類別。

使用 RDS Optimized Reads

當您在單一可用區域資料庫執行個體部署、多可用區域資料庫執行個體部署或多可用區域資料庫叢集部署中,佈建具有 NVMe 基礎其中一個資料庫執行個體類別的 RDS for PostgreSQL 資料庫執行個體時,資料庫執行個體會自動使用 RDS Optimized Reads:

如需多可用區部署的詳細資訊,請參閱設定和管理 Amazon 的多可用區部署 RDS

若要開啟 RDS Optimized Reads,請執行下列其中一項:

  • 使用其中一個 NVMe 為基礎的資料庫執行個體類別,建立 RDS for PostgreSQL 資料庫執行個體或多可用區域資料庫叢集。如需詳細資訊,請參閱建立 Amazon RDS 資料庫執行個體

  • 修改現有的 RDS for PostgreSQL 資料庫執行個體或多可用區資料庫叢集,以使用其中一個 NVMe 為基礎的資料庫執行個體類別。如需詳細資訊,請參閱修改 Amazon RDS 資料庫執行個體

RDS Optimized Reads 適用於支援一或多個具有本機 NVMe SSD 儲存體的資料庫執行個體類別的所有 AWS 區域 。如需詳細資訊,請參閱 數據庫實例類

若要切換回非最佳化讀取 RDS 執行個體,請將 RDS 執行個體或叢集的資料庫執行個體類別修改為僅支援資料庫工作負載 EBS 儲存體的類似執行個體類別。例如,如果目前的資料庫執行個體類別是 db.r6gd.4xlarge,請選擇 db.r6g.4xlarge 以切換回來。如需詳細資訊,請參閱修改 Amazon RDS 資料庫執行個體

監控使用 RDS Optimized Reads 的資料庫執行個體

您可以透過下列 CloudWatch 指標,監控使用 RDS Optimized Reads 的資料庫執行個體:

  • FreeLocalStorage

  • ReadIOPSLocalStorage

  • ReadLatencyLocalStorage

  • ReadThroughputLocalStorage

  • WriteIOPSLocalStorage

  • WriteLatencyLocalStorage

  • WriteThroughputLocalStorage

這些指標提供可用執行個體儲存體、IOPS 和輸送量的相關資料。如需這些指標的詳細資訊,請參閱 Amazon RDS 的 Amazon CloudWatch 執行個體層級指標

若要監控本機儲存體的目前使用情況,請移至資料庫並執行下列查詢:

SELECT spcname AS "Name", pg_catalog.pg_size_pretty(pg_catalog.pg_tablespace_size(oid)) AS "size" FROM pg_catalog.pg_tablespace WHERE spcname IN ('rds_temp_tablespace');

如需暫存檔案及其使用方式的詳細資訊,請參閱使用 PostgreSQL 管理暫存檔案

PostgreSQL 中 RDS Optimized Reads 的限制

下列限制適用於 PostgreSQL 中的 RDS Optimized Reads:

  • 執行個體儲存體已滿時,交易會失敗。