使用 Amazon Neptune 慢速查询日志记录 - Amazon Neptune

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Neptune 慢速查询日志记录

识别、调试和优化运行缓慢的查询可能很困难。启用 Neptune 的慢速查询日志记录后,会自动记录所有长时间运行的查询的属性,以简化此过程。

注意

Neptune 引擎版本 1.2.1.0 中引入了慢速查询日志记录。

您可以使用 neptune_enable_slow_query_log 数据库集群参数启用慢速查询日志记录。默认情况下,此参数设置为 disabled。将其设置为 infodebug 可启用慢速查询日志记录。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

requestId

查询的请求 ID。

requestType

请求类型,比如HTTP或 WebSocket。

responseStatusCode

查询响应状态码,比如 200。

exceptionClass

查询执行后返回的错误的异常类。

queryStats

query

查询字符串。

queryFingerprint

查询的指纹。

queryLanguage

查询语言,比如 Gremlin,SPARQL或。openCypher

memoryStats

allocatedPermits

分配给查询的许可。

approximateUsedMemoryBytes

查询在执行期间使用的近似内存量。

queryTime

startTime

查询开始时间 (UTC)。

overallRunTimeMs

查询总运行时间,以毫秒为单位。

parsingTimeMs

查询解析时间,以毫秒为单位。

waitingTimeMs

查询Gremlin/SPARQL/openCypher队列等待时间,以毫秒为单位

executionTimeMs

查询执行时间,以毫秒为单位。

serializationTimeMs

查询序列化时间,以毫秒为单位。

statementCounters

scanned

扫描的语句数量。

written

写入的语句数量。

deleted

删除的语句数量。

transactionCounters

committed

已提交的事务数量。

rolledBack

回滚的事务数量。

vertexCounters

added

添加的顶点数。

removed

移除的顶点数。

propertiesAdded

添加的顶点属性的数量。

propertiesRemoved

移除的顶点属性的数量。

edgeCounters

added

添加的边缘数量。

removed

移除的边缘数量。

propertiesAdded

添加的边缘属性的数量。

propertiesRemoved

移除的边缘属性的数量。

resultCache

hitCount

结果缓存命中计数。

missCount

结果缓存未命中计数。

putCount

结果缓存放置计数。

concurrentExecution

acceptedQueryCountAtStart

当前查询执行在开始时接受的并行查询。

runningQueryCountAtStart

当前查询执行在开始时运行的并行查询。

acceptedQueryCountAtEnd

当前查询执行在结束时接受的并行查询。

runningQueryCountAtEnd

当前查询执行在结束时运行的并行查询。

queryBatch

queryProcessingBatchSize

查询处理期间的批量大小。

querySerialisationBatchSize

查询序列化期间的批量大小。

debug 模式下记录的查询属性

neptune_enable_slow_query_log 数据库集群参数设置为 debug 后,除了在 info 模式下记录的属性外,还会记录以下存储计数器属性:

属性 描述

statementsScannedInAllIndexes

在所有索引中扫描的语句。

statementsScannedSPOGIndex

已在SPOG索引中扫描语句。

statementsScannedPOGSIndex

已在POGS索引中扫描语句。

statementsScannedGPSOIndex

已在GPSO索引中扫描语句。

statementsScannedOSGPIndex

已在OSGP索引中扫描语句。

statementsScannedInChunk

成块一起扫描的语句。

postFilteredStatementScans

扫描后筛选后留下的语句。

distinctStatementScans

扫描的不同语句。

statementsReadInAllIndexes

在所有索引中进行扫描后筛选后读取的语句。

statementsReadSPOGIndex

在SPOG索引中进行扫描后筛选后读取的语句。

statementsReadPOGSIndex

在POGS索引中进行扫描后筛选后读取的语句。

statementsReadGPSOIndex

在GPSO索引中进行扫描后筛选后读取的语句。

statementsReadOSGPIndex

在OSGP索引中进行扫描后筛选后读取的语句。

accessPathSearches

访问路径搜索次数。

fullyBoundedAccessPathSearches

完全限定的密钥访问路径搜索次数。

accessPathSearchedByPrefix

按前缀搜索的访问路径数。

searchesWhereRecordsWereFound

输出 1 条或更多记录的搜索次数。

searchesWhereRecordsWereNotFound

输出中没有记录的搜索次数。

totalRecordsFoundInSearches

从所有搜索中找到的记录总数。

statementsInsertedInAllIndexes

所有索引中插入的语句数。

statementsUpdatedInAllIndexes

所有索引中更新的语句数。

statementsDeletedInAllIndexes

所有索引中删除的语句数。

predicateCount

谓词的数量。

dictionaryReadsFromValueToIdTable

从值到 ID 表的字典读取次数。

dictionaryReadsFromIdToValueTable

从值的 ID 表中读取字典的次数。

dictionaryWritesToValueToIdTable

向值到 ID 表进行字典写入的次数。

dictionaryWritesToIdToValueTable

向 ID 到值表进行字典写入的次数。

rangeCountsInAllIndexes

所有索引中的范围计数数量。

deadlockCount

查询中的死锁数。

singleCardinalityInserts

执行的单基数插入次数。

singleCardinalityInsertDeletions

在单基数插入期间删除的语句数。

慢速查询的调试日志记录示例

以下 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 } }