max_replication_slots
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
指定服务器可支持的最大复制槽数。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
2-262143 |
参数类型 |
静态 |
文档 |
最大复制插槽 |
特定于 Azure 的注释
参数的 max_replication_slots
默认值为 10。 如果启用高可用性,则至少需要 4 个 max_replication_slots
才能使高可用性正常运行。
对于启用了高可用性的服务器,加上5个只读副本和12个逻辑复制槽,您可能需要将参数max_replication_slots
配置为21。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_replication_slot
。 因此,它总共需要 1(槽位) * 5(只读备份) + 12(逻辑复制槽位) + 4(以确保高可用性) = 21。
max_slot_wal_keep_size
max_wal_senders
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置同时运行的 WAL 发送方进程数量上限。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
5-100 |
参数类型 |
静态 |
文档 |
max_wal_senders |
特定于 Azure 的注释
预配 Azure Database for PostgreSQL 灵活服务器实例时设置的 max_wal_senders
服务器参数的默认值不得低于 2 (if HA is enabled) + number of read replicas provisioned + slots_used_in_logical_replication
。
在考虑是否需要将 max_wal_senders
增加到更高值以应对大量表的逻辑复制时,请注意以下几点:
- 逻辑复制大量表并不一定需要大量 WAL 发送程序。
- 仅当需要为每个表或每组表分别订阅时,才需要为每个表或每组表分别设置 WAL 发送程序。
- 无论有多少 WAL 发送程序用于物理和逻辑复制,只要有任何后端向预写日志写入内容,它们都会同时变为活动状态。 当发生这种情况时,被分配用于执行逻辑复制的 WAL 发送程序都会唤醒以执行以下操作:
- 解码 WAL 中的所有新记录,
- 筛选掉它们不感兴趣的日志记录,
- 复制与其相关的数据。
- WAL 发送程序与连接类似,因为如果它们处于空闲状态,则数量多少并不重要。 但是,如果它们处于活动状态,它们将争夺相同的资源,性能可能会变得非常糟糕。 对于执行逻辑复制的发送程序而言尤其如此,因为逻辑解码非常消耗 CPU。 每个辅助角色都必须解码整个 WAL,即使它只复制影响单个表的操作,而这只占预写日志中所有数据的很小一部分。 对于物理复制而言,这一点并不重要,因为 WAL 发送程序不会如此密集地消耗 CPU,而且它们首先会受到网络带宽的限制。
- 因此,一般而言,WAL 发送程序的数量最好不要超过 vCore 的数量太多。
- 增加一些额外的 WAL 发送程序以适应未来增长或复制连接的临时激增是一个良好的做法。 以下两个示例可能有助于更好地说明这一点。
- 对于具有 8 个 vCore、禁用高可用性、2 个读取副本和 3 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (0) + 读取副本的物理槽 (2) + 逻辑槽 (3) + 一些额外的用于未来增长的槽,考虑可用 vCores (1) = 6。
- 对于具有 16 个 vCore、启用高可用性、4 个读取副本和 5 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (2) + 读取副本的物理槽 (4) + 逻辑槽 (5) + 一些额外的用于未来增长的槽,考虑可用 vCores (2) = 13。
- 如果启用高可用性,则至少需要 4 个
max_wal_senders
才能正常运行。 对于启用了高可用性的服务器,以及具有 5 个只读副本和 12 个逻辑复制槽时,您可能需要将 max_wal_senders
配置为 21。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_wal_senders
。 因此,总共需要 1 个插槽 * 5 个只读副本槽 + 12 个逻辑复制插槽 + 4 个插槽以确保高可用性正常运行,总计 21 个插槽。
- 如果你仍然认为此参数允许的最大值太低,无法满足你的需求,请联系我们,详细描述你的场景,并说明你认为要使你的场景正常运行所需的最小可接受值是多少。
提交时间戳追踪
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
收集事务提交时间。 |
数据类型 |
布尔 |
默认值 |
off |
允许的值 |
on,off |
参数类型 |
静态 |
文档 |
追踪提交时间戳 |
wal_keep_size(日志保留大小)
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置为备用服务器保留的 WAL 文件的大小。 |
数据类型 |
整数 |
默认值 |
400 |
允许的值 |
400 |
参数类型 |
(只读) |
文档 |
wal_keep_size |
wal_sender_timeout
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置等待 WAL 复制的最长时间。 |
数据类型 |
整数 |
默认值 |
60000 |
允许的值 |
0-2147483647 |
参数类型 |
动态的 |
文档 |
wal_sender_timeout |
最大复制槽数 (max_replication_slots)
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
指定服务器可支持的最大复制槽数。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
2-262143 |
参数类型 |
静态 |
文档 |
最大复制插槽 |
特定于 Azure 的注释
参数的 max_replication_slots
默认值为 10。 如果启用高可用性,您至少需要 4 个 max_replication_slots
才能确保高可用性正常运行。
对于具有高可用性、5 个只读副本和 12 个逻辑复制插槽的服务器,您可能需要将其配置为 21max_replication_slots
。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_replication_slot
。 因此,它总共需要 1 (插槽) * 5 (只读副本) + 12 (逻辑复制插槽) + 4 (保证高可用性正常运行) = 21。
max_slot_wal_keep_size
max_wal_senders
特定于 Azure 的注释
预配 Azure Database for PostgreSQL 灵活服务器实例时设置的 max_wal_senders
服务器参数的默认值不得低于 2 (if HA is enabled) + number of read replicas provisioned + slots_used_in_logical_replication
。
在考虑是否需要将 max_wal_senders
增加到更高值以应对大量表的逻辑复制时,请注意以下几点:
- 逻辑复制大量表并不一定需要大量 WAL 发送程序。
- 仅当需要为每个表或每组表分别订阅时,才需要为每个表或每组表分别设置 WAL 发送程序。
- 无论有多少 WAL 发送程序用于物理和逻辑复制,只要有任何后端向预写日志写入内容,它们都会同时变为活动状态。 当发生这种情况时,被分配用于执行逻辑复制的 WAL 发送程序都会唤醒以执行以下操作:
- 解码 WAL 中的所有新记录,
- 筛选掉它们不感兴趣的日志记录,
- 复制与其相关的数据。
- WAL 发送程序与连接类似,因为如果它们处于空闲状态,则数量多少并不重要。 但是,如果它们处于活动状态,它们将争夺相同的资源,性能可能会变得非常糟糕。 对于执行逻辑复制的发送程序而言尤其如此,因为逻辑解码非常消耗 CPU。 每个辅助角色都必须解码整个 WAL,即使它只复制影响单个表的操作,而这只占预写日志中所有数据的很小一部分。 对于物理复制而言,这一点并不重要,因为 WAL 发送程序不会如此密集地消耗 CPU,而且它们首先会受到网络带宽的限制。
- 因此,一般而言,WAL 发送程序的数量最好不要超过 vCore 的数量太多。
- 增加一些额外的 WAL 发送程序以适应未来增长或复制连接的临时激增是一个良好的做法。 以下两个示例可能有助于更好地说明这一点。
- 对于具有 8 个 vCore、禁用高可用性、2 个读取副本和 3 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (0) + 读取副本的物理槽 (2) + 逻辑槽 (3) + 一些额外的用于未来增长的槽,考虑可用 vCores (1) = 6。
- 对于具有 16 个 vCore、启用高可用性、4 个读取副本和 5 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (2) + 读取副本的物理槽 (4) + 逻辑槽 (5) + 一些额外的用于未来增长的槽,考虑可用 vCores (2) = 13。
- 如果启用高可用性,则至少需要 4 个
max_wal_senders
才能正常运行。 对于启用了高可用性的服务器、加上 5 个只读副本和 12 个逻辑复制槽,你可能需要将 max_wal_senders
配置为 21。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_wal_senders
。 因此,它总共需要 1 个(复制槽)* 5 个(只读副本)+ 12 个(逻辑复制槽)+ 4 个(确保高可用性正常运行)= 21。
- 如果你仍然认为此参数允许的最大值太低,无法满足你的需求,请联系我们,详细描述你的场景,并说明你认为要使你的场景正常运行所需的最小可接受值是多少。
跟踪提交时间戳
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
收集事务提交时间。 |
数据类型 |
布尔 |
默认值 |
off |
允许的值 |
on,off |
参数类型 |
静态 |
文档 |
跟踪提交时间戳 |
wal_keep_size(保留日志大小)
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置为备用服务器保留的 WAL 文件的大小。 |
数据类型 |
整数 |
默认值 |
400 |
允许的值 |
400 |
参数类型 |
(只读) |
文档 |
wal_keep_size |
wal_sender_timeout
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置等待 WAL 复制的最长时间。 |
数据类型 |
整数 |
默认值 |
60000 |
允许的值 |
0-2147483647 |
参数类型 |
动态的 |
文档 |
wal_sender_timeout |
max_replication_slots
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
指定服务器可支持的最大复制槽数。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
2-262143 |
参数类型 |
静态 |
文档 |
最大复制插槽 |
特定于 Azure 的注释
参数的 max_replication_slots
默认值为 10。 如果启用高可用性,则至少需要 4 个 max_replication_slots
才能正常运行。
对于一台启用高可用性的服务器、以及 5 个读取副本和 12 个逻辑复制插槽,可能需要将 max_replication_slots
配置为 21。 这是因为每个读取副本和每个逻辑复制槽都需要一个 max_replication_slot
。 因此,它总共需要 1(插槽)* 5(只读副本)+ 12(逻辑复制插槽)+ 4(确保高可用性正常运行)= 21。
max_slot_wal_keep_size
max_wal_senders
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置同时运行的 WAL 发送方进程数量上限。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
5-100 |
参数类型 |
静态 |
文档 |
max_wal_senders(最大WAL发送者) |
特定于 Azure 的注释
预配 Azure Database for PostgreSQL 灵活服务器实例时设置的 max_wal_senders
服务器参数的默认值不得低于 2 (if HA is enabled) + number of read replicas provisioned + slots_used_in_logical_replication
。
在考虑是否需要将 max_wal_senders
增加到更高值以应对大量表的逻辑复制时,请注意以下几点:
- 逻辑复制大量表并不一定需要大量 WAL 发送程序。
- 仅当需要为每个表或每组表分别订阅时,才需要为每个表或每组表分别设置 WAL 发送程序。
- 无论有多少 WAL 发送程序用于物理和逻辑复制,只要有任何后端向预写日志写入内容,它们都会同时变为活动状态。 当发生这种情况时,被分配用于执行逻辑复制的 WAL 发送程序都会唤醒以执行以下操作:
- 解码 WAL 中的所有新记录,
- 筛选掉它们不感兴趣的日志记录,
- 复制与其相关的数据。
- WAL 发送程序与连接类似,因为如果它们处于空闲状态,则数量多少并不重要。 但是,如果它们处于活动状态,它们将争夺相同的资源,性能可能会变得非常糟糕。 对于执行逻辑复制的发送程序而言尤其如此,因为逻辑解码非常消耗 CPU。 每个辅助角色都必须解码整个 WAL,即使它只复制影响单个表的操作,而这只占预写日志中所有数据的很小一部分。 对于物理复制而言,这一点并不重要,因为 WAL 发送程序不会如此密集地消耗 CPU,而且它们首先会受到网络带宽的限制。
- 因此,一般而言,WAL 发送程序的数量最好不要超过 vCore 的数量太多。
- 增加一些额外的 WAL 发送程序以适应未来增长或复制连接的临时激增是一个良好的做法。 以下两个示例可能有助于更好地说明这一点。
- 对于具有 8 个 vCore、禁用高可用性、2 个读取副本和 3 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (0) + 读取副本的物理槽 (2) + 逻辑槽 (3) + 一些额外的用于未来增长的槽,考虑可用 vCores (1) = 6。
- 对于具有 16 个 vCore、启用高可用性、4 个读取副本和 5 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (2) + 读取副本的物理槽 (4) + 逻辑槽 (5) + 一些额外的用于未来增长的槽,考虑可用 vCores (2) = 13。
- 如果启用高可用性,您至少需要 4 个
max_wal_senders
才能使高可用性正常运行。 对于启用高可用性的服务器、5 个只读副本和 12 个逻辑复制槽,您可能需要将 max_wal_senders
配置为 21。 这是因为每个读取副本和每个逻辑复制槽都需要一个max_wal_senders
。 因此,它总共需要 1 (插槽) * 5 (读取副本) + 12 (逻辑复制槽) + 4 (以实现高可用性正常运行) = 21。
- 如果你仍然认为此参数允许的最大值太低,无法满足你的需求,请联系我们,详细描述你的场景,并说明你认为要使你的场景正常运行所需的最小可接受值是多少。
跟踪提交时间戳
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
收集事务提交时间。 |
数据类型 |
布尔 |
默认值 |
off |
允许的值 |
on,off |
参数类型 |
静态 |
文档 |
追踪提交时间戳 |
wal_keep_size
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置为备用服务器保留的 WAL 文件的大小。 |
数据类型 |
整数 |
默认值 |
400 |
允许的值 |
400 |
参数类型 |
(只读) |
文档 |
wal_keep_size |
wal_sender_timeout
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置等待 WAL 复制的最长时间。 |
数据类型 |
整数 |
默认值 |
60000 |
允许的值 |
0-2147483647 |
参数类型 |
动态的 |
文档 |
wal_sender_timeout |
max_replication_slots
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
指定服务器可支持的最大复制槽数。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
2-262143 |
参数类型 |
静态 |
文档 |
最大复制插槽 |
特定于 Azure 的注释
参数的 max_replication_slots
默认值为 10。 如果启用高可用性,则至少需要 4 个max_replication_slots
才能正常运行。
对于启用了高可用性的服务器,以及拥有 5 个只读副本和 12 个逻辑复制槽的配置,您可能需要将max_replication_slots
设置为21。 这是因为每个读取副本和每个逻辑复制槽都需要一个 max_replication_slot
。 因此,它总共需要 1(插槽)* 5(只读复制副本)+ 12(逻辑复制插槽)+ 4(确保高可用性正常运行)= 21。
max_slot_wal_keep_size
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置复制槽可以保留的最大 WAL 大小。 |
数据类型 |
整数 |
默认值 |
-1 |
允许的值 |
-1 |
参数类型 |
(只读) |
文档 |
max_slot_wal_keep_size(最大槽位日志保留大小) |
max_wal_senders
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置同时运行的 WAL 发送方进程数量上限。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
5-100 |
参数类型 |
静态 |
文档 |
max_wal_senders |
特定于 Azure 的注释
预配 Azure Database for PostgreSQL 灵活服务器实例时设置的 max_wal_senders
服务器参数的默认值不得低于 2 (if HA is enabled) + number of read replicas provisioned + slots_used_in_logical_replication
。
在考虑是否需要将 max_wal_senders
增加到更高值以应对大量表的逻辑复制时,请注意以下几点:
- 逻辑复制大量表并不一定需要大量 WAL 发送程序。
- 仅当需要为每个表或每组表分别订阅时,才需要为每个表或每组表分别设置 WAL 发送程序。
- 无论有多少 WAL 发送程序用于物理和逻辑复制,只要有任何后端向预写日志写入内容,它们都会同时变为活动状态。 当发生这种情况时,被分配用于执行逻辑复制的 WAL 发送程序都会唤醒以执行以下操作:
- 解码 WAL 中的所有新记录,
- 筛选掉它们不感兴趣的日志记录,
- 复制与其相关的数据。
- WAL 发送程序与连接类似,因为如果它们处于空闲状态,则数量多少并不重要。 但是,如果它们处于活动状态,它们将争夺相同的资源,性能可能会变得非常糟糕。 对于执行逻辑复制的发送程序而言尤其如此,因为逻辑解码非常消耗 CPU。 每个辅助角色都必须解码整个 WAL,即使它只复制影响单个表的操作,而这只占预写日志中所有数据的很小一部分。 对于物理复制而言,这一点并不重要,因为 WAL 发送程序不会如此密集地消耗 CPU,而且它们首先会受到网络带宽的限制。
- 因此,一般而言,WAL 发送程序的数量最好不要超过 vCore 的数量太多。
- 增加一些额外的 WAL 发送程序以适应未来增长或复制连接的临时激增是一个良好的做法。 以下两个示例可能有助于更好地说明这一点。
- 对于具有 8 个 vCore、禁用高可用性、2 个读取副本和 3 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (0) + 读取副本的物理槽 (2) + 逻辑槽 (3) + 一些额外的用于未来增长的槽,考虑可用 vCores (1) = 6。
- 对于具有 16 个 vCore、启用高可用性、4 个读取副本和 5 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (2) + 读取副本的物理槽 (4) + 逻辑槽 (5) + 一些额外的用于未来增长的槽,考虑可用 vCores (2) = 13。
- 如果启用高可用性,则需要至少 4 个
max_wal_senders
以确保正常工作。 对于启用了高可用性的服务器,外加 5 个只读副本和 12 个逻辑复制槽,你可能需要将配置项 max_wal_senders
设置为 21。 这是因为每个只读副本和每个逻辑复制槽都分别需要一个max_wal_senders
。 因此,它总共需要 1 (插槽)* 5 (只读副本) + 12 (逻辑复制插槽) + 4 (以确保高可用性正常运行) = 21 。
- 如果你仍然认为此参数允许的最大值太低,无法满足你的需求,请联系我们,详细描述你的场景,并说明你认为要使你的场景正常运行所需的最小可接受值是多少。
track_commit_timestamp
wal_keep_size
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置为备用服务器保留的 WAL 文件的大小。 |
数据类型 |
整数 |
默认值 |
400 |
允许的值 |
400 |
参数类型 |
(只读) |
文档 |
wal_keep_size |
wal_sender_timeout
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置等待 WAL 复制的最长时间。 |
数据类型 |
整数 |
默认值 |
60000 |
允许的值 |
0-2147483647 |
参数类型 |
动态的 |
文档 |
wal_sender_timeout |
max_replication_slots
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
指定服务器可支持的最大复制槽数。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
2-262143 |
参数类型 |
静态 |
文档 |
最大复制插槽 |
特定于 Azure 的注释
参数的 max_replication_slots
默认值为 10。 如果启用高可用性,则至少需要 4 个 max_replication_slots
才能正常运行。
如果您的服务器启用了高可用性,并且有 5 个只读副本和 12 个逻辑复制槽,您可能需要将 max_replication_slots
配置为 21。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_replication_slot
。 因此,它总共需要 1 (槽位) * 5 (只读副本) + 12 (逻辑复制槽位) + 4 (为保证高可用性正常运行) = 21。
max_wal_senders (最大 WAL 发送者数)
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置同时运行的 WAL 发送方进程数量上限。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
5-100 |
参数类型 |
静态 |
文档 |
max_wal_senders |
特定于 Azure 的注释
预配 Azure Database for PostgreSQL 灵活服务器实例时设置的 max_wal_senders
服务器参数的默认值不得低于 2 (if HA is enabled) + number of read replicas provisioned + slots_used_in_logical_replication
。
在考虑是否需要将 max_wal_senders
增加到更高值以应对大量表的逻辑复制时,请注意以下几点:
- 逻辑复制大量表并不一定需要大量 WAL 发送程序。
- 仅当需要为每个表或每组表分别订阅时,才需要为每个表或每组表分别设置 WAL 发送程序。
- 无论有多少 WAL 发送程序用于物理和逻辑复制,只要有任何后端向预写日志写入内容,它们都会同时变为活动状态。 当发生这种情况时,被分配用于执行逻辑复制的 WAL 发送程序都会唤醒以执行以下操作:
- 解码 WAL 中的所有新记录,
- 筛选掉它们不感兴趣的日志记录,
- 复制与其相关的数据。
- WAL 发送程序与连接类似,因为如果它们处于空闲状态,则数量多少并不重要。 但是,如果它们处于活动状态,它们将争夺相同的资源,性能可能会变得非常糟糕。 对于执行逻辑复制的发送程序而言尤其如此,因为逻辑解码非常消耗 CPU。 每个辅助角色都必须解码整个 WAL,即使它只复制影响单个表的操作,而这只占预写日志中所有数据的很小一部分。 对于物理复制而言,这一点并不重要,因为 WAL 发送程序不会如此密集地消耗 CPU,而且它们首先会受到网络带宽的限制。
- 因此,一般而言,WAL 发送程序的数量最好不要超过 vCore 的数量太多。
- 增加一些额外的 WAL 发送程序以适应未来增长或复制连接的临时激增是一个良好的做法。 以下两个示例可能有助于更好地说明这一点。
- 对于具有 8 个 vCore、禁用高可用性、2 个读取副本和 3 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (0) + 读取副本的物理槽 (2) + 逻辑槽 (3) + 一些额外的用于未来增长的槽,考虑可用 vCores (1) = 6。
- 对于具有 16 个 vCore、启用高可用性、4 个读取副本和 5 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (2) + 读取副本的物理槽 (4) + 逻辑槽 (5) + 一些额外的用于未来增长的槽,考虑可用 vCores (2) = 13。
- 如果启用高可用性,则至少需要 4 个
max_wal_senders
实例才能使高可用性正常运行。 对于启用了高可用性的服务器,加上 5 个只读副本和 12 个逻辑复制槽位,可能需要将 max_wal_senders
配置为 21。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_wal_senders
。 因此,它总共需要 1 个插槽 * 5 个只读副本数量 + 12 个逻辑复制插槽 + 4 个(为实现高可用性正常运行)= 21。
- 如果你仍然认为此参数允许的最大值太低,无法满足你的需求,请联系我们,详细描述你的场景,并说明你认为要使你的场景正常运行所需的最小可接受值是多少。
track_commit_timestamp
wal_keep_segments
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置为备用服务器保留的 WAL 文件数。 |
数据类型 |
整数 |
默认值 |
25 |
允许的值 |
25 |
参数类型 |
(只读) |
文档 |
|
发送器超时时间
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置等待 WAL 复制的最长时间。 |
数据类型 |
整数 |
默认值 |
60000 |
允许的值 |
0-2147483647 |
参数类型 |
动态的 |
文档 |
wal_sender_timeout |
max_replication_slots
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
指定服务器可支持的最大复制槽数。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
2-262143 |
参数类型 |
静态 |
文档 |
最大复制插槽 |
特定于 Azure 的注释
参数的 max_replication_slots
默认值为 10。 如果启用高可用性,则至少需要 4 个 max_replication_slots
才能正常运行。
对于启用高可用性功能的服务器,加上 5 个只读副本和 12 个逻辑复制槽,可能需要配置 max_replication_slots
为 21。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_replication_slot
。 因此,它总共需要 1(插槽)* 5(只读副本)+ 12(逻辑复制插槽)+ 4(确保高可用性正常运行)= 21。
max_wal_senders (最大传输日志发送者数量)
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置同时运行的 WAL 发送方进程数量上限。 |
数据类型 |
整数 |
默认值 |
10 |
允许的值 |
5-100 |
参数类型 |
静态 |
文档 |
max_wal_senders |
特定于 Azure 的注释
预配 Azure Database for PostgreSQL 灵活服务器实例时设置的 max_wal_senders
服务器参数的默认值不得低于 2 (if HA is enabled) + number of read replicas provisioned + slots_used_in_logical_replication
。
在考虑是否需要将 max_wal_senders
增加到更高值以应对大量表的逻辑复制时,请注意以下几点:
- 逻辑复制大量表并不一定需要大量 WAL 发送程序。
- 仅当需要为每个表或每组表分别订阅时,才需要为每个表或每组表分别设置 WAL 发送程序。
- 无论有多少 WAL 发送程序用于物理和逻辑复制,只要有任何后端向预写日志写入内容,它们都会同时变为活动状态。 当发生这种情况时,被分配用于执行逻辑复制的 WAL 发送程序都会唤醒以执行以下操作:
- 解码 WAL 中的所有新记录,
- 筛选掉它们不感兴趣的日志记录,
- 复制与其相关的数据。
- WAL 发送程序与连接类似,因为如果它们处于空闲状态,则数量多少并不重要。 但是,如果它们处于活动状态,它们将争夺相同的资源,性能可能会变得非常糟糕。 对于执行逻辑复制的发送程序而言尤其如此,因为逻辑解码非常消耗 CPU。 每个辅助角色都必须解码整个 WAL,即使它只复制影响单个表的操作,而这只占预写日志中所有数据的很小一部分。 对于物理复制而言,这一点并不重要,因为 WAL 发送程序不会如此密集地消耗 CPU,而且它们首先会受到网络带宽的限制。
- 因此,一般而言,WAL 发送程序的数量最好不要超过 vCore 的数量太多。
- 增加一些额外的 WAL 发送程序以适应未来增长或复制连接的临时激增是一个良好的做法。 以下两个示例可能有助于更好地说明这一点。
- 对于具有 8 个 vCore、禁用高可用性、2 个读取副本和 3 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (0) + 读取副本的物理槽 (2) + 逻辑槽 (3) + 一些额外的用于未来增长的槽,考虑可用 vCores (1) = 6。
- 对于具有 16 个 vCore、启用高可用性、4 个读取副本和 5 个逻辑复制槽的服务器,可能需要将
max_wal_senders
配置为以下项的和:高可用性的物理槽 (2) + 读取副本的物理槽 (4) + 逻辑槽 (5) + 一些额外的用于未来增长的槽,考虑可用 vCores (2) = 13。
- 如果启用高可用性,则至少需要 4 个
max_wal_senders
才能正常运行。 对于启用高可用性的服务器,再加上 5 个只读副本和 12 个逻辑复制位点,您可能需要将 max_wal_senders
配置为 21。 这是因为每个只读副本和每个逻辑复制槽都需要一个 max_wal_senders
。 因此,它总共需要 1 个(插槽) * 5 个(只读副本) + 12 个(逻辑复制插槽) + 4 个(确保高可用性正常运行) = 21。
- 如果你仍然认为此参数允许的最大值太低,无法满足你的需求,请联系我们,详细描述你的场景,并说明你认为要使你的场景正常运行所需的最小可接受值是多少。
提交时间戳跟踪
WAL日志保留段
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置为备用服务器保留的 WAL 文件数。 |
数据类型 |
整数 |
默认值 |
25 |
允许的值 |
25 |
参数类型 |
(只读) |
文档 |
|
wal_sender_timeout
属性 |
值 |
类别 |
复制/发送服务器 |
说明 |
设置等待 WAL 复制的最长时间。 |
数据类型 |
整数 |
默认值 |
60000 |
允许的值 |
0-2147483647 |
参数类型 |
动态的 |
文档 |
wal_sender_timeout |