前言

在 Azure SQL Database 系列文章最後一篇,我們將簡單介紹 Azure SQL Database 監控相關功能,包含:進階威脅防護警示指標(matrics)動態管理檢視。讓您將資料庫轉移至 Azure SQL Database 後,能透過這些功能進行監控,快速發現警覺系統異常,並能進行前置作業與預防工作。本篇文章若有錯誤或任何建議,請各位先進不吝提出。

在 Azure SQL Database 概觀畫面,也能透過儀錶板方式檢視資料庫狀況


介紹

進階威脅防護

進階威脅防護是一套安全功能整合套件,主要用於偵測對資料庫有威歇的異常活動,找出敏感資料與評估資料庫弱點,進而寄送報表提供管理者參考。
ATP 的定價每一節點每月 15 美元;每一個受保護的 SQL Database 伺服器計為一個節點。 啟用後的 60 天內視為免費試用期。 

Step 1.您能在 SQL Database 選單上 → 進階威脅防護 → 啟用進階威脅防護,開始使用這個功能:

Step 2. 輸入相關設定,如訂閱帳戶、儲存體帳戶與信箱

Step 3.掃描後即可看見弱點報告


傳統警示

您可以依據監控內容或事件建立警示規則,當伺服器監控值超過指定門檻,警示規則會啟動並寄送通知。對於事件的警示規則,可以對於每個事件個別發送通知,或發生一定數量事件的時候發送通知。建立警示規則十,你可以選擇發送電子郵件通知給 管理者 (Administrator)、共同管理者,或指定管理者。舉例來說:當資料庫在 5分鐘內有 5個防火牆阻擋觸發時,監控規則將會祭出信件進行通知。
通常當警示發生或問題解決時發送警示通知郵件

Step 1. 您可以在 Azure SQL Database 操作面板上,點選 警示(傳統) → 新增計量警示


Step 2. 輸入相關資訊以建立警示規則,如名稱、計量、條件與門檻值、信箱...等,點選確定完成建立警示規則。


指標 (matrics)

您可以在您可以在 Azure SQL Database 操作面板上,點選 matrics(Preview) → 輸入條件後進行檢視

如上圖所示,有許多專門對於 SQL Database 檢視指標,您可能需要花一點時間了解資料庫警示值與門檻值。詳細資料可以參考:使用 Azure 入口網站建立 Azure SQL Database 和資料倉儲警示


動態管理檢視 (dynamic management views)

Azure SQL Database 可使用動態管理檢視來檢查效能問題,包含可能因為封鎖或長時間執行的查詢、是否達到資源瓶頸、不良的查詢計畫…等。
SQL Database 支援動態管理檢視的三個類別:
  1. 資料庫相關的動態管理檢視
  2. 執行相關的動態管理檢視
  3. 交易相關的動態管理檢視

在執行查詢之前,您必須要有 VIEW DATABASE STATE 權限,你可以透過下列指令獲取權限:
GRANT VIEW DATABASE STATE TO database_user;


下列我們簡單使用相關語法
回傳資料庫大小:
SELECT SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS bigint) * 8192.) / 1024 / 1024 AS DatabaseSizeInMB
FROM sys.database_files
WHERE type_desc = 'ROWS';
GO


監視連線:
SELECT
    c.session_id, c.net_transport, c.encrypt_option,
    c.auth_scheme, s.host_name, s.program_name,
    s.client_interface_name, s.login_name, s.nt_domain,
    s.nt_user_name, s.original_login_name, c.connect_time,
    s.login_time
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;


尋找平均 CPU 時間前五個查詢資訊:
SELECT TOP 5 query_stats.query_hash AS "Query Hash",
    SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",
    MIN(query_stats.statement_text) AS "Statement Text"
FROM
    (SELECT QS.*,
    SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
        WHEN -1 THEN DATALENGTH(ST.text)
        ELSE QS.statement_end_offset END
            - QS.statement_start_offset)/2) + 1) AS statement_text
     FROM sys.dm_exec_query_stats AS QS
     CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;

更多動態監視器檢視可以參考:使用動態管理檢視監視 Azure SQL Database - Microsoft Docs


參考資料