本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
分析 Amazon DocumentDB 操作
您可以使用 Amazon DocumentDB 中的分析器(兼容 MongoDB)中的分析器来记录在您集群上执行的操作的执行时间和详细信息。对于监控集群上速度最慢的操作以帮助您提高单个查询的性能和整体集群性能,分析器非常有用。
默认情况下,分析器功能处于禁用状态。在启用时,分析器将用时超过客户定义阈值(例如,100 毫秒)的操作记录到 Amazon CloudWatch Logs 中。记录的详细信息包括分析的命令、时间、计划摘要和客户端元数据。在将操作记录到 CloudWatch Logs 中之后,您可以使用 CloudWatch Logs Insights 来分析、监控和存档 Amazon DocumentDB 分析数据。常见查询部分中提供了常见的查询。
在启用时,分析器会使用集群中的其他资源。我们建议您从较高的阈值(例如,500 毫秒)开始,然后逐步降低该值以确定缓慢的操作。对于高吞吐量应用程序,从 50 毫秒阈值开始会导致集群性能问题。分析器在集群级别启用,并对集群中的所有实例和数据库执行分析。Amazon DocumentDB 尽最大努力将操作记录到 Amazon CloudWatch Logs 中。
尽管 Amazon DocumentDB 不会对启用分析器施加任何额外的费用,但您需要向使用 CloudWatch Logs 收取的标准费率。有关 CloudWatch Logs 定价的信息,请参阅Amazon CloudWatch 定价
支持的 操作
Amazon DocumentDB 分析器支持以下操作:
aggregate
count
delete
distinct
find
(OP_QUERY 和命令)findAndModify
insert
update
限制
只有在查询的整个结果集都能容纳在一个批处理中,且结果集低于 16MB(最大 BSON 大小)时,慢查询分析器才能发出分析器日志。大于 16MB 的结果集会自动拆分为多个批次。
大多数驱动程序或 shell 可能会设置较小的默认批处理大小。您可以在查询中指定批量大小。为了捕获慢查询日志,我们建议使用超过预期结果集大小的批处理大小。如果您不确定结果集大小,或者如果不同,您也可以将批处理大小设置为较大的数字(例如 100k)。
但是,使用较大的批处理大小意味着在向客户端发送响应之前,必须从数据库中检索更多结果。对于某些查询,这可能会在获得结果之前造成更长的延迟。如果您不打算使用整个结果集,则可能会花更多的 I/O 来处理查询并丢弃结果。
启用 Amazon DocumentDB 档案器
在集群上启用分析器的过程包含三个步骤。确保所有步骤均完成,否则分析日志不会发送到 CloudWatch Logs。分析器在集群级别设置,对集群的所有数据库和实例执行分析。
在集群上启用分析器
-
由于您无法修改默认集群参数组,请确保您有可用的自定义集群参数组。有关更多信息,请参阅创建 Amazon DocumentDB 集群参数组。
-
使用可用的自定义集群参数组,修改以下参数:
profiler
、profiler_threshold_ms
和profiler_sampling_rate
。有关更多信息,请参阅修改 Amazon DocumentDB 集群参数组。 -
创建或修改集群以使用自定义集群参数组并启用导出
profiler
将日志发布到 CloudWatch Logs。
以下部分说明如何使用 Amazon Web Services Management Console和 Amazon Command Line Interface (Amazon CLI) 实施这些步骤。
-
在开始之前,请创建 Amazon DocumentDB 集群和一个自定义集群参数组(如果您没有)。有关更多信息,请参阅 创建 Amazon DocumentDB 集群参数组 和 创建 Amazon DocumentDB 集群。
-
使用可用的自定义集群参数组,修改以下参数。有关更多信息,请参阅修改 Amazon DocumentDB 集群参数组。
-
profiler
— 启用或禁用查询分析。允许的值为enabled
和disabled
。默认值为disabled
。要启用分析,请将值设置为enabled
。 -
profiler_threshold_ms
— 当profiler
设置为enabled
,用时超过的所有命令profiler-threshold-ms
已登录到 CloudWatch。允许的值为[50-INT_MAX]
。默认值为100
。 -
profiler_sampling_rate
— 应该分析或记录的缓慢操作的部分。允许的值为[0.0-1.0]
。默认值为1.0
。
-
-
修改集群以使用自定义集群参数组,并将分析器日志导出设置为发布到 Amazon CloudWatch Logs。
-
在导航窗格中,选择 Clusters (集群) 以将自定义参数组添加到集群。
-
选择要与您的参数组关联的集群名称左边的按钮。选择 Actions (操作),然后选择 Modify (修改) 以修改您的集群。
-
在 Cluster options (集群选项) 下,选择上一步中的自定义参数组以将其添加到集群中。
-
在日志导出,请选择分析器日志以发布到 Amazon CloudWatch Logs。
-
选择 Continue (继续) 以查看修改摘要。
-
在确认您的更改后,您可以立即应用这些更改,也可以在 Scheduling of modifications (修改计划) 下的下一个维护时段内应用这些更改。
-
选择 Modify cluster (修改集群) 以使用新参数组更新您的集群。
-
以下过程对集群 sample-cluster
上的所有支持操作启用分析器。
-
在开始之前,请运行以下命令,并查看对于名称中不包含
default
且具有docdb3.6
作为参数组系列的集群参数组的输出,以确保您拥有可用的自定义集群参数组。如果您没有非默认集群参数组,请参阅创建 Amazon DocumentDB 集群参数组。aws docdb describe-db-cluster-parameter-groups \ --query 'DBClusterParameterGroups[*].[DBClusterParameterGroupName,DBParameterGroupFamily]'
在以下输出中,仅
sample-parameter-group
满足这两个条件。[ [ "default.docdb3.6", "docdb3.6" ], [
"sample-parameter-group"
, "docdb3.6" ] ] -
使用您的自定义集群参数组,修改以下参数。
-
profiler
— 启用或禁用查询分析。允许的值为enabled
和disabled
。默认值为disabled
。要启用分析,请将值设置为enabled
。 -
profiler_threshold_ms
— 当profiler
设置为enabled
,所有命令都用时超过profiler -threshold-ms
已登录到 CloudWatch。允许的值为[0-INT_MAX]
。将此值设置为0
可分析所有支持的操作。默认值为100
。 -
profiler_sampling_rate
— 应该分析或记录的缓慢操作的部分。允许的值为[0.0-1.0]
。默认值为1.0
。
aws docdb modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name sample-parameter-group \ --parameters ParameterName=profiler,ParameterValue=enabled,ApplyMethod=immediate \ ParameterName=profiler_threshold_ms,ParameterValue=100,ApplyMethod=immediate \ ParameterName=profiler_sampling_rate,ParameterValue=0.5,ApplyMethod=immediate
-
-
修改您的 Amazon DocumentDB 集群,以便它使用
sample-parameter-group
从之前步骤获取的自定义集群参数组并设置参数--enable-cloudwatch-logs-exports
到profiler
.以下代码修改集群
sample-cluster
要使用的sample-parameter-group
从之前步骤获取的步骤,并添加profiler
到已启用的 CloudWatch Logs 导出。aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --db-cluster-parameter-group-name sample-parameter-group \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["profiler"]}'
此操作的输出将类似于下文。
{ "DBCluster": { "AvailabilityZones": [ "us-east-1c", "us-east-1b", "us-east-1a" ], "BackupRetentionPeriod": 1, "DBClusterIdentifier": "sample-cluster", "DBClusterParameterGroup": "sample-parameter-group", "DBSubnetGroup": "default", "Status": "available", "EarliestRestorableTime": "2020-04-07T02:05:12.479Z", "Endpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "ReaderEndpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "MultiAZ": false, "Engine": "docdb", "EngineVersion": "3.6.0", "LatestRestorableTime": "2020-04-08T22:08:59.317Z", "Port": 27017, "MasterUsername": "test", "PreferredBackupWindow": "02:00-02:30", "PreferredMaintenanceWindow": "tue:09:50-tue:10:20", "DBClusterMembers": [ { "DBInstanceIdentifier": "sample-instance-1", "IsClusterWriter": true, "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1 }, { "DBInstanceIdentifier": "sample-instance-2", "IsClusterWriter": true, "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1 } ], "VpcSecurityGroups": [ { "VpcSecurityGroupId": "sg-abcd0123", "Status": "active" } ], "HostedZoneId": "ABCDEFGHIJKLM", "StorageEncrypted": true, "KmsKeyId": "arn:aws:kms:us-east-1:<accountID>:key/sample-key", "DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ", "DBClusterArn": "arn:aws:rds:us-east-1:<accountID>:cluster:sample-cluster", "AssociatedRoles": [], "ClusterCreateTime": "2020-01-10T22:13:38.261Z", "EnabledCloudwatchLogsExports": [ "profiler" ], "DeletionProtection": true } }
禁用 Amazon DocumentDB 档案器
要禁用分析器,请禁用分析器profiler
参数和导出profiler
将日志发布到 CloudWatch Logs。
禁用 分析器
您可以使用 Amazon Web Services Management Console或 Amazon CLI 禁用 profiler
参数,如下所示。
以下过程使用Amazon Web Services Management Console禁用 Amazon DocumentDBprofiler
.
-
在处登录Amazon Web Services Management Console,然后在以下位置打开 Amazon DocumentDB 控制台https://console.aws.amazon.com/docdb
. -
在导航窗格中,选择参数组。然后选择您要在其上禁用分析器的集群参数组的名称。
-
在生成的 Cluster parameters (集群参数) 页面中,选择
profiler
参数左侧的按钮,然后选择 Edit (编辑)。 -
在 Modify Profiler (修改分析器) 对话框中,在列表中选择
disabled
。 -
选择 Modify cluster parameter (修改集群参数)。
要使用 Amazon CLI 在集群上禁用 profiler
,请如下所示修改集群。
aws docdb modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name sample-parameter-group \ --parameters ParameterName=profiler,ParameterValue=disabled,ApplyMethod=immediate
禁用分析器日志导出
你可以禁用导出profiler
将日志发布到 CloudWatch LogsAmazon Web Services Management Console要么Amazon CLI,如下所示。
以下过程使用Amazon Web Services Management Console禁用 Amazon DocumentDB 将日志导出到 CloudWatch。
-
在处打开 Amazon DocumentDB 控制台https://console.aws.amazon.com/docdb
. -
在导航窗格中,选择 Clusters。选择要禁用导出日志的集群名称左侧的按钮。
-
在 Actions (操作) 菜单上,选择 Modify (修改)。
-
向下滚动到 Log exports (日志导出) 部分并取消选择 Profiler logs (分析器日志)。
-
选择 Continue (继续)。
-
检查更改,然后选择何时将该更改应用到集群:
-
Apply during the next scheduled maintenance window (在下一个计划的维护时段内应用)
-
Apply immediately (立即应用)
-
-
选择修改集群。
以下代码修改集群sample-cluster
并禁用 CloudWatch 分析器日志。
对于 Linux、macOS 或 Unix:
aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["profiler"]}'
对于 Windows:
aws docdb modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["profiler"]}'
此操作的输出将类似于下文。
{
"DBCluster": {
"AvailabilityZones": [
"us-east-1c",
"us-east-1b",
"us-east-1a"
],
"BackupRetentionPeriod": 1,
"DBClusterIdentifier": "sample-cluster",
"DBClusterParameterGroup": "sample-parameter-group",
"DBSubnetGroup": "default",
"Status": "available",
"EarliestRestorableTime": "2020-04-08T02:05:17.266Z",
"Endpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com",
"ReaderEndpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com",
"MultiAZ": false,
"Engine": "docdb",
"EngineVersion": "3.6.0",
"LatestRestorableTime": "2020-04-09T05:14:44.356Z",
"Port": 27017,
"MasterUsername": "test",
"PreferredBackupWindow": "02:00-02:30",
"PreferredMaintenanceWindow": "tue:09:50-tue:10:20",
"DBClusterMembers": [
{
"DBInstanceIdentifier": "sample-instance-1",
"IsClusterWriter": true,
"DBClusterParameterGroupStatus": "in-sync",
"PromotionTier": 1
},
{
"DBInstanceIdentifier": "sample-instance-2",
"IsClusterWriter": true,
"DBClusterParameterGroupStatus": "in-sync",
"PromotionTier": 1
}
],
"VpcSecurityGroups": [
{
"VpcSecurityGroupId": "sg-abcd0123",
"Status": "active"
}
],
"HostedZoneId": "ABCDEFGHIJKLM",
"StorageEncrypted": true,
"KmsKeyId": "arn:aws:kms:us-east-1:<accountID>:key/sample-key",
"DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"DBClusterArn": "arn:aws:rds:us-east-1:<accountID>:cluster:sample-cluster",
"AssociatedRoles": [],
"ClusterCreateTime": "2020-01-10T22:13:38.261Z",
"DeletionProtection": true
}
}
访问您的 Amazon DocumentDB 档案器日志
按照以下步骤在 Amazon CloudWatch atch atch Logs 中访问您的分析日志。
访问 https://console.aws.amazon.com/cloudwatch/
,打开 CloudWatch 控制台。 -
确保您与 Amazon DocumentDB 集群位于同一区域。
-
在导航窗格中,选择日志。
-
要查找集群的分析器日志,请在列表中选择
/aws/docdb/
。yourClusterName
/profiler此时,每个实例名称的下方将显示该实例的分析日志。
常见查询
以下是您可以用来分析您的已分析命令的常见查询。有关 CloudWatch Logs Insights 的更多信息,请参阅使用 CloudWatch Logs Insights 分析日志数据和查询示例.
获取指定集合上最慢的 10 个操作
filter ns="test.foo" | sort millis desc | limit 10
获取集合上用时超过 60 毫秒的所有更新操作
filter millis > 60 and op = "update"
获取上个月最慢的 10 个操作
sort millis desc | limit 10
获取具有 COLLSCAN 计划摘要的所有查询
filter planSummary="COLLSCAN"