

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

# RDS for PostgreSQL 記憶體
<a name="PostgreSQL.Tuning.concepts.memory"></a>

RDS for PostgreSQL 記憶體分成共用和本機。

**Topics**
+ [RDS for PostgreSQL 中的共用記憶體](#PostgreSQL.Tuning.concepts.shared)
+ [RDS for PostgreSQL 中的本機記憶體](#PostgreSQL.Tuning.concepts.local)

## RDS for PostgreSQL 中的共用記憶體
<a name="PostgreSQL.Tuning.concepts.shared"></a>

RDS for PostgreSQL 在執行個體啟動時配置共用記憶體。共用記憶體分成多個子區域。以下幾節將說明最重要的部分。

**Topics**
+ [共用緩衝區](#PostgreSQL.Tuning.concepts.buffer-pool)
+ [預寫日誌 (WAL) 緩衝區](#PostgreSQL.Tuning.concepts.WAL)

### 共用緩衝區
<a name="PostgreSQL.Tuning.concepts.buffer-pool"></a>

*共用緩衝集區*是一種 RDS for PostgreSQL 記憶體區域，其中保留應用程式連線正在使用或已使用的所有分頁。*分頁*是記憶體形式的磁碟區塊。共用緩衝集區快取從磁碟讀取的資料區塊。集區可減少從磁碟重新讀取資料的次數，讓資料庫運作更有效率。

每個資料表和索引儲存為一連串固定大小的分頁。每個區塊包含多個元組，對應於資料列。元組可以存放在任何分頁中。

共用緩衝集區的記憶體有限。如果新請求需要的分頁不在記憶體中，且已沒有更多記憶體，RDS for PostgreSQL 會移出較不常用的分頁來容納請求。移出政策以時鐘掃描演算法實作。

`shared_buffers` 參數決定伺服器專用於快取資料的記憶體數量。預設值會根據資料庫執行個體的可用記憶體設定為 `{DBInstanceClassMemory/32768}` 位元組。

### 預寫日誌 (WAL) 緩衝區
<a name="PostgreSQL.Tuning.concepts.WAL"></a>

*預寫日誌 (WAL) 緩衝區*保留交易資料，供 RDS for PostgreSQL 稍後寫入持久性儲存。RDS for PostgreSQL 可以透過 WAL 機制達成下列目標：
+ 在故障後復原資料
+ 避免頻繁寫入磁碟以減少磁碟輸入/輸出

當用戶端變更資料時，RDS for PostgreSQL 會將變更寫入 WAL 緩衝區。當用戶端發出 `COMMIT` 時，WAL 寫入器程序會將交易資料寫入 WAL 檔案。

`wal_level` 參數會決定有多少資訊會寫入 WAL，可能的值包括 `minimal`、`replica` 和 `logical`。

## RDS for PostgreSQL 中的本機記憶體
<a name="PostgreSQL.Tuning.concepts.local"></a>

每個後端程序會配置本機記憶體來處理查詢。

**Topics**
+ [工作記憶體區域](#PostgreSQL.Tuning.concepts.local.work_mem)
+ [維護工作記憶體區域](#PostgreSQL.Tuning.concepts.local.maintenance_work_mem)
+ [暫時緩衝區域](#PostgreSQL.Tuning.concepts.temp)

### 工作記憶體區域
<a name="PostgreSQL.Tuning.concepts.local.work_mem"></a>

*工作記憶體區域*為執行排序和雜湊的查詢保留暫存資料。例如，含有 `ORDER BY` 子句的查詢執行排序。查詢在雜湊聯結和彙總中使用雜湊表。

`work_mem` 參數會指定在寫入暫存磁碟檔案之前，供內部排序操作和雜湊表使用的記憶體數量 (以 MB 為單位)。預設值為 4 MB。多個工作階段可以同時執行，每個工作階段可以平行執行維護操作。因此，使用的總工作記憶體可能是 `work_mem` 設定的倍數。

### 維護工作記憶體區域
<a name="PostgreSQL.Tuning.concepts.local.maintenance_work_mem"></a>

*維護工作記憶體區域*快取維護操作的資料。這些操作包括清理、建立索引和新增外部索引鍵。

`maintenance_work_mem` 參數會指定供維護操作使用的記憶體數量上限 (以 MB 為單位)。預設值為 64 MB。一個資料庫工作階段一次只能執行一個維護操作。

### 暫時緩衝區域
<a name="PostgreSQL.Tuning.concepts.temp"></a>

*暫時緩衝區域*快取每個資料庫工作階段的暫存資料表。

每個工作階段視需要配置暫存緩衝區，以您指定的限制為上限。工作階段結束時，伺服器會清除緩衝區。

`temp_buffers` 參數會設定每個工作階段使用的暫存緩衝區數目上限 (以 MB 為單位)。預設值為 8 MB。在工作階段內第一次使用暫存資料表之前，您可以變更 `temp_buffers` 值。