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
- Masuk ke portal Azure dan pilih server Azure Database for PostgreSQL Anda.
- Pilih Parameter Server di bagian Pengaturan pada menu.
- Cari parameter
pg_qs.query_capture_mode
. - Atur nilainya ke
TOP
dan Simpan.
Untuk mengaktifkan statistik tunggu di Microsoft Store Kueri Anda:
- Cari parameter
pgms_wait_sampling.query_capture_mode
. - 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:
- Pada portal, buka Pengaturan Diagnostik di bagian menu navigasi dari server Postgres Anda.
- Pilih Tambah Pengaturan Diagnostik.
- Beri nama setelan ini.
- Pilih titik akhir pilihan Anda (akun penyimpanan, pusat aktivitas, Log Analytics).
- Pilih jenis log QueryStoreRuntimeStatistics dan QueryStoreWaitStatistics.
- 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
- Pelajari selengkapnya tentang skenario di mana Penyimpanan Kueri dapat sangat membantu.
- Pelajari selengkapnya tentang praktik terbaik untuk menggunakan Penyimpanan Kueri.