Memantau performa dengan Query Store

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Tunggal

Penting

Azure Database for PostgreSQL - Server Tunggal berada di jalur penghentian. Kami sangat menyarankan Agar Anda meningkatkan ke Azure Database for PostgreSQL - Server Fleksibel. Untuk informasi selengkapnya tentang migrasi ke Azure Database for PostgreSQL - Server Fleksibel, lihat Apa yang terjadi pada Server Tunggal Azure Database for PostgreSQL?.

Fitur Penyimpanan Kueri di Azure Database for PostgreSQL menyediakan cara untuk melacak performa kueri dari waktu ke waktu. Penyimpanan Kueri menyederhanakan pemecahan masalah performa dengan membantu Anda menemukan kueri yang paling lama berjalan dan paling intensif sumber daya dengan cepat. Penyimpanan Kueri secara otomatis menangkap riwayat kueri dan statistik waktu proses, dan menyimpannya untuk Anda tinjau. Fitur ini memisahkan data menurut jendela waktu sehingga Anda dapat melihat pola penggunaan database. Data untuk semua pengguna, database, dan kueri disimpan dalam database bernama azure_sys di instans Azure Database for PostgreSQL.

Penting

Jangan ubah basis data azure_sys atau skemanya. Melakukannya akan mencegah Penyimpanan Kueri dan fitur performa terkait berfungsi dengan benar.

Mengaktifkan Penyimpanan Kueri

Microsoft Store Kueri adalah fitur keikutsertaan, sehingga tidak aktif secara default di server. Penyimpanan kueri diaktifkan atau dinonaktifkan secara global untuk semua database pada server tertentu dan tidak dapat diaktifkan atau dinonaktifkan per database.

Mengaktifkan Penyimpanan Kueri menggunakan portal Azure

  1. Masuk ke portal Azure dan pilih server Azure Database for PostgreSQL Anda.
  2. Pilih Parameter Server di bagian Pengaturan pada menu.
  3. Cari parameter pg_qs.query_capture_mode.
  4. Atur nilainya ke TOP dan Simpan.

Untuk mengaktifkan statistik tunggu di Microsoft Store Kueri Anda:

  1. Cari parameter pgms_wait_sampling.query_capture_mode.
  2. Atur nilainya ke ALL dan Simpan.

Atau Anda dapat mengatur parameter ini menggunakan 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

Izinkan hingga 20 menit agar batch data pertama bertahan di database azure_sys.

Informasi di Penyimpanan Kueri

Penyimpanan Kueri memiliki dua penyimpanan:

  • Penyimpanan statistik runtime untuk mempertahankan informasi statistik eksekusi kueri.
  • Penyimpanan statistik tunggu untuk mempertahankan informasi statistik tunggu.

Skenario umum untuk menggunakan Penyimpanan Kueri meliputi:

  • Menentukan berapa kali kueri dijalankan dalam jendela waktu tertentu
  • Membandingkan waktu rata-rata menjalankan kueri di seluruh jendela waktu untuk melihat delta besar
  • Mengidentifikasi kueri terlama dalam X jam terakhir
  • Mengidentifikasi kueri N teratas yang menantikan sumber daya
  • Memahami sifat tunggu untuk kueri tertentu

Untuk meminimalkan penggunaan ruang, statistik eksekusi runtime di penyimpanan statistik runtime diagregat melalui jendela waktu yang tetap dan dapat dikonfigurasi. Informasi di penyimpanan ini dapat dilihat dengan mengkueri tampilan penyimpanan kueri.

Mengakses informasi Penyimpanan Kueri

Data Penyimpanan Kueri disimpan dalam database Azure_sys di server Postgres Anda.

Kueri berikut mengembalikan informasi tentang kueri di penyimpanan kueri:

SELECT * FROM query_store.qs_view; 

Atau kueri ini untuk statistik tunggu:

SELECT * FROM query_store.pgms_wait_sampling_view;

Menemukan kueri tunggu

Jenis peristiwa tunggu menggabungkan berbagai peristiwa tunggu ke dalam wadah berdasarkan kesamaan. Microsoft Store Kueri menyediakan tipe peristiwa tunggu, nama peristiwa tunggu tertentu, dan kueri yang dimaksud. Mampu menghubungkan informasi tunggu ini dengan statistik runtime kueri yang berarti Anda bisa mendapatkan pemahaman yang mendalam tentang apa yang berkontribusi pada karakteristik performa kueri.

Berikut adalah beberapa contoh bagaimana Anda bisa mendapatkan lebih banyak insight tentang beban kerja Anda menggunakan statistik tunggu di Microsoft Store Kueri:

Pengamatan Perbuatan
Waktu Tunggu Kunci Tinggi Periksa teks kueri untuk kueri yang terpengaruh dan identifikasi entitas target. Lihat di Microsoft Store Kueri untuk kueri lain yang memodifikasi entitas yang sama, yang sering dieksekusi dan/atau memiliki durasi tinggi. Setelah mengidentifikasi kueri ini, pertimbangkan untuk mengubah logika aplikasi untuk meningkatkan konkurensi, atau menggunakan tingkat isolasi yang kurang ketat.
Waktu Tunggu IO Buffer Tinggi Temukan kueri dengan jumlah bacaan fisik yang tinggi di Microsoft Store Kueri. Jika mereka mencocokkan kueri dengan penantian IO tinggi, pertimbangkan untuk memperkenalkan indeks pada entitas yang mendasarinya, untuk melakukan pencarian alih-alih pemindaian. Ini akan meminimalkan overhead IO dari kueri. Periksa Rekomendasi Performa untuk server Anda di portal guna melihat apakah ada rekomendasi indeks untuk server ini yang akan mengoptimalkan kueri.
Waktu Tunggu Memori Tinggi Temukan kueri penggunaan memori teratas di Microsoft Store Kueri. Kueri ini mungkin menunda perkembangan lebih lanjut dari kueri yang terpengaruh. Periksa Rekomendasi Performa untuk server Anda di portal untuk melihat apakah ada rekomendasi indeks yang dapat mengoptimalkan kueri ini.

Opsi konfigurasi

Saat Penyimpanan Kueri diaktifkan, penyimpanan menyimpan data ke jendela agregasi dalam 15 menit, hingga 500 kueri berbeda per jendela akan disimpan.

Opsi berikut tersedia untuk mengonfigurasi parameter Penyimpanan Kueri.

Parameter Keterangan Default Rentang
pg_qs.query_capture_mode Mengatur pernyataan mana yang dilacak. tidak ada tidak ada, teratas, semua
pg_qs.max_query_text_length Mengatur panjang kueri maksimum yang dapat disimpan. Kueri yang terlalu panjang akan dipotong. 6000 100 - 10K
pg_qs.retention_period_in_days Mengatur periode retensi. 7 1 - 30
pg_qs.track_utility Mengatur apakah perintah utilitas dilacak aktif aktif, nonaktif

Opsi berikut ini berlaku khusus untuk statistik tunggu.

Parameter Keterangan Default Rentang
pgms_wait_sampling.query_capture_mode Mengatur pernyataan mana yang dilacak untuk statistik tunggu. tidak ada tidak ada, semua
Pgms_wait_sampling.history_period Mengatur frekuensi, dalam milidetik, di mana peristiwa tunggu diambil sampelnya. 100 1-600000

Catatan

pg_qs.query_capture_mode menggantikan pgms_wait_sampling.query_capture_mode. Jika pg_qs.query_capture_mode TIDAK ADA, pengaturan pgms_wait_sampling.query_capture_mode tidak berpengaruh.

Gunakan portal Azure atau Azure CLI untuk mendapatkan atau mengatur nilai yang berbeda untuk suatu parameter.

Tampilan dan fungsi

Menampilkan dan mengelola Penyimpanan Kueri menggunakan tampilan dan fungsi berikut. Siapa pun dalam peran publik PostgreSQL dapat menggunakan tampilan ini untuk melihat data di Query Store. Tampilan ini hanya tersedia di database azure_sys.

Kueri dinormalisasi dengan melihat strukturnya setelah menghapus literal dan konstanta. Jika dua kueri identik maka keduanya akan memiliki hash yang sama, kecuali untuk nilai harfiah.

query_store.qs_view

Tampilan ini mengembalikan data teks kueri di Penyimpanan Kueri. Ada satu baris untuk setiap query_text yang berbeda. Data tidak tersedia melalui bagian Performa Cerdas di portal, API, atau CLI - tetapi dapat ditemukan dengan menghubungkan ke Azure_sys dan mengkueri 'query_store.query_texts_view'.

Nama Jenis Referensi Keterangan
runtime_stats_entry_id bigint ID dari tabel runtime_stats_entries
user_id oid pg_authid.oid OID pengguna yang menjalankan pernyataan
db_id oid pg_database.oid OID database di mana pernyataan dijalankan
query_id bigint Kode hash internal, dihitung dari pohon parse pernyataan
query_sql_text Varchar(10000) Teks pernyataan perwakilan. Kueri yang berbeda dengan struktur yang sama dikelompokkan bersama; teks ini adalah teks untuk kueri pertama dalam kluster.
plan_id bigint ID paket yang sesuai dengan kueri ini, belum tersedia
waktu_mulai rentang waktu Kueri diagregasi menurut wadah waktu - rentang waktu wadah secara default adalah 15 menit. Ini adalah waktu mulai yang sesuai dengan wadah waktu untuk entri ini.
end_time rentang waktu Waktu berakhir sesuai dengan wadah waktu untuk entri ini.
panggilan bigint Berapa kali kueri dijalankan
total_time presisi ganda Total waktu menjalankan kueri, dalam milidetik
min_time presisi ganda Minimum waktu menjalankan kueri, dalam milidetik
max_time presisi ganda Maksimum waktu menjalankan kueri, dalam milidetik
mean_time presisi ganda Rata-rata waktu menjalankan kueri, dalam milidetik
stddev_time presisi ganda Simpangan baku waktu menjalankan kueri, dalam milidetik
baris bigint Jumlah total baris yang diambil atau dipengaruhi oleh pernyataan
shared_blks_hit bigint Jumlah total hit singgahan blok bersama oleh pernyataan
shared_blks_read bigint Jumlah total blok bersama yang dibaca oleh pernyataan
shared_blks_dirtied bigint Jumlah total blok bersama yang dicampuri oleh pernyataan
shared_blks_written bigint Jumlah total blok bersama yang ditulis oleh pernyataan
local_blks_hit bigint Jumlah total cache blok lokal yang terdampak oleh pernyataan
local_blks_read bigint Jumlah total blok lokal yang dibaca oleh pernyataan
local_blks_dirtied bigint Jumlah total blok lokal yang dicampuri oleh pernyataan
local_blks_written bigint Jumlah total blok lokal yang ditulis oleh pernyataan
temp_blks_read bigint Jumlah total blok temporer yang dibaca oleh pernyataan
temp_blks_written bigint Jumlah total blok temporer yang ditulis oleh pernyataan
blk_read_time presisi ganda Total waktu yang dihabiskan pernyataan untuk membaca blok, dalam milidetik (jika track_io_timing diaktifkan, jika tidak nol)
blk_write_time presisi ganda Total waktu yang dihabiskan pernyataan untuk menulis blok, dalam milidetik (jika track_io_timing diaktifkan, jika tidak nol)

query_store.query_texts_view

Tampilan ini mengembalikan data teks kueri di Penyimpanan Kueri. Ada satu baris untuk setiap query_text yang berbeda.

Nama Jenis Keterangan
query_text_id bigint ID untuk tabel query_texts
query_sql_text Varchar(10000) Teks pernyataan perwakilan. Kueri yang berbeda dengan struktur yang sama dikelompokkan bersama; teks ini adalah teks untuk kueri pertama dalam kluster.

query_store.pgms_wait_sampling_view

Tampilan ini mengembalikan data teks kueri di Penyimpanan Kueri. Ada satu baris untuk setiap query_text yang berbeda. Data tidak tersedia melalui bagian Performa Cerdas di portal, API, atau CLI - tetapi dapat ditemukan dengan menghubungkan ke Azure_sys dan mengkueri 'query_store.query_texts_view'.

Nama Jenis Referensi Keterangan
user_id oid pg_authid.oid OID pengguna yang menjalankan pernyataan
db_id oid pg_database.oid OID database di mana pernyataan dijalankan
query_id bigint Kode hash internal, dihitung dari pohon parse pernyataan
event_type text Jenis peristiwa di mana backend menunggu
event text Nama peristiwa tunggu jika backend saat ini sedang menunggu
panggilan Bilangan bulat Jumlah peristiwa yang sama yang diambil

Fungsi

Query_store.qs_reset() mengembalikan void

qs_reset membuang semua statistik yang dikumpulkan sejauh ini oleh Penyimpanan Kueri. Fungsi ini hanya dapat dijalankan oleh peran admin server.

Query_store.staging_data_reset() mengembalikan kekosongan

staging_data_reset membuang semua statistik yang dikumpulkan dalam memori oleh Penyimpanan Kueri (yaitu, data dalam memori yang belum dibersihkan ke database). Fungsi ini hanya dapat dijalankan oleh peran admin server.

Azure Monitor

Azure Database for PostgreSQL terintegrasi dengan pengaturan diagnostik Azure Monitor. Pengaturan diagnostik memungkinkan Anda mengirim log Postgres dalam format JSON ke Azure Monitor Logs untuk analitik dan pemberitahuan, Azure Event Hubs untuk streaming, dan Microsoft Azure Storage untuk pengarsipan.

Penting

Fitur diagnostik untuk ini hanya tersedia di tingkat harga Tujuan Umum dan Pengoptimalan Memori.

Mengonfigurasi pengaturan diagnostik

Anda dapat mengaktifkan pengaturan diagnostik untuk server Postgres menggunakan portal Microsoft Azure, CLI, REST API, dan PowerShell. Kategori log yang akan dikonfigurasi adalah QueryStoreRuntimeStatistics dan QueryStoreWaitStatistics.

Mengaktifkan log sumber daya menggunakan portal Azure:

  1. Pada portal, buka Pengaturan Diagnostik di bagian menu navigasi dari server Postgres Anda.
  2. Pilih Tambah Pengaturan Diagnostik.
  3. Beri nama setelan ini.
  4. Pilih titik akhir pilihan Anda (akun penyimpanan, pusat aktivitas, Log Analytics).
  5. Pilih jenis log QueryStoreRuntimeStatistics dan QueryStoreWaitStatistics.
  6. Simpan pengaturan Anda.

Untuk mengaktifkan pengaturan ini menggunakan PowerShell, CLI, atau REST API, kunjungi artikel pengaturan diagnostik.

Log format JSON

Tabel berikut menguraikan bidang untuk dua jenis log. Tergantung titik akhir yang Anda pilih, bidang yang disertakan dan urutan munculnya yang kemungkinan bisa beragam.

QueryStoreRuntimeStatistics

Bidang Keterangan
TimeGenerated [UTC] Tanda waktu ketika log direkam di UTC
ResourceId URI sumber daya Azure server Postgres
Kategori QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s Nama server Postgres
runtime_stats_entry_id_s ID dari tabel runtime_stats_entries
user_id_s OID pengguna yang menjalankan pernyataan
db_id_s OID database di mana pernyataan dijalankan
query_id_s Kode hash internal, dihitung dari pohon parse pernyataan
end_time_s Waktu berakhir sesuai dengan wadah waktu untuk entri ini
calls_s Berapa kali kueri dijalankan
total_time_s Total waktu menjalankan kueri, dalam milidetik
min_time_s Minimum waktu menjalankan kueri, dalam milidetik
max_time_s Maksimum waktu menjalankan kueri, dalam milidetik
mean_time_s Rata-rata waktu menjalankan kueri, dalam milidetik
ResourceGroup Grup sumber daya
SubscriptionId ID langganan Anda.
ResourceProvider Microsoft.DBForPostgreSQL
Sumber daya Nama server Postgres
ResourceType Servers

QueryStoreWaitStatistics

Bidang Keterangan
TimeGenerated [UTC] Tanda waktu ketika log direkam di UTC
ResourceId URI sumber daya Azure server Postgres
Kategori QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s OID pengguna yang menjalankan pernyataan
db_id_s OID database di mana pernyataan dijalankan
query_id_s Kode hash internal kueri
calls_s Jumlah peristiwa yang sama yang diambil
event_type_s Jenis peristiwa di mana backend menunggu
event_s Nama peristiwa tunggu jika backend saat ini sedang menunggu
start_time_t Waktu mulai peristiwa
end_time_s Waktu akhir peristiwa
LogicalServerName_s Nama server Postgres
ResourceGroup Grup sumber daya
SubscriptionId ID langganan Anda.
ResourceProvider Microsoft.DBForPostgreSQL
Sumber daya Nama server Postgres
ResourceType Servers

Batasan dan masalah yang diketahui

  • Jika server PostgreSQL telah mengaktifkan parameter default_transaction_read_only, Penyimpanan Kueri tidak dapat mengambil data apa pun.
  • Fungsionalitas Penyimpanan Kueri dapat terganggu jika menemukan kueri Unicode yang panjang (>= 6000 byte).
  • Baca replika replikasi data Penyimpanan Kueri dari server utama. Ini berarti bahwa Penyimpanan Kueri replika baca tidak menyediakan statistik tentang kueri yang dijalankan pada replika baca.

Langkah berikutnya