如何在 Amazon RDS SQL Server 数据库实例上发生死锁事件时接收通知?

上次更新时间:2020 年 6 月 2 日

我有一个运行 SQL Server 的 Amazon Relational Database Service (Amazon RDS) 数据库实例。我希望在 RDS 数据库实例发生死锁事件时立即收到通知。我该如何操作?

简短描述

SQL Server 使用锁定监控线程监控死锁事件。如果检测到死锁事件,SQL Server 将使用基于资源/成本的机制将其中一项事务声明为死锁牺牲品。牺牲品事务将回滚,且错误日志中会发布错误代码 1205。

要解决此问题,请启用死锁跟踪标记(1222、1204)将死锁事件捕获到 SQL 错误日志中。接下来,将 SQL Server 错误日志发布到 Amazon CloudWatch 中,并创建 CloudWatch 警报和 Amazon Simple Notification Service (Amazon SNS) 通知以在发生死锁事件的任何时候发送提醒。

解决方法

通过 RDS 参数组启用跟踪标记

注意:如果您已经有自定义参数组,则跳到步骤 5。

  1. 打开 Amazon RDS 控制台,然后从导航窗格中选择参数组
  2. 选择创建参数组
  3. 对于参数组系列,请选择 SQL Server 版本和您正在编辑的版本。例如,SQL Server 2016 企业版本使用 sqlserver-ee-13.0
  4. 输入组名称描述,然后选择创建
  5. 参数组页面上,选择您在上一步中创建的组。
  6. 选择编辑参数,然后选中 12041222 旁的复选框。
  7. 将 1204 和 1222 的都编辑为 1
  8. 选择预览更改。在下一页上,选择保存更改
  9. 从导航窗格中选择数据库
  10. 数据库标识符部分中,选择您的 RDS 数据库实例。
  11. 选择修改
  12. 数据库选项部分中,为数据库参数组选择您创建的参数组。

    注意:创建新参数组并将其附加到 RDS 数据库实例上需要您重启 RDS 数据库实例,从而使更改生效。

将 SQL Server 错误日志推送到 Amazon CloudWatch

  1. 错误日志部分中,选择错误日志的复选框。这可以确保将 SQL Server 错误日志发布到 CloudWatch Logs 中
  2. 选择继续
  3. 修改计划部分中,选择立即应用,然后选择修改数据库实例

    注意:您的 RDS 数据库实例现在处于修改状态。等到它恢复可用状态。如果您使用现有参数组,请跳过步骤 4,因为您不需要重启您的 RDS 数据库实例。如果您创建了一个新的参数组,则继续执行步骤 4。

  4. 数据库页面中,选择您的 RDS 数据实例,然后选择操作重启 RDS 数据库实例,以使更改生效。

在 RDS 数据库实例联网后,您可以通过在 RDS 数据库实例上运行 DBCC TRACESTATUS12221204)来验证死锁跟踪状态。如果全局跟踪命令在输出窗口中返回 1,则死锁跟踪启用。

模拟死锁事务

在您的 RDS 数据库实例上模拟死锁事务,以验证死锁牺牲品查询是否记录在 SQL Server 错误日志中。您可以通过在您的 RDS 数据库实例上运行以下查询来检查 SQL Server 错误日志中的死锁事件:

sp_readerrorlog 0, 1, 'deadlock'

创建筛选条件模式和 Amazon CloudWatch 警报

  1. 打开 CloudWatch 控制台
  2. 日志部分中,选择日志组
  3. 选择您的 RDS 数据库实例的 SQL Server 错误日志。日志以下面的格式列出:

    (/aws/rds/instance/<Your-RDS-Instance-Name>/error)

  4. 选择创建指标筛选条件
  5. 筛选条件模式部分的定义日志指标筛选条件页面中,输入死锁
  6. 选择分配指标
  7. 筛选条件名称指标名称字段中输入死锁
  8. 选择创建筛选条件。在创建死锁筛选条件后,请选择创建警报
  9. 指定指标和条件页面中的指标名称下,输入死锁
  10. 统计下,输入最小
  11. 周期下,从下拉菜单中选择警报的时间周期,例如 1 分钟
  12. 条件部分中,选择以下设置:

    阈值类型:静态

    每当死锁为:大 > 阈值

    比:输入 0

  13. 选择下一步
  14. 通知部分的警报状态触发器下,选择警报中
  15. 选择一个 Amazon SNS 主题,或选择使用您要用来接收警报的电子邮件地址创建新主题,然后选择下一步
  16. 名称和描述部分中,输入警报名称警报描述,然后选择下一步
  17. 预览和创建页面上,检查您的警报配置,然后选择创建警报

使用相同的过程为其他的 SQL Server 致命错误和登录失败错误创建 CloudWatch 警报。借助此功能,您可以在数据库系统发生重大问题前识别并接收很多 SQL Server 错误的通知。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?