適用於:Azure SQL 資料庫
Azure SQL 受控執行個體
資料庫監看員會從 SQL 系統檢視表收集監視資料,並以資料集的形式將其內嵌至資料存放區。 每個資料集皆為使用來自一或多個 SQL 系統檢視表的資料所形成。 針對每個資料集,資料存放區中都有個別資料表。
資料集合
資料庫監看員使用 T-SQL 查詢定期收集監視資料。 每次執行查詢時收集的資料稱為樣本。 樣本收集頻率因資料集而異。 例如,SQL 效能計數器等經常變更的資料,可能每 10 秒收集一次,大部分靜態資料,例如資料庫設定,則可能每五分鐘收集一次。 如需詳細資訊,請參閱資料集。
資料庫監看員會利用 Azure 資料總管中的串流擷取和 Microsoft Fabric 中的即時分析,來提供近即時的監視。 一般來說,收集的 SQL 監視資料在不到 10 秒內即可供報告和分析使用。 您可以使用擷取統計資料連結,在資料庫監看員儀表板上監視資料擷取延遲。
資料庫監看員與應用程式工作負載之間的互動
啟用資料庫監看員不太可能對應用程式工作負載效能造成可觀察的影響。 較頻繁的監視查詢通常會在次秒級範圍內執行,而可能需要更多時間的查詢,例如傳回大型資料集,則會以不頻繁的間隔執行。
為了進一步降低對應用程式工作負載的影響風險,Azure SQL 資料庫中的所有資料庫監看員查詢都會作為內部工作負載進行資源控管。 當發生資源爭用時,監視查詢的資源使用量僅限於資料庫可用資源總數的一小部分。 這樣一來,應用程式工作負載即會優先於監視查詢。
若要避免並行衝突,例如資料收集與在 Azure SQL 資源上執行的資料庫工作負載之間的封鎖和死鎖,監視查詢會使用短鎖定逾時和低死鎖優先順序。 如果發生並行衝突,則應用程式工作負載查詢為優先。
您可能會在下列案例中觀察到所收集數據的差距:
- 如果整體資源使用率很高,或者監控查詢與應用程式工作負載之間發生並行衝突,那麼應採取適當的措施。 在這些情況下,監視查詢會被降級以優先處理應用程式工作負載。
- 如果您的自動化流程會終止長時間運行的工作階段。 若要避免所收集數據的遺漏,請排除
program_name系統檢視中數據行 為SQLExternalMonitoring或x_ms_reserved_sql_external_monitoring的任何會話。
彈性集區中的資料收集
若要監視彈性集區,您必須將集區中的一個資料庫指定為錨點資料庫。 監視器會連接到主資料庫。 由於監看員會持有VIEW SERVER PERFORMANCE STATE 權限,錨點資料庫中的系統視圖可提供整個集區的監視資料。
小提示
您可以將空白資料庫新增至您想要監視的每個彈性集區,並將其指定為錨點資料庫。 如此一來,您就可以在集區中移入和移出其他資料庫,或是在集區之間移動其他資料庫,而不會中斷彈性集區監視。
從錨點資料庫收集的數據包含集區層級計量,以及集區中每個資料庫的特定資料庫層級效能計量,例如每個資料庫的資源使用率和要求率計量。 在某些情況下,新增彈性集區 SQL 目標來監視整個彈性集區,可能不需要監視集區中的每個個別資料庫。
某些監視資料 (例如集區層級 CPU、記憶體和儲存體使用率,以及等候統計資料) 只會在彈性集區層級進行收集,因為其無法歸類為集區中的個別資料庫。 相反地,只有當您將個別資料庫新增為 SQL 目標時,才能使用某些其他數據,例如查詢運行時間統計數據、資料庫屬性、數據表和索引元數據。
如果您從彈性集區新增個別資料庫作為 SQL 目標,則也應該將彈性集區新增為 SQL 目標。 如此一來,您即能更完整地檢視資料庫和集區效能。
監視密集彈性集區
密集彈性集區包含大量資料庫,但計算大小相對較小。 此組態可讓客戶將運算資源配置保持在最低限度,從而節省大量成本。
重要的是,此方法假設集區中只有少數資料庫同時執行查詢。
警告
由於監視查詢必須在每個受監視的資料庫中持續執行,因此不建議監視密集彈性集區中的多個個別資料庫。
如果您從密集彈性集區新增許多資料庫作為 SQL 目標,則每個資料庫中執行的監視查詢所累積的資源使用率可能會因為集區中的資源不足而影響應用程式工作負載。
基於同樣的原因,您可能會看到收集的資料有間隙,或資料樣本之間的間隔大於預期。
若要監視密集彈性集區,請將彈性集區本身新增為 SQL 目標,以啟用集區層級的監視。 藉由減少彈性集區中的監視查詢總數,您可以避免影響應用程式工作負載的風險,同時仍會在 SQL 彈性集區資料集中收集可採取動作的集區層級資料。
無伺服器資料庫中的數據收集
如果無伺服器化資料庫已停用自動暫停,資料庫監控工具會像監視預配置的資料庫一樣來監視它。
如果您在無伺服器資料庫上啟用自動暫停,資料庫監看員數據收集會在資料庫暫停時停止。 若無伺服器資料庫 符合暫停資格,則資料庫監控程序的查詢不會阻止其暫停。
在無伺服器資料庫轉換為 暫停 狀態之後不久,監看員摘要儀錶板上的狀態會變更為 [未收集]。 資料庫先前收集的數據會保留在監看員數據存放區中,而且可透過儀錶板和查詢存取。
數據收集會在資料庫從 [暫停 ] 轉換為 [在線 ] 狀態后的幾分鐘內繼續執行。
資料存放位置
客戶可以選擇將收集的 SQL Monitoring 資料儲存在三種資料存放區類型的其中一種:
在 Azure 資料總管叢集上的資料庫。 根據預設,系統會為每個新的監看員建立新的 Azure 資料總管叢集,且位於與監看員相同的 Azure 區域中。
客戶可以選擇 Azure 地理位置中的特定 Azure 區域作為其 Azure 資料總管叢集和資料庫的位置。 如需 Azure 資料總管中資料複寫功能的詳細資訊,請參閱 商務持續性和災害復原概觀。
在免費的 Azure 資料總管叢集中的資料庫。
客戶可以選擇特定的 Azure 地理位置,但不能選擇特定的 Azure 區域作為其免費 Azure 資料總管叢集和資料庫的位置。 不支援將資料複寫至不同的區域或地理位置。
在Microsoft Fabric 的即時分析中的資料庫
客戶無法選擇資料庫的地理位置。
若要完全控制所收集 SQL Monitoring 資料的資料落地,客戶必須選擇 Azure 資料總管叢集上的資料庫作為資料存放區。
客戶可以將其 Azure 數據總管叢集的地理位置和區域與所監視的 Azure SQL 資源的地理位置和區域對齊。 當 Azure SQL 資源位於多個區域時,客戶可能需要建立多個監看員和多個 Azure 資料總管叢集,以滿足其資料落地需求。
資料集
本節描述每個 SQL 目標類型可用的數據集,包括數據存放區中的收集頻率和數據表名稱。
備註
在預覽期間,可能會新增和移除資料集。 名稱、描述、收集頻率和可用資料行等資料集屬性可能會變更。
| 資料集名稱 | 資料表名稱 | 收集頻率 (hh:mm:ss) | 描述 |
|---|---|---|---|
| 活動會話 | sqldb_database_active_sessions |
00:00:30 |
每個資料列都代表一個正在執行請求、是阻礙者,或擁有開啟交易的工作階段。 |
| 備份記錄 | sqldb_database_sql_backup_history |
00:05:00 |
每個資料列都代表已成功完成的資料庫備份。 |
| 變更處理 | sqldb_database_change_processing |
00:01:00 |
每個資料列都代表變更處理功能 (例如異動資料擷取或變更摘要 (Azure Synapse Link)) 的彙總記錄掃描統計資料快照。 |
| 更正處理錯誤 | sqldb_database_change_processing_errors |
00:01:00 |
當使用變更處理功能 (例如異動資料擷取或變更摘要 (Azure Synapse Link)) 時,每個資料列都代表變更處理期間發生的錯誤。 |
| 連線性 | sqldb_database_connectivity |
00:00:30 |
每個資料列都代表資料庫的連線探查 (登入和查詢)。 |
| 異地複本 | sqldb_database_geo_replicas |
00:00:30 |
每個資料列都代表主要或次要異地複本,其中包括異地複寫中繼資料和統計資料。 |
| 索引中繼資料 | sqldb_database_index_metadata |
00:30:00 |
每個資料列都代表索引分割區,並包括索引定義、屬性和操作統計資料。 |
| 記憶體使用率 | sqldb_database_memory_utilization |
00:00:30 |
每個資料列代表一個記憶體部門,並包括該資料庫引擎執行個體上記憶體部門的記憶體使用量。 |
| 遺漏索引 | sqldb_database_missing_indexes |
00:15:00 |
每個資料列都代表索引,可能會改善查詢效能 (若建立)。 |
| 記憶體不足事件 | sqldb_database_oom_events |
00:01:00 |
每個資料列都代表資料庫引擎中的記憶體不足事件。 |
| 效能計數器 (通用) | sqldb_database_performance_counters_common |
00:00:10 |
每個資料列都代表資料庫引擎執行個體的效能計數器。 此資料集包括常用的計數器。 |
| 效能計數器 (詳細) | sqldb_database_performance_counters_detailed |
00:01:00 |
每個資料列都代表資料庫引擎執行個體的效能計數器。 此資料集包括可能需要進行詳細監視和疑難排解的計數器。 |
| 屬性 | sqldb_database_properties |
00:05:00 |
每個資料列都代表資料庫,並包括資料庫選項、資源控管限制和其他資料庫中繼資料。 |
| 查詢執行階段統計資料 | sqldb_database_query_runtime_stats |
00:15:00 |
每個資料列都代表查詢存放區執行階段間隔,並包括查詢執行統計資料。 |
| 查詢等候統計資料 | sqldb_database_query_wait_stats |
00:15:00 |
每個資料列都代表查詢存放區執行階段間隔,並包括等候類別統計資料。 |
| 複製品 | sqldb_database_replicas |
00:00:30 |
每個資料列都代表資料庫複本,其中包括複寫中繼資料和統計資料。 包括在主要資料庫上收集的主要複本和異地複本,以及在次要資料上收集的次要複本。 |
| 資源使用率 | sqldb_database_resource_utilization |
00:00:15 |
每個資料列都代表資料庫在時間間隔內的 CPU、資料 IO、記錄 IO 和其他資源使用量統計資料。 |
| 工作階段統計資料 | sqldb_database_session_stats |
00:01:00 |
每個資料列都代表資料庫的工作階段統計資料摘要,透過非加法工作階段屬性 (例如登入名稱、主機名稱、應用程式名稱等) 進行彙總。 |
| SOS 排程系統 | sqldb_database_sos_schedulers |
00:01:00 |
每個資料列都代表 SOS 排程者,並包括排程者、CPU 節點和記憶體節點的統計資料。 |
| 儲存體 IO | sqldb_database_storage_io |
00:00:10 |
每個資料列都代表資料庫檔案,並包括檔案的累積 IOPS、輸送量和延遲統計資料。 |
| 儲存體使用率 | sqldb_database_storage_utilization |
00:01:00 |
每個資料列都代表資料庫,並包括其儲存體使用量,其中包括 tempdb、查詢存放區和持續版本存放區。 |
| 資料表中繼資料 | sqldb_database_table_metadata |
00:30:00 |
每個資料列都代表資料表或索引檢視表,並包括中繼資料,例如資料列計數、空間使用量、資料壓縮、資料行和條件約束。 當資料庫中的數據表和索引檢視表數目為 100 或更少時收集。 |
| 等待統計資料 | sqldb_database_wait_stats |
00:00:10 |
每個資料列都代表等候類型,並包括資料庫引擎執行個體的累積等候統計資料。 針對彈性集區中的資料庫,僅會收集與資料庫範圍相關的等候統計資料。 |
備註
對於彈性集區中的資料庫,不會收集包含集區層級資料的 SQL Database 資料集。 這包括記憶體使用率、記憶體不足事件、效能計數器 (通用) 和效能計數器 (詳細) 資料集。 系統會收集等候統計資料資料集,但只包含資料庫範圍的等候。 這可避免從集區中的每個資料庫收集相同的資料。
集區層級資料會在 SQL 彈性集區資料集中進行收集。 針對指定的彈性集區,效能計數器 (通用) 和效能計數器 (詳細) 資料集包含集區層級計量和特定資料庫層級計量,例如 CPU、資料 IO、記錄寫入、要求、異動等。
通用資料行
針對每個 SQL 目標類型,數據集都有一般數據行,如下表所述。
| 欄位名稱 | 描述 |
|---|---|
subscription_id |
SQL 資料庫的 Azure訂閱識別碼。 |
resource_group_name |
SQL 資料庫的資源群組名稱。 |
resource_id |
SQL 資料庫的 Azure 資源識別碼。 |
sample_time_utc |
觀察資料列中的值的時間 (UTC)。 |
collection_time_utc |
監看員收集資料列的時間 (UTC)。 此資料行存在於收集時間可能與樣本時間不同的資料集中。 |
replica_type |
其中一個:主要、HA 次要、異地複寫轉寄站、具名次要。 |
logical_server_name |
在 Azure SQL 資料庫中,包含受監視資料庫或彈性集區的邏輯伺服器的名稱。 |
database_name |
受監視資料庫的名稱。 |
database_id |
受監視資料庫的資料庫 ID,在邏輯伺服器內是唯一的。 |
logical_database_id |
在使用者資料庫存留期內保持不變的唯一資料庫識別碼。 重新命名資料庫或變更其服務目標並不會變更此值。 |
physical_database_id |
對應至使用者資料庫的當前實體資料庫的唯一資料庫識別碼。 變更資料庫服務目標會導致此值變更。 |
replica_id |
超大規模資料庫計算複本的唯一識別碼。 |
如果資料集包含資料庫監看員在收集資料列之前觀察到的樣本,則其就會具有 sample_time_utc 和 collection_time_utc 資料行。 否則,觀察時間和收集時間相同,而且資料集僅會包含 sample_time_utc 資料行。
例如,sqldb_database_resource_utilization 資料集衍生自 sys.dm_db_resource_stats 動態管理檢視 (DMV)。 DMV 包含 end_time 資料行,這是每一個資料列報告 15 秒間隔彙總資源統計資料的觀察時間。 此次在 sample_time_utc 欄中報告。 當監看員查詢此 DMV 時,結果集可能會包含多個資料列,每個資料列都有不同的 end_time。 所有這些資料列具有相同的 collection_time_utc 值。