管理 RDS 代理
下面,您可以找到有关如何管理 RDS Proxy 操作和配置的说明。这些过程可帮助您的应用程序最有效地利用数据库连接,并实现最大程度的连接重用。您越多地利用连接重用,就可以节省越多的 CPU 和内存开销。这进而减少了应用程序的延迟,使数据库能够将更多资源用于处理应用程序请求。
修改 RDS 代理
您可以在创建代理后更改与代理关联的特定设置。可通过修改代理本身和/或其关联的目标组来执行此操作。每个代理都有一个关联的目标组。
重要
Client authentication type(客户端身份验证类型)和 IAM authentication(IAM 身份验证)字段中的值适用于与此代理关联的所有 Secrets Manager 密钥。要为每个密钥指定不同的值,请使用 Amazon CLI 或改用 API 来修改代理。
修改代理的设置
-
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Proxies (代理)。
-
在代理列表中,选择要修改其设置的代理或转到其详细信息页面。
-
对于 Actions (操作),选择 Modify (修改)。
-
输入或选择要修改的属性。您可以指定如下内容:
-
代理标识符 – 通过输入新标识符来重命名代理。
-
空闲客户端连接超时 - 输入空闲客户端连接超时的时间段。
-
IAM 角色 – 更改用于从 Secrets Manager 中检索密钥的 IAM 角色。
-
Secrets Manager 密钥 - 添加或删除 SSecrets Manager 密钥。这些密钥对应于数据库用户名和密码。
-
Client authentication type(客户端身份验证类型)-(仅限 PostgreSQL)更改客户端与代理的连接的身份验证类型。
-
IAM authentication(IAM 身份验证)– 要求或禁止对与代理的连接进行 IAM 身份验证。
-
需要传输层安全性 - 打开或关闭传输层安全性 (TLS) 的要求。
-
VPC 安全组 - 添加或删除供代理使用的 VPC 安全组。
-
启用增强型日志记录 - 启用或禁用增强型日志记录。
-
-
选择修改。
如果您找不到要更改的列出设置,请使用以下过程更新代理的目标组。与代理关联的目标组控制与物理数据库连接相关的设置。每个代理都有一个名为 default
的关联目标组,该目标组与代理一起自动创建。
您只能从代理详细信息页面修改目标组,而不能从 Proxies (代理) 页面上的列表中进行修改。
修改代理目标组的设置
-
在 Proxies (代理) 页面上,转到代理的详细信息页面。
-
对于 Target groups (目标组),选择
default
链接。目前,所有代理都有一个名为default
的目标组。 -
在默认目标组的详细信息页面上,选择 Modify (修改)。
-
为您可以修改的属性选择新设置:
-
数据库 – 选择不同的 RDS 数据库实例或集群。
-
连接池最大连接数 – 调整代理可使用的最大可用连接的百分比。
-
会话固定筛选条件 -(可选)选择会话固定筛选条件。这样做可以帮助减少由于事务级别的连接重用不足而导致的性能问题。要使用该设置,您需要了解应用程序行为以及 RDS 代理将会话固定到数据库连接的情况。目前,PostgreSQL 不支持该设置,唯一的选择是
EXCLUDE_VARIABLE_SETS
。 -
连接借用超时 - 调整连接借用超时间隔。当最大连接数已用于代理时,此设置适用。该设置确定在返回超时错误之前代理等待连接可用的时间。
-
初始化查询 - (可选)添加初始化查询或修改当前查询。您可以为代理指定一个或多个 SQL 语句,以便在打开每个新数据库连接时运行。设置通常与
SET
语句一起使用,以确保每个连接具有相同的设置,如时区和字符集。对于多个语句,请使用分号作为分隔符。您还可以在单个SET
语句中包含多个变量,例如SET x=1, y=2
。初始化查询目前不支持 PostgreSQL。
不能更改某些属性,例如,目标组标识符和数据库引擎。
-
-
选择 Modify target group (修改目标组)。
要使用 Amazon CLI 修改代理,请使用 modify-db-proxy、modify-db-proxy-target-group、deregister-db-proxy-targets 和 register-db-proxy-targets 命令。
使用 modify-db-proxy
命令,您可以更改以下属性:
-
代理使用的一组 Secrets Manager 密钥。
-
是否需要 TLS。
-
空闲客户端超时。
-
是否记录 SQL 语句中的其他信息以进行调试。
-
用于检索 Secrets Manager 密钥的 IAM 角色。
-
代理使用的安全组。
以下示例演示了如何重命名现有代理。
aws rds modify-db-proxy --db-proxy-name
the-proxy
--new-db-proxy-namethe_new_name
要修改与连接相关的设置或重命名目标组,请使用 modify-db-proxy-target-group
命令。目前,所有代理都有一个名为 default
的目标组。使用此目标组时,请指定代理的名称,并指定 default
作为目标组的名称。
以下示例演示了如何首先检查代理的 MaxIdleConnectionsPercent
设置,然后使用目标组对其进行更改。
aws rds describe-db-proxy-target-groups --db-proxy-name
the-proxy
{ "TargetGroups": [ { "Status": "available", "UpdatedDate": "2019-11-30T16:49:30.342Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 50, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } ] } aws rds modify-db-proxy-target-group --db-proxy-namethe-proxy
--target-group-name default --connection-pool-config ' { "MaxIdleConnectionsPercent": 75 }' { "DBProxyTargetGroup": { "Status": "available", "UpdatedDate": "2019-12-02T04:09:50.420Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 75, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } }
使用 deregister-db-proxy-targets
和 register-db-proxy-targets
命令,您可以通过相应的目标组来更改代理关联的 RDS 数据库实例。目前,每个代理都可以连接到一个 RDS 数据库实例。目标组可跟踪多可用区配置中的所有 RDS 数据库实例的连接详细信息。
以下示例首先介绍了与名为 cluster-56-2020-02-25-1399
的 Aurora MySQL 集群关联的代理。该示例演示了如何更改代理,以便连接到名为 provisioned-cluster
的不同集群。
使用 RDS 数据库实例时,请指定 --db-instance-identifier
选项。
以下示例修改 Aurora MySQL 代理。Aurora PostgreSQL 代理具有端口 5432。
aws rds describe-db-proxy-targets --db-proxy-name
the-proxy
{ "Targets": [ { "Endpoint": "instance-9814.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-9814" }, { "Endpoint": "instance-8898.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-8898" }, { "Endpoint": "instance-1018.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-1018" }, { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "cluster-56-2020-02-25-1399" }, { "Endpoint": "instance-4330.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-4330" } ] } aws rds deregister-db-proxy-targets --db-proxy-namethe-proxy
--db-cluster-identifier cluster-56-2020-02-25-1399 aws rds describe-db-proxy-targets --db-proxy-namethe-proxy
{ "Targets": [] } aws rds register-db-proxy-targets --db-proxy-namethe-proxy
--db-cluster-identifier provisioned-cluster { "DBProxyTargets": [ { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "provisioned-cluster" }, { "Endpoint": "gkldje.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "gkldje" }, { "Endpoint": "provisioned-1.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "provisioned-1" } ] }
要使用 RDS API 修改代理,请使用 ModifyDBProxy、ModifyDBProxyTargetGroup、DeregisterDBProxyTargets 和 RegisterDBProxyTargets 操作。
使用 ModifyDBProxy
,您可以更改以下属性:
-
代理使用的一组 Secrets Manager 密钥。
-
是否需要 TLS。
-
空闲客户端超时。
-
是否记录 SQL 语句中的其他信息以进行调试。
-
用于检索 Secrets Manager 密钥的 IAM 角色。
-
代理使用的安全组。
使用 ModifyDBProxyTargetGroup
,您可以修改与连接相关的设置或重命名目标组。目前,所有代理都有一个名为 default
的目标组。使用此目标组时,请指定代理的名称,并指定 default
作为目标组的名称。
使用 DeregisterDBProxyTargets
和 RegisterDBProxyTargets
,您可以通过相应的目标组来更改代理关联的 。目前,每个代理都可以连接到一个 。目标组可跟踪的连接详细信息。
添加新数据库用户
在某些情况下,您可能会将新数据库用户添加到与代理关联的 。如果是这样,请添加 Secrets Manager 密钥或调整其用途,以存储该用户的凭证。为此,请选择以下选项之一:
-
使用 在 Amazon Secrets Manager 中设置数据库凭证 中描述的过程创建新 Secrets Manager 密钥。
-
更新 IAM 角色以授予 RDS Proxy 对新 Secrets Manager 密钥的访问权限。为此,请更新 IAM 角色策略的资源部分。
-
修改 RDS 代理,以在 Secrets Manager 密钥下添加新的 Secrets Manager 密钥。
-
如果新用户取代了现有用户,请更新存储在代理的 Secrets Manager 密钥中的现有用户的凭证。
您可以为您的 PostgreSQL 数据库运行以下命令(如果有):
REVOKE CONNECT ON DATABASE postgres FROM PUBLIC;
向 rdsproxyadmin
用户授予 CONNECT
权限,以便用户可以监控目标数据库上的连接。
GRANT CONNECT ON DATABASE postgres TO rdsproxyadmin;
还可以通过将上述命令中的 rdsproxyadmin
更改为其他目标数据库用户,来允许该数据库用户执行运行状况检查。
更改数据库用户的密码
在某些情况下,您可能会更改与代理关联的 中的数据库用户的密码。如果是这样,请使用新密码更新相应的 Secrets Manager 密钥。
客户端和数据库连接
从您的应用程序到 RDS 代理的连接称为客户端连接。从代理到数据库的连接则称为数据库连接。使用 RDS 代理时,客户端连接在代理处终止,而数据库连接则在 RDS 代理中进行管理。
应用程序端连接池可以减少应用程序与 RDS 代理之间重复建立连接。
在实现应用程序端连接池之前,请考虑以下配置方面:
-
客户端连接最长期限:RDS 代理强制规定客户端连接的最长期限为 24 小时。此值不可配置。将池配置为最长连接期限小于 24 小时,以免客户端连接意外中断。
-
客户端连接空闲超时:RDS 代理强制规定客户端连接的最长空闲时间。为池配置的空闲连接超时值要小于 RDS 代理的客户端连接空闲超时设置,以免连接意外中断。
在应用程序端连接池中配置的最大客户端连接数不必限制为 RDS 代理的 max_connections 设置。
客户端连接池可延长客户端连接期限。如果您的连接遇到固定问题,则池化客户端连接可能会降低多路复用效率。已固定但在应用程序端连接池中处于空闲状态的客户端连接会继续保持数据库连接,并防止数据库连接被其它客户端连接重复使用。查看您的代理日志,以检查您的连接是否遇到固定问题。
配置连接设置
若要调整 RDS Proxy 的连接池,您可以修改以下设置:
IdleClientTimeout
您可以指定在代理关闭之前,客户端连接可以处于空闲状态的时长。默认值为 1800 秒(30 分钟)。
如果应用程序未在上一请求完成后的指定时间内提交新请求,则将客户端连接视为空闲。底层数据库连接保持打开状态并返回到连接池。因此,它可以重复用于新的客户端连接。如果希望代理主动删除过时的连接,请考虑降低空闲客户端连接超时。如果工作负载与代理建立频繁连接,请考虑增加空闲客户端连接超时,以便节省建立连接的成本。
此设置由 RDS 控制台中的 Idle client connection timeout(空闲客户端连接超时)字段以及 Amazon CLI 和 API 中的 IdleClientTimeout
设置表示。要了解如何在 RDS 控制台中更改 Idle client connection timeout(空闲客户端连接超时)字段的值,请参阅 Amazon Web Services Management Console。要了解如何更改 IdleClientTimeout
设置的值,请参阅 CLI 命令 modify-db-proxy 或 API 操作 ModifyDBProxy。
MaxConnectionsPercent
您可以限制 RDS 代理可与目标数据库建立的连接数。请将限制指定为数据库可用的最大连接数的百分比。此设置由 RDS 控制台中的 Connection pool maximum connections(连接池最大连接数)字段以及 Amazon CLI 和 API 中的 MaxConnectionsPercent
设置表示。
对于目标组使用的 RDS 数据库实例,MaxConnectionsPercent
值以 max_connections
设置的百分比表示。代理不会提前创建所有连接。此设置保留代理在工作负载需要时建立这些连接的权利。
例如,对于 max_connections
设置为 1000 且 MaxConnectionsPercent
设置为 95 的注册数据库目标,RDS 代理将 950 个连接设置为与该数据库目标的并行连接的上限。
工作负载达到允许的最大数据库连接数的一个常见副作用是总体查询延迟增加,同时 DatabaseConnectionsBorrowLatency
指标也会增加。您可以通过比较 DatabaseConnections
和 MaxDatabaseConnectionsAllowed
指标来监控当前使用的数据库连接数和允许的数据库连接总数。
设置此参数时,请注意以下最佳实践:
为工作负载模式的变化留出足够的连接余量。建议将该参数设置为比最近监控的最大使用量高出至少 30%。由于 RDS 代理在多个节点之间重新分配数据库连接限额,因此,内部容量更改可能需要至少 30% 的余量来增加连接,以避免增加借用延迟。
RDS 代理保留一定数量的连接用于主动监控,以支持快速失效转移、流量路由和内部操作。
MaxDatabaseConnectionsAllowed
指标不包括这些预留连接。该指标表示可用于为工作负载提供服务的连接数,可以低于从MaxConnectionsPercent
设置得出的值。推荐的最低
MaxConnectionsPercent
值db.t3.small:30
db.t3.medium 或更大:20
要了解如何在 RDS 控制台中更改 Connection pool maximum connections(连接池最大连接数)字段的值,请参阅 Amazon Web Services Management Console。要了解如何更改 MaxConnectionsPercent
设置的值,请参阅 CLI 命令 modify-db-proxy-target-group 或 API 操作 ModifyDBProxyTargetGroup。
有关数据库连接限制的更多信息,请参阅数据库最大连接数。
MaxIdleConnectionsPercent
您可以控制 RDS Proxy 可在连接池中保留的空闲数据库连接数。如果连接五分钟内没有活动,RDS Proxy 会将其池中的数据库连接视为空闲。
请将限制指定为数据库可用的最大连接数的百分比。原定设置值为 MaxConnectionsPercent
的 50%,上限为 MaxConnectionsPercent
的值。对于高值,代理会将较高百分比的空闲数据库连接保持在打开状态。对于低值,代理会关闭较高百分比的空闲数据库连接。如果您的工作负载不可预测,请考虑为 MaxIdleConnectionsPercent
设置较高的值。这样做意味着 RDS 代理可以在不打开大量新数据库连接的情况下适应活动的突增。
此设置由 Amazon CLI 和 API 中 DBProxyTargetGroup
的 MaxIdleConnectionsPercent
设置表示。要了解如何更改 MaxIdleConnectionsPercent
设置的值,请参阅 CLI 命令 modify-db-proxy-target-group 或 API 操作 ModifyDBProxyTargetGroup。
有关数据库连接限制的更多信息,请参阅数据库最大连接数。
ConnectionBorrowTimeout
您可以选择 RDS Proxy 在返回超时错误之前等待连接池中数据库连接可用的时间。默认值为 120 秒。此设置适用于连接数达到最大而导致连接池中没有可用连接的情况。如果由于正在进行故障转移操作而没有适当的数据库实例来处理请求,那么这也适用。通过使用此设置,您可以为应用程序设置最佳等待期,而无需更改应用程序代码中的查询超时。
此设置由 RDS Proxy 控制台中的 Connection borrow timeout(连接借用超时)字段、ConnectionBorrowTimeout
中 DBProxyTargetGroup
的 Amazon CLI 设置或 API 表示。要了解如何在 RDS 控制台中更改 Connection borrow timeout(连接借用超时)字段的值,请参阅 Amazon Web Services Management Console。要了解如何更改 ConnectionBorrowTimeout
设置的值,请参阅 CLI 命令 modify-db-proxy-target-group 或 API 操作 ModifyDBProxyTargetGroup。
避免固定
当数据库请求不依赖于先前请求的状态信息时,多路复用效率更高。在这种情况下,RDS Proxy 可以在每个事务结束时重用连接。此类状态信息的示例包括可通过 SET
或 SELECT
语句更改的大多数变量和配置参数。默认情况下,客户端连接上的 SQL 事务可以在底层数据库连接之间多路复用。
与代理的连接可以进入一种称为固定的状态。固定连接后,每个后续事务将使用相同的底层数据库连接,直到会话结束。在会话结束之前,其他客户端连接也不能重用该数据库连接。客户端连接断开时,会话结束。
当 RDS Proxy 检测到不适合其他会话的会话状态更改时,它会自动将客户端连接固定到特定的数据库连接。固定降低了连接重用的有效性。如果您的所有连接或几乎所有连接都遇到固定,请考虑修改应用程序代码或工作负载,以减少导致固定的条件。
例如,假定您的应用程序更改了会话变量或配置参数。在这种情况下,后面的语句可能依赖于新变量或参数来生效。因此,当 RDS 代理处理更改会话变量或配置设置的请求时,它会将该会话固定到数据库连接。这样,会话状态对于同一会话中的所有后续事务仍然有效。
对于某些数据库引擎,此规则并不适用于您可以设置的全部参数。RDS 代理会跟踪某些语句和变量。因此在您修改这些内容时,RDS Proxy 不会固定会话。在这种情况下,RDS 代理仅将连接重用于具有相同设置值的其他会话。有关 RDS 代理针对数据库引擎跟踪的内容的详细信息,请参阅以下内容:
RDS 代理针对 RDS for SQL Server 数据库跟踪的内容
以下是 RDS 代理跟踪的 SQL Server 语句:
USE
SET ANSI_NULLS
SET ANSI_PADDING
SET ANSI_WARNINGS
SET ARITHABORT
SET CONCAT_NULL_YIELDS_NULL
SET CURSOR_CLOSE_ON_COMMIT
SET DATEFIRST
SET DATEFORMAT
SET LANGUAGE
SET LOCK_TIMEOUT
SET NUMERIC_ROUNDABORT
SET QUOTED_IDENTIFIER
SET TEXTSIZE
SET TRANSACTION ISOLATION LEVEL
RDS 代理针对 RDS for MariaDB 数据库和 RDS for MySQL 数据库跟踪的内容
以下是 RDS 代理跟踪的 MySQL 和 MariaDB 语句:
DROP DATABASE
DROP SCHEMA
USE
以下是 RDS 代理跟踪的 MySQL 和 MariaDB 变量:
AUTOCOMMIT
AUTO_INCREMENT_INCREMENT
CHARACTER SET (or CHAR SET)
CHARACTER_SET_CLIENT
CHARACTER_SET_DATABASE
CHARACTER_SET_FILESYSTEM
CHARACTER_SET_CONNECTION
CHARACTER_SET_RESULTS
CHARACTER_SET_SERVER
COLLATION_CONNECTION
COLLATION_DATABASE
COLLATION_SERVER
INTERACTIVE_TIMEOUT
NAMES
NET_WRITE_TIMEOUT
QUERY_CACHE_TYPE
SESSION_TRACK_SCHEMA
SQL_MODE
TIME_ZONE
TRANSACTION_ISOLATION (or TX_ISOLATION)
TRANSACTION_READ_ONLY (or TX_READ_ONLY)
WAIT_TIMEOUT
最大限度地减少固定
RDS 代理的性能优化包括尝试通过最小化固定来最大化事务级别连接重用(多路复用)。
在某些情况下,RDS 代理不能确定在当前会话之外重用数据库连接是否安全。在这些情况下,它将会话保持在同一个连接上,直到会话结束。此回退行为称为固定。
您可以执行以下步骤以最大限度地减少固定:
-
避免可能导致固定的不必要的数据库请求。
-
在所有连接中一致地设置变量和配置设置。这样,后续会话更有可能重用具有这些特定设置的连接。
但是,对于 PostgreSQL 设置,变量会导致会话固定。
-
对于 MySQL 引擎系列数据库,可将会话固定筛选条件应用于代理。您可以免除某些类型的操作,使其不固定会话(如果您知道这样做不会影响应用程序的正确操作)。
-
通过监控 Amazon CloudWatch 指标
DatabaseConnectionsCurrentlySessionPinned
来查看固定的发生频率。有关该指标和其他 CloudWatch 指标的信息,请参阅 使用 Amazon CloudWatch 监控 RDS Proxy 指标。 -
如果您使用
SET
语句为每个客户端连接执行相同的初始化,则可以在保留事务级别多路复用的同时执行此操作。在这种情况下,您将设置初始会话状态的语句移动到由代理使用的初始化查询中。该属性是一个字符串,包含一个或多个 SQL 语句(用分号分隔)。例如,您可以为设置特定配置参数的代理定义初始化查询。然后,每当为该代理设置新连接时,RDS Proxy 都会应用这些设置。您可以从应用程序代码中删除相应的
SET
语句,这样,它们就不会干扰事务级别多路复用。有关代理的固定发生频率的指标,请参阅 使用 Amazon CloudWatch 监控 RDS Proxy 指标。
导致对所有引擎系列进行固定的条件
对于以下情况(其中多路复用可能会导致意外行为),代理将会话固定到当前连接:
文本大小大于 16 KB 的任何语句都会导致代理固定会话。
导致对 RDS for Microsoft SQL Server 进行固定的条件
对于 RDS for SQL Server,以下交互也会导致固定:
使用多个活动的结果集(MARS)。有关 MARS 的信息,请参阅 SQL Server
文档。 使用分布式事务协调器(DTC)通信。
创建临时表、事务、游标或预准备语句。
使用以下
SET
语句:SET ANSI_DEFAULTS
SET ANSI_NULL_DFLT
SET ARITHIGNORE
SET DEADLOCK_PRIORITY
SET FIPS_FLAGGER
SET FMTONLY
SET FORCEPLAN
SET IDENTITY_INSERT
SET NOCOUNT
SET NOEXEC
SET OFFSETS
SET PARSEONLY
SET QUERY_GOVERNOR_COST_LIMIT
SET REMOTE_PROC_TRANSACTIONS
SET ROWCOUNT
SET SHOWPLAN_ALL
、SHOWPLAN_TEXT
和SHOWPLAN_XML
SET STATISTICS
SET XACT_ABORT
导致对 RDS for MariaDB 和 RDS for MySQL 进行固定的条件
对于 MySQL 和 MariaDB,以下交互也会导致固定:
-
显式表锁定语句
LOCK TABLE
、LOCK TABLES
或FLUSH TABLES WITH READ LOCK
会导致代理固定会话。 -
通过使用
GET_LOCK
创建命名锁会导致代理固定会话。 -
设置用户变量或系统变量(有些例外)会导致代理固定会话。如果这种情况过多地减少了连接重用,您可以选择让
SET
操作不导致固定。有关如何通过设置会话固定筛选条件属性来执行此操作的信息,请参阅创建 RDS 代理和修改 RDS 代理。 -
使用 SET LOCAL 时,RDS 代理无法固定连接。
-
创建临时表会导致代理固定会话。这样,无论事务边界如何,临时表的内容都会在整个会话期间保留。
-
调用函数
ROW_COUNT
、FOUND_ROWS
和LAST_INSERT_ID
有时会导致固定。 -
预编译语句会导致代理固定会话。无论预编译语句使用 SQL 文本还是二进制协议,这项规则都适用。
调用存储过程和存储函数不会导致固定。RDS 代理不会检测此类调用导致的任何会话状态更改。因此,请确保您的应用程序不会更改存储例程中的会话状态,并依赖该会话状态跨事务持续存在。例如,如果存储过程创建了一个旨在跨事务持续存在的临时表,则该应用程序当前不与 RDS 代理兼容。
如果您拥有关于应用程序行为的专业知识,则可以跳过某些应用程序语句的固定行为。为此,请在创建代理时选择会话固定筛选条件选项。当前,您可以选择退出会话固定,以设置会话变量和配置设置。
导致对 RDS for PostgreSQL 进行固定的条件
对于 PostgreSQL,以下交互也会导致固定:
-
使用
SET
命令 -
使用
PREPARE
、DISCARD
、DEALLOCATE
、或EXECUTE
命令管理准备的语句 -
创建临时序列、表或视图
-
声明游标
-
丢弃会话状态
-
监听通知频道
-
加载库模块,如
auto_explain
-
使用函数操作序列,例如
nextval
和setval
-
使用函数与锁定交互,例如
pg_advisory_lock
和pg_try_advisory_lock
-
设置参数或将参数重置为其默认值
删除 RDS 代理
如果您不再需要某个代理,可以将其删除。您可能因为正在使用某个代理的应用程序不再相关而删除该代理。或者,如果您停止使用数据库实例或与其关联的集群,则可以删除代理。
删除代理
-
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Proxies (代理)。
-
从列表中选择要删除的代理。
-
选择 Delete Proxy (删除代理)。
要删除数据库代理,请使用 Amazon CLI 命令 delete-db-proxy。要删除相关的关联,还可以使用 deregister-db-proxy-targets 命令。
aws rds delete-db-proxy --name
proxy_name
aws rds deregister-db-proxy-targets --db-proxy-name
proxy_name
[--target-group-nametarget_group_name
] [--target-idscomma_separated_list
] # or [--db-instance-identifiersinstance_id
] # or [--db-cluster-identifierscluster_id
]
要删除数据库代理,请调用 Amazon RDS API 函数 DeleteDBProxy。要删除相关的项目和关联,您还可以调用函数 DeleteDBProxyTargetGroup 和 DeregisterDBProxyTargets。