本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon Neptune 慢速查询日志记录
识别、调试和优化运行缓慢的查询可能很困难。启用 Neptune 的慢速查询日志记录后,会自动记录所有长时间运行的查询的属性,以简化此过程。
注意
Neptune 引擎版本 1.2.1.0 中引入了慢速查询日志记录。
您可以使用 neptune_enable_slow_query_log 数据库集群参数启用慢速查询日志记录。默认情况下,此参数设置为 disabled
。将其设置为 info
或 debug
可启用慢速查询日志记录。info
设置记录每个运行缓慢的查询的一些有用属性,而 debug
设置则记录所有可用属性。
要为视为运行缓慢的查询设置阈值,请使用 neptune_slow_query_log_threshold 数据库集群参数来指定毫秒数,在此时间之后,正在运行的查询会被视为慢速查询,并在启用慢速查询日志记录时记录下来。默认值为 5000 毫秒(5 秒)。
您可以在 AWS Management Console、使用 modify-db-cluster-parameter-group AWS CLI 命令或 M odifyDBCluster ParameterGroup 管理功能中设置这些数据库集群参数。
注意
慢速查询日志记录参数是动态的,这意味着更改其值不需要或导致数据库集群重启。
要在中查看慢查询日志 AWS Management Console
您可以在中查看和下载慢速查询日志 AWS Management Console,如下所示:
在实例页面上,选择该数据库实例,然后滚动到日志部分。然后,您可以在那里选择一个日志文件,然后选择下载以进行下载。
Neptune 慢速查询日志记录生成的文件
在 Neptune 中通过慢速查询日志记录生成的日志文件具有以下特性:
这些文件被编码为 UTF -8。
查询及其属性JSON以表单形式记录。
除
queryTime
数据外,不记录 Null 属性和空属性。日志跨越多个文件,其数量根据实例大小而变化。
日志条目不按先后顺序。您可以使用其
timestamp
值对它们进行排序。要查看最新事件,您可能必须审核所有慢速查询日志文件。
日志文件在总和达到 100MiB 时轮换。此限制是无法配置的。
在 info
模式下记录的查询属性
当 neptune_enable_slow_query_log
数据库集群参数设置为 info
时,会记录慢速查询的以下属性:
组 | 属性 | 描述 |
---|---|---|
requestResponseMetadata |
|
查询的请求 ID。 |
|
请求类型,比如HTTP或 WebSocket。 |
|
|
查询响应状态码,比如 200。 |
|
|
查询执行后返回的错误的异常类。 |
|
queryStats |
|
查询字符串。 |
|
查询的指纹。 |
|
|
查询语言,比如 Gremlin,SPARQL或。openCypher |
|
memoryStats |
|
分配给查询的许可。 |
|
查询在执行期间使用的近似内存量。 |
|
queryTime |
|
查询开始时间 (UTC)。 |
|
查询总运行时间,以毫秒为单位。 |
|
|
查询解析时间,以毫秒为单位。 |
|
|
查询Gremlin/SPARQL/openCypher队列等待时间,以毫秒为单位 |
|
|
查询执行时间,以毫秒为单位。 |
|
|
查询序列化时间,以毫秒为单位。 |
|
statementCounters |
|
扫描的语句数量。 |
|
写入的语句数量。 |
|
|
删除的语句数量。 |
|
transactionCounters |
|
已提交的事务数量。 |
|
回滚的事务数量。 |
|
vertexCounters |
|
添加的顶点数。 |
|
移除的顶点数。 |
|
|
添加的顶点属性的数量。 |
|
|
移除的顶点属性的数量。 |
|
edgeCounters |
|
添加的边缘数量。 |
|
移除的边缘数量。 |
|
|
添加的边缘属性的数量。 |
|
|
移除的边缘属性的数量。 |
|
resultCache |
|
结果缓存命中计数。 |
|
结果缓存未命中计数。 |
|
|
结果缓存放置计数。 |
|
concurrentExecution |
|
当前查询执行在开始时接受的并行查询。 |
|
当前查询执行在开始时运行的并行查询。 |
|
|
当前查询执行在结束时接受的并行查询。 |
|
|
当前查询执行在结束时运行的并行查询。 |
|
queryBatch |
|
查询处理期间的批量大小。 |
|
查询序列化期间的批量大小。 |
在 debug
模式下记录的查询属性
将 neptune_enable_slow_query_log
数据库集群参数设置为 debug
后,除了在 info
模式下记录的属性外,还会记录以下存储计数器属性:
属性 | 描述 |
---|---|
|
在所有索引中扫描的语句。 |
|
已在SPOG索引中扫描语句。 |
|
已在POGS索引中扫描语句。 |
|
已在GPSO索引中扫描语句。 |
|
已在OSGP索引中扫描语句。 |
|
成块一起扫描的语句。 |
|
扫描后筛选后留下的语句。 |
|
扫描的不同语句。 |
|
在所有索引中进行扫描后筛选后读取的语句。 |
|
在SPOG索引中进行扫描后筛选后读取的语句。 |
|
在POGS索引中进行扫描后筛选后读取的语句。 |
|
在GPSO索引中进行扫描后筛选后读取的语句。 |
|
在OSGP索引中进行扫描后筛选后读取的语句。 |
|
访问路径搜索次数。 |
|
完全限定的密钥访问路径搜索次数。 |
|
按前缀搜索的访问路径数。 |
|
输出 1 条或更多记录的搜索次数。 |
|
输出中没有记录的搜索次数。 |
|
从所有搜索中找到的记录总数。 |
|
所有索引中插入的语句数。 |
|
所有索引中更新的语句数。 |
|
所有索引中删除的语句数。 |
|
谓词的数量。 |
|
从值到 ID 表的字典读取次数。 |
|
从值的 ID 表中读取字典的次数。 |
|
向值到 ID 表进行字典写入的次数。 |
|
向 ID 到值表进行字典写入的次数。 |
|
所有索引中的范围计数数量。 |
|
查询中的死锁数。 |
|
执行的单基数插入次数。 |
|
在单基数插入期间删除的语句数。 |
慢速查询的调试日志记录示例
以下 Gremlin 查询的运行时间可能比为慢速查询设置的阈值更长:
gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()
然后,如果在调试模式下启用了慢速查询日志记录,则将以这样的形式记录查询的以下属性:
{ "requestResponseMetadata": { "requestId": "5311e493-0e98-457e-9131-d250a2ce1e12", "requestType": "HTTP_GET", "responseStatusCode": 200 }, "queryStats": { "query": "gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()", "queryFingerprint": "g.V().has(string0,string1).repeat(__.out().simplePath()).until(__.has(string0,string2)).path().by(string0).limit(long0).fold()", "queryLanguage": "Gremlin" }, "memoryStats": { "allocatedPermits": 20, "approximateUsedMemoryBytes": 14838 }, "queryTimeStats": { "startTime": "23/02/2023 11:42:52.657", "overallRunTimeMs": 2249, "executionTimeMs": 2229, "serializationTimeMs": 13 }, "statementCounters": { "read": 69979 }, "transactionCounters": { "committed": 1 }, "concurrentExecutionStats": { "acceptedQueryCountAtStart": 1 }, "queryBatchStats": { "queryProcessingBatchSize": 1000, "querySerialisationBatchSize": 1000 }, "storageCounters": { "statementsScannedInAllIndexes": 69979, "statementsScannedSPOGIndex": 44936, "statementsScannedPOGSIndex": 4, "statementsScannedGPSOIndex": 25039, "statementsReadInAllIndexes": 68566, "statementsReadSPOGIndex": 43544, "statementsReadPOGSIndex": 2, "statementsReadGPSOIndex": 25020, "accessPathSearches": 27, "fullyBoundedAccessPathSearches": 27, "dictionaryReadsFromValueToIdTable": 10, "dictionaryReadsFromIdToValueTable": 17, "rangeCountsInAllIndexes": 4 } }