我有一個執行 Microsoft SQL Server 的 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體。我想在 RDS 資料庫執行個體發生鎖死事件時立即收到通知。
簡短說明
SQL Server 鎖死監視器偵測到鎖死事件時,監視器會將其中一個交易選為受害者。監視器會回復受害者交易,並在錯誤日誌中發出錯誤碼 1205。
若要解決此問題,請先啟用鎖死追蹤旗標 1222 和 1204,以在 SQL Server 錯誤日誌中擷取鎖死事件。接著,將 SQL Server 錯誤日誌發佈至 Amazon CloudWatch Logs。最後,建立 CloudWatch 警示和 Amazon Simple Notification Service (Amazon SNS) 通知,以便在發生鎖死事件時傳送警示。
解決方法
透過 RDS 參數群組啟用追蹤旗標
完成以下步驟:
**注意:**如果您已有自訂參數群組,請前往步驟 5。
- 開啟 Aurora and RDS console (Aurora 和 RDS 主控台),然後在導覽窗格中選擇 Parameter groups (參數群組)。
- 選擇 Create parameter group (建立參數群組)。
- 在 Parameter group family (參數群組系列),選擇您要使用的 SQL Server 版本和版本類型。例如,SQL Server 2016 Enterprise Edition 使用 sqlserver-ee-13.0。
- 輸入群組名稱和描述,然後選擇 Create (建立)。
- 在 Parameter groups (參數群組) 頁面上,選取群組。
- 選擇 Edit parameters (編輯參數),然後選取 1204 和 1222。
- 將 1204 和 1222 的值變更為 1。
- 選擇 Preview changes (預覽變更),然後選擇 Save changes (儲存變更)。
- 在導覽窗格中,選擇 Databases (資料庫)。
- 在 DB identifier (資料庫識別碼) 區段中,選取您的資料庫執行個體。
- 選擇 Modify (修改)。
- 在 Database options (資料庫選項) 區段中,於 DB parameter group (資料庫參數群組),選擇該參數群組。
- 重新啟動資料庫執行個體,讓變更生效。
將 SQL Server 錯誤日誌推送至 CloudWatch Logs
完成以下步驟:
- 開啟 Aurora and RDS console (Aurora 和 RDS 主控台),然後在導覽頁面中選擇 Databases (資料庫)。
- 選取資料庫執行個體,然後選擇 Modify (修改)。
- 在 Log exports (日誌匯出) 中,選取 Error log (錯誤日誌),然後選擇 Continue (繼續)。
- 在 Scheduling of modifications (修改排程) 區段中,選擇 Apply immediately (立即套用),然後選擇 Modify DB Instance (修改資料庫執行個體)。
注意:您的資料庫執行個體目前處於正在修改狀態。請等到狀態返回可用。
- 在 Databases (資料庫) 頁面上,選擇您的資料庫執行個體,然後選擇 Actions (動作)。
- 如果您已建立新的參數群組,請重新啟動資料庫執行個體,讓變更生效。
資料庫執行個體上線後,請在資料庫執行個體上執行 DBCC TRACESTATUS (1222, 1204),確認鎖死追蹤狀態。如果 Global trace 命令在輸出視窗中傳回 1,表示已啟用鎖死追蹤。
模擬鎖死交易
若要確認 SQL Server 監視器是否已將鎖死受害者查詢寫入錯誤日誌,請在資料庫執行個體上模擬鎖死交易。您可以在資料庫執行個體上執行以下查詢,以檢查 SQL Server 錯誤日誌中的鎖死事件:
sp_readerrorlog 0, 1, 'deadlock'
建立篩選模式和 CloudWatch 警示
完成以下步驟:
- 開啟 CloudWatch console (CloudWatch 主控台)。
- 在 Logs (日誌) 區段中,選擇 Log groups (日誌群組)。
- 選取資料庫執行個體的 SQL Server 錯誤日誌。日誌會以下列格式列出:(/aws/rds/instance/<Your-RDS-Instance-Name>/error)。
- 選擇 Create metric filter (建立指標篩選條件)。
- 在 Define Logs Metric Filter (定義日誌指標篩選條件) 頁面上,於 Filter Pattern (篩選條件模式) 區段中輸入 deadlock。
- 選擇 Assign metric (指派指標)。
- 在 Filter Name (篩選條件名稱) 和 Metric Name (指標名稱) 欄位中,輸入 deadlock。
- 選擇 Create Filter (建立篩選條件),然後選擇 Create alarm (建立警示)。
- 在 Specify metric and conditions (指定指標和條件) 頁面上,於 Metric name (指標名稱) 下輸入 deadlock。
- 在 Statistic (統計資料) 下,輸入 minimum。
- 在 Period (期間) 下,從下拉式清單中選擇警示的期間,例如 1 minute。
- 在 Conditions (條件) 區段中,選擇以下設定:
Threshold type: Static
Whenever Deadlock is: Greater > threshold
Than: 0
- 選擇 Next (下一步)。
- 在 Notification (通知) 區段中,於 Alarm state trigger (警示狀態觸發程序) 下選擇 In alarm (警示中)。
- 訂閱 Amazon SNS 主題,或建立新主題。使用您要接收警示的電子郵件地址。
- 選擇 Next (下一步)。
- 在 Name and description (名稱和描述) 區段中,輸入警示名稱和警示描述,然後選擇 Next (下一步)。
- 在 Preview and create (預覽和建立) 頁面上,檢閱警示組態,然後選擇 Create alarm (建立警示)。
使用前述程序,為其他 SQL Server 嚴重錯誤和登入失敗錯誤建立 CloudWatch 警示。
相關資訊
MySQL 資料庫日誌檔案