在 Aurora PostgreSQL 中使用本地写入转发
使用以下部分,您可以检查数据库集群是否启用了本地写入转发,查看兼容性注意事项,并查看可配置参数和身份验证设置。这些信息详细介绍了如何有效利用 Aurora PostgreSQL 中的本地写入转发特征。
注意
当使用本地写入转发的集群中的写入器实例重启时,使用本地写入转发的读取器实例上任何活跃的转发事务和查询都将自动关闭。在写入器实例再次可用后,您可以重试这些事务。
检查数据库集群是否启用了本地写入转发
要确定是否可以在数据库集群中使用本地写入转发,请确认该集群的属性 LocalWriteForwardingStatus
是否设置为 enabled
。
在 AWS Management Console中,在集群详细信息页面的配置选项卡上,您可以看到本地只读副本写入转发的状态为已启用。
要查看所有集群的本地写入转发设置的状态,请运行以下 AWS CLI 命令。
aws rds describe-db-clusters \ --query '*[].{DBClusterIdentifier:DBClusterIdentifier,LocalWriteForwardingStatus:LocalWriteForwardingStatus}' [ { "LocalWriteForwardingStatus": "enabled", "DBClusterIdentifier": "write-forwarding-test-cluster-1" }, { "LocalWriteForwardingStatus": "disabled", "DBClusterIdentifier": "write-forwarding-test-cluster-2" }, { "LocalWriteForwardingStatus": "requested", "DBClusterIdentifier": "test-global-cluster-2" }, { "LocalWriteForwardingStatus": "null", "DBClusterIdentifier": "aurora-postgresql-v2-cluster" } ]
对于 LocalWriteForwardingStatus
,数据库集群可以具有以下值:
-
disabled
– 本地写入转发已禁用。 -
disabling
– 正在禁用本地写入转发。 -
enabled
– 本地写入转发已启用。 -
enabling
– 正在启用本地写入转发。 -
null
– 本地写入转发不适用于此数据库集群。 -
requested
– 已请求本地写入转发,但尚未激活。
Aurora PostgreSQL 中的本地写入转发的限制
在具有写入转发功能的 Aurora PostgreSQL 中不允许使用某些语句,否则可能产生过时的结果。此外,不支持用户定义的函数和用户定义的过程。因此,默认情况下,数据库集群的 EnableLocalWriteForwarding
设置处于关闭状态。在启用它之前,请检查以确保您的应用程序代码不受任何这些限制的影响。
您可以将以下类型的 SQL 语句与写入转发一起使用:
-
数据操作语言(DML)语句,如
INSERT
、DELETE
和UPDATE
。 -
SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE }
语句 -
PREPARE
和EXECUTE
语句 -
EXPLAIN
语句和此列表中语句 -
DML 语句可能由多个部分组成,如
INSERT ... SELECT
语句或DELETE ... WHERE
语句。在这种情况下,整个语句将转发到写入器数据库实例并在此处运行。
写入转发不支持以下类型的 SQL 语句:
注意
这些语句可以由您在应用程序中隐式使用,也可以由 PostgreSQL 协议推断出来。例如,PL/SQL 异常处理可能会导致使用 SAVEPOINT,但该语句不受支持。
-
数据定义语言(DDL)语句
-
ANALYZE
-
CLUSTER
-
COPY
-
游标 - 不支持游标,因此在使用本地写入转发之前,请务必将其关闭。
-
用户定义的函数和用户定义的过程。
-
GRANT
|REVOKE
|REASSIGN OWNED
|SECURITY LABEL
-
LOCK
-
SAVEPOINT
-
SELECT INTO
-
SET CONSTRAINTS
-
TRUNCATE
-
VACUUM
-
LISTEN / NOTIFY
-
两阶段提交命令:
PREPARE TRANSACTION
、COMMIT PREPARED
、ROLLBACK PREPARED
-
序列更新:
nextval()
、setval()
写入转发的默认参数设置
Aurora 集群参数组包含本地写入转发特征的设置。由于这些是集群参数,因此每个集群中的所有数据库实例对于这些变量具有相同的值。下表汇总了有关这些参数的详细信息,表后附有使用说明。
参数 | 范围 | 类型 | 默认值 | 有效值 |
---|---|---|---|---|
apg_write_forward.connect_timeout |
会话 | 秒 | 30 | 0–2147483647 |
apg_write_forward.consistency_mode |
Session | enum | 会话 | SESSION 、EVENTUAL 、GLOBAL 和 OFF |
apg_write_forward.idle_in_transaction_session_timeout |
会话 | 毫秒 | 86400000 | 0–2147483647 |
apg_write_forward.idle_session_timeout |
会话 | 毫秒 | 300000 | 0–2147483647 |
apg_write_forward.max_forwarding_connections_percent |
全局 | int | 25 | 1–100 |
apg_write_forward.max_forwarding_connections_percent
参数是可以用于处理从读取器转发的查询的数据库连接插槽上限。它表示为写入器数据库实例的 max_connections
设置的百分比。例如,如果 max_connections
是 800
,而 apg_write_forward.max_forwarding_connections_percent
是 10
,则写入器最多允许 80 个同时转发会话。这些连接来自由 max_connections
设置管理的同一连接池。此设置仅在集群启用了本地写入转发时适用于写入器数据库实例。
使用以下设置来控制本地写入转发请求:
-
apg_write_forward.consistency_mode
– 会话级参数,用于控制只读副本上的读取一致性程度。有效值为SESSION
、EVENTUAL
、GLOBAL
或OFF
。默认情况下, 值设为SESSION
。将该值设置为OFF
将在会话中禁用本地写入转发。要了解有关一致性级别的更多信息,请参阅Aurora PostgreSQL 中本地写入转发的一致性和隔离。此参数仅适用于启用了本地写入转发的读取器实例。 apg_write_forward.connect_timeout
– 只读副本在与写入器数据库实例建立连接时在放弃之前等待的最大秒数。值0
表示无限期等待。apg_write_forward.idle_in_transaction_session_timeout
– 写入器数据库实例在关闭从具有未处理事务的只读副本转发的连接之前等待活动的毫秒数。如果在此段时间之后,会话在事务中仍处于空闲状态,则 Aurora 会终止会话。0
值禁用超时。apg_write_forward.idle_session_timeout
– 写入器数据库实例在关闭从只读副本转发的连接之前等待活动的毫秒数。如果会话在这段时间之后仍处于空闲状态,则 Aurora 会终止会话。值0
禁用超时。
rdswriteforwarduser
rdswriteforwarduser
是我们将用于在只读副本和写入器数据库实例之间建立连接的用户。
注意
rdswriteforwarduser
通过 PUBLIC 角色继承其对客户数据库的 CONNECT 权限。如果撤销 PUBLIC 角色的权限,则需要为将写入转发到的数据库授予 CONNECT 权限。