本页介绍了如何使用锁数据分析和事务数据分析来识别导致高延迟的事务。
概览
为了确保多个并发事务的一致性,Spanner 使用锁来控制对数据的访问。当许多事务需要频繁访问同一个锁时,就会发生锁争用,从而导致延迟时间增加。如果没有直观界面,识别导致大量锁争用问题的有问题事务可能非常繁琐。
当 Spanner 操作是读写事务的一部分时,该操作会获取锁。只读事务不获取锁。
Spanner 通过引导您完成以下步骤,帮助您识别导致高延迟的事务:
价格
使用锁定数据分析或交易数据分析不会产生额外费用。
区域配置
锁数据分析和事务数据分析可用于单区域配置和多区域配置。
数据保留
锁定数据分析和交易数据分析信息中心显示的数据最长保留 30 天。对于图表,系统会从 SPANNER_SYS.*
表中检索数据,这些表的最长保留期限为 30 天。
如需详细了解这些表和数据保留,请参阅锁定统计信息和事务统计信息。
所需的角色
您需要不同的 IAM 角色和权限,具体取决于您是 IAM 用户还是精细的访问权限控制用户。
Identity and Access Management (IAM) 用户
如需获取查看“锁定和事务数据分析”页面所需的权限,请让管理员授予您实例的以下 IAM 角色:
-
Cloud Spanner 查看者 (
roles/spanner.viewer
) -
Cloud Spanner 数据库读取者 (
roles/spanner.databaseReader
)
如需查看锁定和事务数据分析页面,需要具备 Cloud Spanner Database Reader (
roles/spanner.databaseReader
) 角色的以下权限:
spanner.databases.beginReadOnlyTransaction
spanner.databases.select
spanner.sessions.create
精细访问权限控制用户
如果您是精细的访问权限控制用户,请确保:
- 拥有 Cloud Spanner 查看者(
roles/spanner.viewer
) - 仅具有精细的访问权限控制权限,并且被授予
spanner_sys_reader
系统角色或其某个成员角色。 - 在数据库概览页面上,选择
spanner_sys_reader
或成员角色作为当前系统角色。
如需了解详情,请参阅精细访问权限控制简介和精细访问权限控制系统角色。
使用 Spanner Monitoring 检查延迟时间是否急剧增加
您可以使用 Cloud Monitoring 为所有请求为超出指定阈值的指标设置提醒。
如果您收到表明某个实例延迟时间出现峰值的提醒,则可以在 Spanner Monitoring 信息中心上确认,该信息中心会显示各种重要指标的图表。延迟时间图表可帮助您查看第 50 和第 99 百分位的高延迟时间。
如需确认第 99 百分位的写入延迟时间是否急剧增加,请按以下步骤操作:
在 Google Cloud 控制台中,前往 Spanner 实例页面。
点击实例的名称。
Google Cloud 控制台会显示实例概览。
点击导航菜单上的 Monitoring。
Google Cloud 控制台会显示该实例的数据图表。
在延迟时间图表上,将函数设置为
Write
,将百分位设置为99th
。请检查刷新后的图表,看看其中是否显示了任何峰值。
如果您发现 CPU 利用率没有激增,并且每秒操作数中的错误数激增,则延迟时间峰值可能是由锁争用导致的。
使用锁数据分析检查锁争用问题
锁定数据分析信息中心可帮助您查看实例或所选数据库中的锁定等待时间。它可以帮助您确认延迟时间较长是否是由锁争用导致的。
检查锁定等待时间较长
若要检查锁定等待时间是否较长,请按以下步骤操作:
点击导航菜单中的锁定数据分析。
Google Cloud 控制台会显示总锁定等待时间图表,其中会显示实例中每个数据库的锁定等待时间。
默认情况下,显示的数据适用于
1 hour
,因为锁定数据分析信息中心右上角显示了时间选择器。如需查看更大范围的数据,请选择其他选项,例如1 day
。如需了解详情,请参阅使用图表。
从顶部的数据库选择器中,选择显示最长锁定等待时间的数据库。
总锁定等待时间图表会刷新,仅显示所选数据库的数据。
此外,另一个图表“每行范围锁定等待时间”图表按行范围显示锁定等待时间图表。
点击图表并水平拖动,以展开显示延迟时间峰值的小时。
分析锁定等待时间数据
锁定数据分析表显示 SPANNER_SYS.LOCK_STATS
系统表中的以下列:
- 行范围起始键:发生锁定冲突的行键。如果冲突涉及一系列行,则该值表示范围的起始键。加号 (
+
) 表示范围。 - 锁定等待时间:在水平条上直观地表示的总锁定等待时间。默认情况下,表使用此列进行排序,并在顶部显示锁定等待时间最长的行范围起始键。
- 锁定等待(秒):针对行键范围内所有列记录的锁定冲突的累计锁定等待时间(以秒为单位)。
- 锁定等待 (%):为行键范围中的所有列记录的锁定冲突的等待时间,以占数据库中所有行键范围的总锁定等待时间的百分比表示。
如需将锁定每行范围的等待时间图表中的数据与表中的数据相关联,请选择一条线。相关行将突出显示。相反,选中表格中某一行对应的复选框,即可在图表中查看相关的线条。
如需过滤表中的数据,请执行以下操作:
点击过滤条件旁边的文本框。
选择属性,选择运算符,然后指定值。
表格会显示与过滤条件匹配的数据。
查看锁定请求示例
示例锁定请求面板会显示来自竞争事务的示例锁定请求的详细信息。
如需查看行范围起始键的示例锁定请求信息,请点击表中的相关链接。
该表格显示以下各列信息:
- 示例列名称:在行键范围上遇到锁定冲突的列。
- 锁定模式:请求的锁定模式。
- 查看事务:指向事务数据分析页面的链接,其中显示了可能在争用锁的事务。
使用事务数据分析识别竞争性交易
“事务数据分析”信息中心可帮助您查看实例或所选数据库上事务的延迟时间。它可以帮助您识别由于锁争用而导致高延迟的事务。
查看事务的延迟时间
如需查看事务的延迟时间,请按以下步骤操作:
点击左侧导航栏中的交易数据分析。
从顶部的数据库选择器中,选择显示最长锁定等待时间的数据库。
或者,在锁定数据分析信息中心内,点击查看事务以过滤读取或写入特定示例列的事务。
默认情况下,显示的数据针对的是
1 hour
,如 Transaction Insights 信息中心右上角的时间选择器所示。
信息中心会显示以下图表:
平均延迟时间(所有事务)图表显示实例中所有事务的延迟时间。
平均延迟时间(按事务)图表显示所选数据库的每个事务的延迟时间。
分析交易数据
您可以在图表下方的表格中查看和分析每笔交易的数据。该表的以下列中显示了 SPANNER_SYS.TXN_STATS
系统表中的指标数据:
- Fingerprint:交易标记的哈希值(如果存在)。否则,系统会根据事务中所涉及的操作计算哈希值。该值是一个指向“交易详情”页面的链接。
- 交易代码:交易的可选交易代码。具有相同代码字符串的多项交易的统计数据会归为一行,其中
TRANSACTION_TAG
标签与代码字符串相匹配。 - 受影响的表:受事务影响的表。
- Table.column Read:事务从中读取数据的列。
- Table.column Through:事务写入的列。
- 平均延迟时间(秒):执行事务所需的平均秒数。默认情况下,表格按此列降序排序。
如需将平均延迟时间(按事务)图表上的数据与表中的数据相关联,请在图表上选择一条线。表格中的相应行会突出显示。
如需过滤表中的数据,请执行以下操作:
点击过滤器旁边的按钮。
选择属性,选择运算符,然后指定值。
表格会显示与过滤条件匹配的数据。
查看交易的详细信息
如需查看有关事务的详细信息(例如显示最长延迟时间的事务),请点击表中相应行上的指纹链接。
系统会显示交易详情页面。除了顶部的详细信息表之外,它还会显示以下信息:
一个柱形,显示了以下各个指标的数值:
- 平均字节数:事务写入的平均字节数。
- 平均延迟时间:从事务的第一次操作到提交或中止所需的平均秒数。
- 平均提交延迟时间:执行提交操作所需的平均秒数。
- 总尝试次数:交易尝试的总次数。
- 中止总次数:已中止的事务尝试总数,包括在调用事务的提交方法之前已中止的事务尝试次数。
描绘这些值的图表。
调查是否可以优化事务形状以减少延迟时间。建议采用建议的做法来减少锁争用。