为了帮助您更好地了解、优化和诊断事务问题,Spanner 为您提供了对事务提交统计信息的访问权限。目前,您可以检索一项事务的变更总数。
何时使用提交统计信息
在以下情况下,了解事务的变更计数可能很有用。
针对往返进行优化
为帮助提高应用的性能,您可以在每个事务中执行尽可能多的工作,以减少到数据库的往返次数。在这种情况下,您希望最大限度地提高每个事务的变更量,同时保持在系统限制内。
要确定每个事务可以提交多少行,同时保持在限制之内,首先在一个事务中提交一行。这为您提供了每行变更计数的基准。然后,用系统限制除以您的基准即可得出每个事务的行数。如需详细了解如何计算变更数,请参阅此备注。
请注意,为往返进行优化并非总是有益,尤其是这会导致更多锁争用。您可以利用锁统计信息排查数据库中的锁冲突。
监控您的交易,避免达到系统限制
随着应用使用量的增加,事务中的变更数量也可能会增加。为了避免达到系统限制并使您的事务最终失败,您可以主动监控一段时间内的变更计数提交统计信息。如果您发现此值对于同一事务增加,可能是如上一节中所述需要重新优化事务。
如何访问提交统计信息
默认情况下,系统不会返回提交统计信息。相反,您需要在每个 CommitRequest 上将 return_commit_stats
标志设置为 true。如果提交尝试超过某个事务允许的最大变更数,则提交失败并返回 INVALID_ARGUMENT 错误。
以下示例展示了如何使用 Spanner 客户端库返回提交统计信息。
检索提交统计信息
以下示例展示了如何使用 Spanner 客户端库获取提交统计信息。
C++
以下代码对 CommitOptions
调用 set_return_stats()
并返回变更计数 6,因为我们在每行中插入或更新 2 行 3 列。
C#
在 C# 中,不直接通过 API 返回提交统计信息。相反,它们由默认日志记录器在信息日志级别记录。
以下代码通过将 SpannerConnectionStringBuilder
上的 LogCommitStats
属性设置为 true,为所有交易启用提交统计信息日志记录。该代码还会实施一个示例日志记录器,用于保留对上次看到的提交响应的引用。然后,系统将从此响应中检索 MutationCount
,并予以显示。
Go
以下代码设置 ReturnCommitStats
标志并在成功提交事务时输出变更计数。
Java
Node.js
以下代码将设置 returnCommitStats
标志并返回变更计数 6,因为我们会在每行插入或更新 2 行 3 列。
PHP
Python
Python 不会直接通过 API 返回提交统计信息,
客户端库会在级别 Info
使用 stdout
记录这些日志。
以下代码通过设置 database.log_commit_stats = True
来为所有事务启用提交统计信息日志记录。该代码还会实施一个示例日志记录器,用于保留对上次看到的提交响应的引用。然后,系统将从此响应中检索 mutation_count
,并予以显示。
Ruby
以下代码将设置 return_commit_stats
标志并返回变更计数 6,因为我们会在每行插入或更新 2 行 3 列。