使用 Extended Events 分析数据库性能

本页面介绍了如何在您的实例上使用 Extended Events (XEvents)

Cloud SQL 支持使用 XEvents 来监控、识别和排查数据库性能问题。为此,您需要创建 XEvent 会话并读取 XEvent 输出文件。您可以读取实例上的 XEvent 输出文件,也可以从 Cloud Storage 存储桶下载 XEvent 文件。

准备工作

如果要将 XEvent 文件上传到 Cloud Storage 存储桶,请在 Google Cloud 账号中创建存储桶

最佳做法

  • 为避免跨区域转移大型文件,建议您执行以下任一操作:
    • 创建多区域级 Cloud Storage 存储桶
    • 在实例所在的区域中设置目标 Cloud Storage 存储桶
  • 在使用 XEvents 之前,请启用存储空间自动扩容功能。XEvent 输出文件可能需要大量磁盘空间,具体取决于其总大小和保留间隔时间。
  • 为避免长时间保留过多的 XEvent 文件,请为 Cloud Storage 存储桶设置数据保留政策。
  • 如果您使用 SSMS 界面创建 XEvent 会话,但输入值对应的某些框未显示,请调整 Create XEvent Session 窗口的大小。

如何创建 XEvent 会话

实例上会自动启用 XEvents。

使用 CREATE EVENT SESSION 命令定义新的 XEvent 会话。您还可以使用 SQL Server Management Studio (SSMS) 的界面来创建 XEvent 会话。

Cloud SQL 会对所有 XEvent 会话强制设置以下参数:

参数 说明 允许使用的值
FILENAME 指定用于存储 XEvents 会话数据的文件名和路径。 任何以 /var/opt/mssql/xevents/ 开头的路径
MAX_FILE_SIZE 指定每个输出文件的大小上限,然后再创建新文件。 最小 10 MB
最大 1 GB
MAX_MEMORY 指定要分配给会话用于事件缓冲的内存量上限。 最小 4 MB
最大 8 MB
MAX_DISPATCH_LATENCY 指定事件在发送到目标之前可以保留在事件调度队列中的最长时间(以秒为单位)。 最短 1 秒
最长 30 秒
MAX_EVENT_SIZE 设置每个事件的大小上限(以字节为单位)。 最小 4 MB
最大 8 MB

XEvent 会话配置参数

您可以通过将以下参数用作自定义标志来配置 XEvent 会话:

参数 说明
cloud sql xe bucket name 指定要将 XEvent 会话输出上传到的 Cloud Storage 存储桶。如果未指定,则 Cloud SQL 不会将 XEvent 会话输出数据上传到 Cloud Storage。
cloud sql xe output total disk size (mb) 指定要为所有 XEvent 会话的输出预留的磁盘可用空间量。如果未指定,则 Cloud SQL 会使用 512 MB 的默认磁盘可用空间。如果 XEvent 输出文件使用的磁盘可用空间超过 cloud sql xe output total disk size (mb) 的值,则 Cloud SQL 会从磁盘中移除这些文件。
cloud sql xe file retention (mins) 对于由 XEvent 会话的文件目标生成的文件,指定实例上的保留时间(以分钟为单位)。如果未指定,则 Cloud SQL 会使用默认值 7 天。
cloud sql xe upload interval (mins) 指定将 XEvent 文件上传到 Cloud Storage 的上传间隔时间。如果未指定,则 Cloud SQL 会使用默认值 10 分钟。

如需详细了解如何设置这些标志,请参阅配置数据库标志

如何读取 XEvent 会话输出文件

您可以从 Cloud SQL 实例或 Cloud Storage 存储桶读取 XEvent 会话输出文件。

从实例读取 XEvent 输出文件

如需从 XEvent 会话创建的 XEvent 文件中检索数据,请使用 sys.fn_xe_file_target_read_file 函数。

示例如下:

SELECT * FROM sys.fn_xe_file_target_read_file('/var/opt/mssql/xevents/filename*, NULL, NULL, NULL);

从存储桶读取 XEvent 输出文件

如需从 Cloud Storage 存储桶读取 XEvent 输出文件,请将这些文件从存储桶下载到 SQL Server 实例。您可以从下列实例之一进行下载:

  • Compute Engine Windows 实例
  • Compute Engine Linux 实例
  • 运行 SQL Server 的其他类型的实例

然后,将 XEvent 输出文件从存储桶转移到该实例可访问的位置,例如其本地磁盘。接下来,如需从 XEvent 输出文件中返回信息,请使用具有服务器的 VIEW SERVER STATE 权限的账号运行 sys.fn_xe_file_target_read_file 函数。如需详细了解权限,请参阅权限

监控 XEvent 会话

您可以通过 xevents.log 文件监控与 XEvent 会话相关的活动以执行以下操作:

  • 从磁盘中移除未上传到 Cloud Storage 且占用的磁盘可用空间高于与 cloud sql xe output total disk size (mb) 关联的值的 XEvent 输出文件。
  • 从磁盘中移除未上传到 Cloud Storage 且低于与 cloud sql xe file retention 关联的值的 XEvent 输出文件。

读取副本的注意事项

本部分包含有关新的读取副本和现有读取副本的 XEvent 会话的信息。

对于新的读取副本

  • 通过原始实例上的数据库标志传递的所有 XEvent 会话配置参数均在新创建的读取副本上可用。
  • 创建读取副本时,原始实例上存在的所有 XEvent 会话均在读取副本上可用。请注意,读取副本上的 XEvent 会话需要手动启动,除非这些会话配置为自动启动。如需了解详情,请参阅如何创建 XEvent 会话
  • 如果您克隆主实例,则主实例上显示的任何数据库标志都会传播到克隆的实例。此外,您还必须向克隆的实例的服务账号授予再次访问 Cloud Storage 存储桶的权限。

对于现有读取副本

  • 通过数据库标志传递给原始实例的 XEvent 会话配置参数不会传播到读取副本。
  • 在原始实例上创建的 XEvent 会话不会传播到读取副本。