監視及設定資料庫伺服器

已完成

在公司將其內部部署資料庫遷移至適用於 MySQL/PostgreSQL 的 Azure 資料庫之後,他們仍需要一種方式來監視其效能。

身為資料庫開發人員,您已習慣使用資料庫專用工具和內部部署 VM 監視。 既然現在您的資料庫是在 Azure 上執行,您可以利用入口網站來使用單一工具監視所有不同的資料庫。

在此單元中,您將了解 Azure 監視器可如何支援監視您負責的資料庫健康情況。 當您發現問題時,您會看到如何變更資料庫的設定以解決問題。

如何使用 Azure 監視器以檢視資料庫的健康情況

使用 Azure 監視器來追蹤適用於 MySQL/PostgreSQL 的 Azure 資料庫中的資源使用。 在 Azure 入口網站中適用於您伺服器的 [計量] 頁面中,可讓您建立圖表,協助偵測效能的趨勢,並找出異常情況。

適用於 MySQL/PostgreSQL 的 Azure 資料庫的計量

可用來監視伺服器的計量分為四大類別:

  • 儲存體計量
  • 計量連線
  • 資料處理資源使用率計量
  • 複寫計量

儲存體計量

儲存體計量會追蹤整個伺服器資料庫的大小總計 (已使用的儲存空間),以及伺服器上的目前儲存空間量 (儲存空間限制)。 在作用中的系統中,您可能會發現 已使用的儲存空間 計量隨時間增加。 如果您已為伺服器選取自動成長選項,儲存空間限制 計量會在可用空間量降低時偶爾增加。 每當可用空間量低於目前使用量的 5% 時,就會新增額外的儲存空間。 使用 儲存體百分比 計量以檢視您的伺服器上已使用空間和可用空間的比例。

如果您的伺服器定期花時間增加儲存體,請考慮以手動方式指派更多空間。 若要這麼做,請在 Azure 入口網站中,為您的伺服器選取 [定價層] 頁面,並使用 [儲存體] 滑桿。 請記住,您需支付儲存體的費用,因此請勿將可用的儲存體設為「高」。

已使用的備份儲存體 計量顯示您的備份需要多少空間。 從成本觀點來看,此計量非常重要。 只要備份儲存體保持在低於配置給您伺服器的儲存空間大小,就不會向您收取費用 (依定價層指定)。 當您超過此限制時,會產生備份儲存體的費用。

計量連線

作用中連線 計量顯示伺服器目前支援的並行連線數。 這可能與並行使用者人數不同,取決於您是否已設定任何類型的連線集區而定。 適用於 MySQL/PostgreSQL 的 Azure 資料庫目前不提供任何連線集區功能,但您可以使用 Proxy 服務,例如 PgBouncer* (適用於 PostgreSQL) 來執行此功能。 如需詳細資訊,請參閱使用適用於 PostgreSQL 的 Azure 資料庫 – 連線集區的效能最佳做法

失敗的連線 計量顯示使用者呈現無效認證的頻率。 短時間內的大量事件可能表示密碼蠻力攻擊。

資料處理資源使用率計量

這些計量可協助您監視伺服器處理工作負載的方式。

CPU 百分比 計量顯示 CPU 忙碌的程度。 高 CPU 使用率不是問題,除非它隨著時間不斷增加。 CPU 使用率超過 90% 但仍持續上升,表示您的系統接近處理容量。 您應該考慮擴充到具有更多資源的定價層。

記憶體百分比 計量表示記憶體佔用量。 適用於 MySQL/PostgreSQL 的 Azure 資料庫會使用記憶體以快取資料,並適用於執行每個用戶端要求起始的流程。 高記憶體使用量不是問題,直到它變成超量,通常會高於 95%,視可用的實際記憶體量而定。 記憶體可用性太低可能會導致連線失敗,而且效能會因為記憶體片段而變慢。 您應該監視此計量,以判斷記憶體佔用量是否隨時間增加,並適情況擴充您的伺服器。

IO 百分比 計量會追蹤伺服器執行的磁碟活動量。 理想情況下,此值應該越低越好。 磁碟 IO 是緩慢的作業。 此計量的高值結合 記憶體百分比 的高值,可能表示伺服器沒有足夠的資源可以有效地快取資料,而是必須讀取資料,並將其寫入磁碟儲存體。 某種程度的 IO 活動是無可避免的,因為您的資料必須在某個時間點保存到磁碟中,而且必須維護交易記錄。 在大多數的資料庫伺服器中,此寫入是由個別的處理程序或非同步執行的執行緒來執行的。

網路輸入網路輸出 計量會顯示在作用中連線期間進入和離開伺服器的流量。 這些數字的限制取決於用戶端應用程式和伺服器之間的路徑頻寬。

複寫計量

適用於 PostgreSQL 的 Azure 資料庫提供 複本之間的最大延隔時間複本延隔時間 計量,以幫助您判斷任何複本的更新程度。 只有當您已設定唯讀複本時,這些計量才有意義。

複本之間的最大延隔時間 計量顯示最慢的複本在主機後方有多少位元組。 您只能從主機監視此計量。

複本延隔時間 計量會顯示從主機收到最新交易,並套用至複本的時間 (以秒為單位)。 此計量只在檢視複本時才有意義。

適用於 MySQL 的 Azure 資料庫具有 複寫延隔時間 (秒) 計量。 此計量只能從複本監視,會顯示複本在主機後方延遲的秒數。

建立圖表和警示以監視效能

Azure 入口網站中伺服器的 [計量] 頁面可讓您建立追蹤計量值的圖表。 計量會以一分鐘的間隔收集。 對於每個計量,您可以指定決定如何報告該計量的彙總。

  • 平均 會在每分鐘產生計量的平均值
  • 最大值 顯示每分鐘達到的最大值
  • 最小值 顯示最小值
  • 總和 會加總計量
  • 計數 顯示產生該計量之事件的發生次數

並非所有彙總對每個計量都有意義。

下列範例圖表針對 CPU 百分比、記憶體百分比、IO 百分比和作用中連線計量,擷取每分鐘的平均值。 您會看到有 101 個作用中連線全部同時執行。 CPU 和記憶體使用率都是穩定的,IO 百分比則是 0。 在此範例中,用戶端應用程式會執行需要大量讀取的工作負載,並在記憶體中快取所需的資料。

Image of the chart showing the values captured for the CPU percent, Memory percent, IO percent, and Active connections metrics

請注意,在要擷取的計量和圖表上顯示的結果之間,最多會有五分鐘的延隔時間。

如果計量指出資源即將達到臨界點,您可以設定警示以通知管理員。 下列範例說明如果記憶體使用率超過 90%,會傳送電子郵件給管理員。

Image of the alerts page, showing a new alert that sends an email if memory utilization exceeds 90%

設定伺服器參數

原生 MySQL 和 PostgreSQL 伺服器的可設定性很高,因為兩者皆使用儲存在參數檔案中的組態設定。 對於 PostgreSQL,此資訊會保留在 postgresql.conf 檔案中。 對於 MySQL,設定資料會儲存在各種 my.cnf 檔案中。 在適用於 MySQL/PostgreSQL 的 Azure 資料庫中,您無法直接存取這些檔案。 相反地,您可以使用 Azure 入口網站或 Azure CLI 來檢視和修改伺服器參數。

使用 Azure 入口網站來檢視和設定參數

您的伺服器適用的伺服器設定參數可在 Azure 入口網站之 [伺服器參數] 頁面中取得。 您可以視需要為您的伺服器修改參數值。 下圖顯示適用於 PostgreSQL 的 Azure 資料庫的伺服器參數頁面。 適用於 MySQL 的 Azure 資料庫的對應頁面很類似。

Image of the Server parameters page for Azure Database for PostgreSQL

並非所有伺服器設定參數皆可供使用,因為大多數的伺服器設定是由 Azure 所控制。 例如,缺少與記憶體配置相關聯的參數。 此外,適用於 MySQL 的 Azure 資料庫不支援 ISAM 儲存體,因此不會有 myisam 參數。

標示為 Dynamic 的參數變更會立即生效。 標示為 Static 的參數會要求您重新開機伺服器。 您可以在 [概觀] 頁面中,為您的伺服器執行此操作。

Image of the Overview page for Azure Database for PostgreSQL. The Restart button is highlighted

使用 Azure CLI 來檢視和設定參數

您可以使用程式設計的方式,透過 az mysql/postgres server configuration 命令來檢視及修改參數。 使用 az mysql/postgres server configuration list 來檢視每個設定參數的設定,並使用 az mysql/postgres server configuration show [parameter-name] 鎖定單一參數。 下列程式碼片段顯示適用於 PostgreSQL 的 Azure 資料庫的範例:

az postgres server configuration show \
    --resource-group northwindrg \
    --server-name northwind101 \
    --name vacuum_defer_cleanup_age

結果看起來如下所示:

{
  "allowedValues": "0-1000000",
  "dataType": "Integer",
  "defaultValue": "0",
  "description": "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any.",
  "id": "**********************",
  "name": "vacuum_defer_cleanup_age",
  "resourceGroup": "northwindrg",
  "source": "system-default",
  "type": "Microsoft.DBforPostgreSQL/servers/configurations",
  "value": "0"
}

輸出中的重要項目是 [值] 欄位,顯示參數的目前設定。

使用 az mysql/postgres server configuration set 命令變更設定參數的值,如下所示:

az postgres server configuration set \
    --resource-group northwindrg \
    --server-name northwind101 \
    --name vacuum_defer_cleanup_age \
    --value 5

如果您在變更靜態參數之後需要重新開機伺服器,請執行 az mysql/postgres server restart 命令:

az postgres server restart \
    --resource-group northwindrg \
    --name northwind101