本页介绍了如何使用锁数据分析和事务数据分析来识别导致高延迟的事务。
概览
为确保多个并发事务的一致性,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 Viewer(
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
的数据,因为交易数据分析信息中心右上角的时间选择器就是如此。
信息中心会显示以下图表:
平均延迟时间(所有事务)图表显示实例中所有事务的延迟时间。
平均延迟时间(每个事务)图表显示所选数据库的每个事务的延迟时间。
分析交易数据
您可以在图表下方的表格中查看和分析每笔交易的数据。该表在以下列中显示 SPANNER_SYS.TXN_STATS
系统表中的指标数据:
- Fingerprint:交易代码的哈希值(如果存在)。否则,系统会根据事务中涉及的操作计算哈希值。该值是一个指向“交易详情”页面的链接。
- 交易代码:交易的可选交易代码。具有相同标记字符串的多个交易的统计数据被划分到一行中,并且
TRANSACTION_TAG
标签与标记字符串相匹配。 - 受影响的表:受事务影响的表。
- Table.column Read:事务从中读取数据的列。
- Table.column 写入:事务写入的列。
- 平均延迟时间(秒):执行事务所需的平均秒数。默认情况下,该表按此列按降序排序。
如需将“平均延迟时间(按交易)”图表上的数据与表格中的数据相关联,请在图表上选择一条线。表格中的相应行会突出显示。
如需过滤表中的数据,请执行以下操作:
点击过滤条件旁边的按钮。
选择属性,选择运算符,然后指定值。
表格会显示与过滤条件匹配的数据。
查看有关交易的详细信息
如需查看有关事务的详细信息(例如显示最长延迟时间的事务),请点击表中相应行上的 Fingerprint 链接。
系统会显示交易详情页面。除了顶部的详细信息表之外,它还显示了以下信息:
以条形图的形式显示以下各个指标的数值:
- 平均字节数:事务写入的平均字节数。
- 平均延迟时间:从事务的第一个操作到提交或中止操作所花费的平均秒数。
- 平均提交延迟时间:执行提交操作所需的平均秒数。
- 总尝试次数:尝试交易的总次数。
- 中止总次数:被中止的事务尝试的总次数,包括在调用事务的提交方法之前中止的事务尝试。
描绘这些值的图表。
调查是否可以优化事务形状以缩短延迟时间。考虑采用建议的做法来减少锁争用。