RDS for PostgreSQL 内存
RDS for PostgreSQL 内存分为共享内存和本地内存。
RDS for PostgreSQL 中的共享内存
RDS for PostgreSQL 会在实例启动时分配共享内存。共享内存分为多个子区域。在下文中,您可以找到最重要子区域的说明。
共享缓冲区
共享缓冲池是一个 RDS for PostgreSQL 内存区域,它包含应用程序连接现在正在使用或过去使用的所有页面。分页是磁盘数据块的内存版本。共享缓冲池缓存从磁盘读取的数据块。该缓冲池减少了从磁盘重新读取数据的需求,从而提高了数据库的运行效率。
每个表和索引都存储为固定大小的页面数组。每个数据块包含多个元组,它们与行相对应。元组可以存储在任何页面中。
共享缓冲池的内存有限。如果新请求需要一个不在内存中的页面,并且没有更多的内存,RDS for PostgreSQL 会移除一个较少使用的页面来容纳请求。移出策略通过时钟扫描算法来实现。
shared_buffers
参数确定服务器用于缓存数据的内存量。
预写日志 (WAL) 缓冲区
预写日志(WAL)缓冲区保存 RDS for PostgreSQL 稍后写入持久存储的事务数据。使用 WAL 机制,RDS for PostgreSQL 可以执行以下操作:
-
发生故障后恢复数据
-
通过避免频繁写入磁盘来减少磁盘输入/输出
当客户端更改数据时,RDS for PostgreSQL 会将更改写入 WAL 缓冲区。当客户发出 COMMIT
,WAL 写入器进程将事务数据写入 WAL 文件。
wal_level
参数决定向 WAL 写入多少信息。
RDS for PostgreSQL 中的本地内存
每个后端进程都会为查询处理分配本地内存。
工作内存区域
工作内存区域保存执行排序和哈希的查询的临时数据。例如,包含 ORDER BY
子句的查询执行排序。查询在哈希联接和聚合中使用哈希表。
work_mem
参数表示在写入临时磁盘文件之前内部排序操作和哈希表要使用的内存量。原定设置值为 4MB。可以同时运行多个会话,且每个会话可以并行运行维护操作。出于这个原因,使用的总工作内存可以是 work_mem
设置的倍数。
维护工作内存区域
维护工作内存区域缓存数据以进行维护操作。这些操作包括 vacuum 操作、创建索引和添加外键。
maintenance_work_mem
参数指定维护操作要使用的最大内存量。原定设置值为 64MB。一个数据库会话一次只能运行一个维护操作。
临时缓冲区
临时缓冲区缓存每个数据库会话的临时表。
每个会话都根据需要分配临时缓冲区,但不超过您指定的限制。当会话结束时,服务器将清除缓冲区。
temp_buffers
参数设置每个会话使用的临时缓冲区的最大数量。在会话中首次使用临时表之前,您可以更改 temp_buffers
值。