使用 查詢存放區 監視效能
適用於:適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器
重要
適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器位於淘汰路徑上。 強烈建議您升級至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器。 如需移轉至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的詳細資訊,請參閱單一伺服器 適用於 PostgreSQL 的 Azure 資料庫 發生什麼事?。
適用於 PostgreSQL 的 Azure 資料庫 中的 查詢存放區 功能可讓您追蹤一段時間的查詢效能。 查詢存放區 可協助您快速找出執行時間最長且耗用最多資源的查詢,來簡化效能疑難解答。 查詢存放區 會自動擷取查詢和運行時間統計數據的歷程記錄,並保留它們以供檢閱。 它會依時間範圍分隔數據,讓您可以看到資料庫使用模式。 所有使用者、資料庫和查詢的數據都會儲存在 適用於 PostgreSQL 的 Azure 資料庫 實例中名為 azure_sys的資料庫。
重要
請勿修改 azure_sys 資料庫或其架構。 這麼做可防止 查詢存放區和相關效能功能正常運作。
啟用 查詢存放區
查詢存放區 是選擇加入功能,因此在伺服器上預設不會作用中。 指定伺服器上的所有資料庫全域啟用或停用存放區,且無法針對每個資料庫開啟或關閉。
使用 Azure 入口網站 啟用 查詢存放區
- 登入 Azure 入口網站,然後選取您的 適用於 PostgreSQL 的 Azure 資料庫 伺服器。
- 在功能表的 [設定] 區段中選取 [伺服器參數]。
- 搜尋
pg_qs.query_capture_mode
參數。 - 將值設定為
TOP
,並將 [儲存]。
若要在您的 查詢存放區 中啟用等候統計資料:
- 搜尋
pgms_wait_sampling.query_capture_mode
參數。 - 將值設定為
ALL
,並將 [儲存]。
或者,您可以使用 Azure CLI 來設定這些參數。
az postgres server configuration set --name pg_qs.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value TOP
az postgres server configuration set --name pgms_wait_sampling.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value ALL
允許最多 20 分鐘,讓第一批數據保存在azure_sys資料庫中。
查詢存放區 中的資訊
查詢存放區 有兩家商店:
- 用來保存查詢執行統計數據資訊的運行時間統計數據存放區。
- 保存等候統計數據資訊的等候統計數據存放區。
使用 查詢存放區 的常見案例包括:
- 判斷查詢在指定時間範圍中執行的次數
- 比較跨時間時段查詢的平均運行時間,以查看大型差異
- 識別過去 X 小時內執行時間最長的查詢
- 識別正在等候資源的前 N 個查詢
- 瞭解特定查詢的等候本質
為了將空間使用量降到最低,運行時間統計數據存放區中的運行時間執行統計數據會透過固定且可設定的時間範圍匯總。 查詢查詢查詢存放區檢視可看見這些存放區中的資訊。
存取 查詢存放區 資訊
查詢存放區 資料會儲存在 Postgres 伺服器上的 azure_sys 資料庫中。
下列查詢會傳回 查詢存放區 中查詢的相關信息:
SELECT * FROM query_store.qs_view;
或此查詢等候統計資料:
SELECT * FROM query_store.pgms_wait_sampling_view;
尋找等候查詢
Wait 事件類型會以相似度將不同的等候事件合併到貯體中。 查詢存放區 提供等候事件類型、特定等候事件名稱和有問題的查詢。 能夠將此等候資訊與查詢運行時間統計數據相互關聯,表示您可以更深入瞭解對查詢效能特性的貢獻。
以下是如何使用 查詢存放區 中的等候統計數據,深入瞭解工作負載的一些範例:
觀察 | 動作 |
---|---|
高鎖定等候 | 查看受影響查詢的查詢文字,並找出目標實體。 查看 查詢存放區 尋找修改相同實體的其他查詢,此查詢經常執行且/或持續時間很高。 找出這些查詢之後,請考慮變更應用程式邏輯,改善並行存取,或使用限制較少的隔離等級。 |
高緩衝區 IO 等候 | 在查詢存放區中尋找實體讀取次數高的查詢。 如果它們符合高 IO 等候的查詢,請考慮在基礎實體上引進索引,以便進行搜尋,而不是掃描。 這會將查詢的 IO 額外負荷降到最低。 檢查入口網站中伺服器的效能 建議,以查看此伺服器是否有索引建議可優化查詢。 |
高記憶體等候 | 找出查詢存放區中記憶體耗用量名列前茅的查詢。 這些查詢可能會進一步延遲受影響查詢的進度。 檢查入口網站中伺服器的效能 建議,以查看是否有索引建議可優化這些查詢。 |
設定選項
啟用 查詢存放區 時,它會將資料儲存在15分鐘的匯總視窗中,每個視窗最多500個不同的查詢。
下列選項可用於設定 查詢存放區 參數。
參數 | 說明 | Default | 範圍 |
---|---|---|---|
pg_qs.query_capture_mode | 設定追蹤的語句。 | none | none、top、all |
pg_qs.max_query_text_length | 設定可儲存的查詢長度上限。 將會截斷較長的查詢。 | 6000 | 100 - 10K |
pg_qs.retention_period_in_days | 設定保留期間。 | 7 | 1 - 30 |
pg_qs.track_utility | 設定是否追蹤公用程式命令 | on | 開啟、關閉 |
下列選項特別適用於等候統計數據。
參數 | 說明 | Default | 範圍 |
---|---|---|---|
pgms_wait_sampling.query_capture_mode | 設定追蹤等候統計數據的語句。 | none | 無,全部 |
Pgms_wait_sampling.history_period | 設定取樣等候事件的頻率,以毫秒為單位。 | 100 | 1-600000 |
注意
pg_qs.query_capture_mode 會取代 pgms_wait_sampling.query_capture_mode。 如果 pg_qs.query_capture_mode 為 NONE,pgms_wait_sampling.query_capture_mode 設定沒有任何作用。
使用 Azure 入口網站 或 Azure CLI 來取得或設定參數的不同值。
檢視和函式
使用下列檢視及函式檢視和管理 查詢存放區。 PostgreSQL 公用角色中的任何人都可以使用這些檢視來查看 查詢存放區 中的數據。 這些檢視僅適用於 azure_sys 資料庫中。
藉由在移除常值和常數之後查看其結構,查詢會正規化。 如果除了常值之外,兩個查詢都相同,它們會有相同的哈希。
query_store.qs_view
此檢視會傳回 查詢存放區 中的查詢文字數據。 每個相異query_text都有一個數據列。 數據無法透過入口網站、API 或 CLI 中的 [智慧效能] 區段取得,但可以透過連線至 azure_sys 並查詢 『query_store.query_texts_view』 來找到數據。
名稱 | 類型 | 參考 | 說明 |
---|---|---|---|
runtime_stats_entry_id | bigint | 來自runtime_stats_entries數據表的標識碼 | |
user_id | oid | pg_authid.oid | 執行語句的使用者 OID |
db_id | oid | pg_database.oid | 執行語句的資料庫 OID |
query_id | bigint | 從語句剖析樹狀結構計算的內部哈希程序代碼 | |
query_sql_text | Varchar(10000) | 代表聲明的文字。 具有相同結構的不同查詢會叢集在一起;此文字是叢集中第一個查詢的文字。 | |
plan_id | bigint | 對應至此查詢的計劃標識碼,尚無法使用 | |
start_time | timestamp | 查詢會依時間值區匯總 - 貯體的時間範圍預設為 15 分鐘。 這是對應至這個專案之時間值區的開始時間。 | |
end_time | timestamp | 對應至這個專案之時間貯體的時間結束時間。 | |
通話 | bigint | 執行查詢的次數 | |
total_time | double precision | 查詢運行時間總計,以毫秒為單位 | |
min_time | double precision | 最小查詢運行時間,以毫秒為單位 | |
max_time | double precision | 查詢運行時間上限,以毫秒為單位 | |
mean_time | double precision | 平均查詢運行時間,以毫秒為單位 | |
stddev_time | double precision | 查詢運行時間的標準偏差,以毫秒為單位 | |
rows | BIGINT | 擷取或受 語句影響的數據列總數 | |
shared_blks_hit | bigint | 語句所叫用的共享區塊快取總數 | |
shared_blks_read | bigint | 語句讀取的共享區塊總數 | |
shared_blks_dirtied | bigint | 語句所擷取的共享區塊總數 | |
shared_blks_written | bigint | 語句寫入的共享區塊總數 | |
local_blks_hit | bigint | 語句叫用的本機區塊快取總數 | |
local_blks_read | bigint | 語句所讀取的本機區塊總數 | |
local_blks_dirtied | bigint | 語句所擷取的本機區塊總數 | |
local_blks_written | bigint | 語句所撰寫的本機區塊總數 | |
temp_blks_read | bigint | 語句所讀取的暫存區塊總數 | |
temp_blks_written | bigint | 語句寫入的暫存區塊總數 | |
blk_read_time | double precision | 語句讀取區塊所花費的總時間,以毫秒為單位(如果已啟用track_io_timing,則為零) | |
blk_write_time | double precision | 語句所花費寫入區塊的總時間,以毫秒為單位(如果已啟用track_io_timing,則為零) |
query_store.query_texts_view
此檢視會傳回 查詢存放區 中的查詢文字數據。 每個相異query_text都有一個數據列。
名稱 | 類型 | 說明 |
---|---|---|
query_text_id | bigint | query_texts數據表的標識碼 |
query_sql_text | Varchar(10000) | 代表聲明的文字。 具有相同結構的不同查詢會叢集在一起;此文字是叢集中第一個查詢的文字。 |
query_store.pgms_wait_sampling_view
此檢視會傳回 查詢存放區 中的查詢文字數據。 每個相異query_text都有一個數據列。 數據無法透過入口網站、API 或 CLI 中的 [智慧效能] 區段取得,但可以透過連線至 azure_sys 並查詢 『query_store.query_texts_view』 來找到數據。
名稱 | 類型 | 參考 | 說明 |
---|---|---|---|
user_id | oid | pg_authid.oid | 執行語句的使用者 OID |
db_id | oid | pg_database.oid | 執行語句的資料庫 OID |
query_id | bigint | 從語句剖析樹狀結構計算的內部哈希程序代碼 | |
event_type | text | 後端正在等候的事件類型 | |
event | text | 如果後端目前正在等候,則等候事件名稱 | |
通話 | 整數 | 擷取的相同事件數目 |
函式
Query_store.qs_reset() 會傳回 void
qs_reset
捨棄到目前為止收集的所有統計數據,查詢存放區。 此函式只能由伺服器管理員角色執行。
Query_store.staging_data_reset() 會傳回 void
staging_data_reset
會捨棄 查詢存放區 收集在記憶體中的所有統計數據(也就是記憶體中尚未排清到資料庫的數據)。 此函式只能由伺服器管理員角色執行。
Azure 監視器
適用於 PostgreSQL 的 Azure 資料庫與Azure 監視器診斷設定。 診斷設定可讓您以 JSON 格式將 Postgres 記錄傳送至 Azure 監視器記錄以進行分析和警示、串流事件中樞,以及用於封存 Azure 儲存體。
重要
此診斷功能僅適用於一般用途和記憶體優化定價層。
設定診斷設定
您可以使用 Azure 入口網站、CLI、REST API 和 PowerShell 來啟用 Postgres 伺服器的診斷設定。 要設定的記錄類別為 QueryStoreRuntimeStatistics 和 QueryStoreWaitStatistics。
若要使用 Azure 入口網站 啟用資源記錄:
- 在入口網站中,移至 Postgres 伺服器的導覽功能表中的 [診斷 設定]。
- 選取 [新增診斷設定]。
- 將這個設定命名為 。
- 選取您慣用的端點(記憶體帳戶、事件中樞、記錄分析)。
- 選取記錄類型 QueryStoreRuntimeStatistics 和 QueryStoreWaitStatistics。
- 儲存您的設定。
若要使用PowerShell、CLI或REST API啟用此設定,請瀏覽 診斷設定一文。
JSON 記錄格式
下表描述這兩種記錄類型的欄位。 視您選擇的輸出端點而定,包含的欄位及其顯示順序可能會有所不同。
QueryStoreRuntimeStatistics
欄位 | 說明 |
---|---|
TimeGenerated [UTC] | 以 UTC 記錄記錄時的時間戳記 |
ResourceId | Postgres 伺服器的 Azure 資源 URI |
類別 | QueryStoreRuntimeStatistics |
OperationName | QueryStoreRuntimeStatisticsEvent |
LogicalServerName_s | Postgres 伺服器名稱 |
runtime_stats_entry_id_s | 來自runtime_stats_entries數據表的標識碼 |
user_id_s | 執行語句的使用者 OID |
db_id_s | 執行語句的資料庫 OID |
query_id_s | 從語句剖析樹狀結構計算的內部哈希程序代碼 |
end_time_s | 對應至這個專案之時間貯體的時間結束時間 |
calls_s | 執行查詢的次數 |
total_time_s | 查詢運行時間總計,以毫秒為單位 |
min_time_s | 最小查詢運行時間,以毫秒為單位 |
max_time_s | 查詢運行時間上限,以毫秒為單位 |
mean_time_s | 平均查詢運行時間,以毫秒為單位 |
ResourceGroup | 資源群組 |
SubscriptionId | 您的訂用帳戶識別碼 |
ResourceProvider | Microsoft.DBForPostgreSQL |
資源 | Postgres 伺服器名稱 |
ResourceType | Servers |
QueryStoreWaitStatistics
欄位 | 說明 |
---|---|
TimeGenerated [UTC] | 以 UTC 記錄記錄時的時間戳記 |
ResourceId | Postgres 伺服器的 Azure 資源 URI |
類別 | QueryStoreWaitStatistics |
OperationName | QueryStoreWaitEvent |
user_id_s | 執行語句的使用者 OID |
db_id_s | 執行語句的資料庫 OID |
query_id_s | 查詢的內部哈希碼 |
calls_s | 擷取的相同事件數目 |
event_type_s | 後端正在等候的事件類型 |
event_s | 如果後端目前正在等候,則等候事件名稱 |
start_time_t | 事件開始時間 |
end_time_s | 事件結束時間 |
LogicalServerName_s | Postgres 伺服器名稱 |
ResourceGroup | 資源群組 |
SubscriptionId | 您的訂用帳戶識別碼 |
ResourceProvider | Microsoft.DBForPostgreSQL |
資源 | Postgres 伺服器名稱 |
ResourceType | Servers |
限制和已知問題
- 如果 PostgreSQL 伺服器已開啟 參數default_transaction_read_only,則 查詢存放區 無法擷取數據。
- 如果遇到長 Unicode 查詢,查詢存放區 功能可能會中斷(>= 6000 個字節)。
- 讀取複本會從主伺服器複寫 查詢存放區 數據。 這表示讀取複本的 查詢存放區 不提供讀取複本上執行之查詢的相關統計數據。
下一步
- 深入瞭解 查詢存放區 特別有説明的案例。
- 深入瞭解使用 查詢存放區 的最佳做法。