Sorgu Deposu ile performansı izleme

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Tek Sunucu

Önemli

PostgreSQL için Azure Veritabanı - Tek Sunucu kullanımdan kaldırma yolundadır. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya yükseltmenizi kesinlikle öneririz. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya geçiş hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı Tek Sunucuya ne oluyor?.

PostgreSQL için Azure Veritabanı'daki Sorgu Deposu özelliği, zaman içinde sorgu performansını izlemenin bir yolunu sağlar. Sorgu Deposu, en uzun süre çalışan ve yoğun kaynak kullanan sorguları hızla bulmanıza yardımcı olarak performans sorunlarını gidermeyi basitleştirir. Sorgu Deposu sorguların ve çalışma zamanı istatistiklerinin geçmişini otomatik olarak yakalar ve bunları gözden geçirmeniz için saklar. Veritabanı kullanım desenlerini görebilmeniz için verileri zamana göre ayırır. Tüm kullanıcılar, veritabanları ve sorgular için veriler, PostgreSQL için Azure Veritabanı örneğindeki azure_sys adlı bir veritabanında depolanır.

Önemli

azure_sys veritabanını veya şemalarını değiştirmeyin. Bunu yaptığınızda Sorgu Deposu ve ilgili performans özelliklerinin düzgün çalışması engellenir.

Sorgu Deposunu Etkinleştirme

Sorgu Deposu bir kabul etme özelliğidir, bu nedenle sunucuda varsayılan olarak etkin değildir. Depo, belirli bir sunucudaki tüm veritabanları için genel olarak etkinleştirilir veya devre dışı bırakılır ve veritabanı başına açılamaz veya kapatılamaz.

Azure portalını kullanarak Sorgu Deposu'yu etkinleştirme

  1. Azure portalında oturum açın ve PostgreSQL için Azure Veritabanı sunucunuzu seçin.
  2. Menünün Ayarlar bölümünde Sunucu Parametreleri'ni seçin.
  3. parametresini pg_qs.query_capture_mode arayın.
  4. Değeri ve Kaydet olarak TOP ayarlayın.

Sorgu Deponuzda bekleme istatistiklerini etkinleştirmek için:

  1. parametresini pgms_wait_sampling.query_capture_mode arayın.
  2. Değeri ve Kaydet olarak ALL ayarlayın.

Alternatif olarak, Azure CLI kullanarak bu parametreleri ayarlayabilirsiniz.

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

İlk toplu iş verilerinin azure_sys veritabanında kalıcı olması için 20 dakikaya izin verin.

Sorgu Deposu'ndaki bilgiler

Sorgu Deposu'nun iki deposu vardır:

  • Sorgu yürütme istatistikleri bilgilerini kalıcı hale getiren çalışma zamanı istatistikleri deposu.
  • Bekleme istatistikleri bilgilerini kalıcı hale getiren bir bekleme istatistikleri deposu.

Sorgu Deposu'yu kullanmaya yönelik yaygın senaryolar şunlardır:

  • Belirli bir zaman penceresinde bir sorgunun kaç kez yürütüldü olduğunu belirleme
  • Büyük deltaları görmek için zaman pencereleri arasında bir sorgunun ortalama yürütme süresini karşılaştırma
  • Son X saat içindeki en uzun çalışan sorguları belirleme
  • Kaynakları bekleyen en iyi N sorgularını belirleme
  • Belirli bir sorgu için bekleme doğasını anlama

Alan kullanımını en aza indirmek için, çalışma zamanı istatistikleri deposundaki çalışma zamanı yürütme istatistikleri sabit, yapılandırılabilir bir zaman penceresi üzerinde toplanır. Bu depolardaki bilgiler, sorgu deposu görünümlerini sorgulayarak görünür.

Sorgu Deposu bilgilerine erişme

Sorgu Deposu verileri Postgres sunucunuzdaki azure_sys veritabanında depolanır.

Aşağıdaki sorgu, Sorgu Deposu'ndaki sorgular hakkında bilgi döndürür:

SELECT * FROM query_store.qs_view; 

Ya da bekleme istatistikleri için bu sorgu:

SELECT * FROM query_store.pgms_wait_sampling_view;

Bekleme sorgularını bulma

Bekleme olayı türleri, farklı bekleme olaylarını benzerliğe göre demetler halinde birleştirir. Sorgu Deposu bekleme olayı türünü, belirli bir bekleme olayı adını ve söz konusu sorguyu sağlar. Bu bekleme bilgilerini sorgu çalışma zamanı istatistikleriyle ilişkilendirebilmek, sorgu performansı özelliklerine nelerin katkıda bulunabileceğini daha iyi anlayabileceğiniz anlamına gelir.

Sorgu Deposu'ndaki bekleme istatistiklerini kullanarak iş yükünüzle ilgili daha fazla içgörü elde etmek için kullanabileceğiniz bazı örnekler aşağıda verilmiştir:

Gözlem Eylem
Yüksek Kilit beklemeleri Etkilenen sorgular için sorgu metinlerini denetleyin ve hedef varlıkları belirleyin. Sık yürütülen ve/veya süresi yüksek olan aynı varlığı değiştiren diğer sorguları Sorgu Deposu'na bakın. Bu sorguları tanımladıktan sonra eşzamanlılığı geliştirmek için uygulama mantığını değiştirmeyi veya daha az kısıtlayıcı bir yalıtım düzeyi kullanmayı göz önünde bulundurun.
Yüksek Arabellekli GÇ beklemeleri Sorgu Deposu'nda çok sayıda fiziksel okuma içeren sorguları bulun. Yüksek GÇ beklemeleri olan sorgularla eşleşiyorsa, taramalar yerine arama yapmak için temel alınan varlığa bir dizin eklemeyi göz önünde bulundurun. Bu, sorguların GÇ yükünü en aza indirir. Bu sunucu için sorguları en iyi duruma getirebilecek dizin önerileri olup olmadığını görmek için portalda sunucunuzun Performans Öneriler denetleyin.
Yüksek Bellek beklemeleri Sorgu Deposu'nda en çok bellek tüketen sorguları bulun. Bu sorgular büyük olasılıkla etkilenen sorguların ilerleme durumunu geciktiriyor. Bu sorguları en iyi duruma getirebilecek dizin önerileri olup olmadığını görmek için portalda sunucunuzun Performans Öneriler denetleyin.

Yapılandırma seçenekleri

Sorgu Deposu etkinleştirildiğinde verileri 15 dakikalık toplama pencerelerinde ve pencere başına en fazla 500 ayrı sorgu kaydeder.

Sorgu Deposu parametrelerini yapılandırmak için aşağıdaki seçenekler kullanılabilir.

Parametre Açıklama Varsayılan Aralık
pg_qs.query_capture_mode Hangi deyimlerin izlendiğini ayarlar. yok none, top, all
pg_qs.max_query_text_length Kaydedilebilecek en fazla sorgu uzunluğunu ayarlar. Daha uzun sorgular kesilir. 6000 100 - 10K
pg_qs.retention_period_in_days Bekletme süresini ayarlar. 7 1 - 30
pg_qs.track_utility Yardımcı program komutlarının izlenip izlenmediğini ayarlar on açık, kapalı

Aşağıdaki seçenekler özellikle bekleme istatistikleri için geçerlidir.

Parametre Açıklama Varsayılan Aralık
pgms_wait_sampling.query_capture_mode Hangi deyimlerin bekleme istatistikleri için izlendiğini ayarlar. yok hiçbiri, tümü
Pgms_wait_sampling.history_period Bekleme olaylarının örneklendiği sıklığı milisaniye olarak ayarlayın. 100 1-600000

Not

pg_qs.query_capture_mode, pgms_wait_sampling.query_capture_mode değerinin yerini alır. pg_qs.query_capture_mode NONE ise, pgms_wait_sampling.query_capture_mode ayarının hiçbir etkisi yoktur.

Parametre için farklı bir değer almak veya ayarlamak için Azure portalını veya Azure CLI'yi kullanın.

Görünümler ve işlevler

Aşağıdaki görünümleri ve işlevleri kullanarak Sorgu Deposu'na bakın ve yönetin. PostgreSQL genel rolündeki herkes bu görünümleri kullanarak Sorgu Deposu'ndaki verileri görebilir. Bu görünümler yalnızca azure_sys veritabanında kullanılabilir.

Sorgular, değişmez değerleri ve sabitleri kaldırdıktan sonra yapısına bakılarak normalleştirilir. Değişmez değerler dışında iki sorgu aynıysa, bunlar aynı karmaya sahip olur.

query_store.qs_view

Bu görünüm, Sorgu Deposu'ndaki sorgu metin verilerini döndürür. Her ayrı query_text için bir satır vardır. Veriler portal, API'ler veya CLI'daki Akıllı Performans bölümü aracılığıyla kullanılamaz; ancak azure_sys bağlanıp 'query_store.query_texts_view' sorgulanarak bulunabilir.

Ad Tür Başvurular Açıklama
runtime_stats_entry_id bigint runtime_stats_entries tablosundaki kimlik
user_id Oıd pg_authid.oid deyimini yürüten kullanıcının OID değeri
Db_ıd Oıd pg_database.oid deyiminin yürütüldiği veritabanının OID'i
query_id bigint deyiminin ayrıştırma ağacından hesaplanan iç karma kodu
query_sql_text Varchar(10000) Temsili açıklama metni. Aynı yapıya sahip farklı sorgular birlikte kümelenir; bu metin, kümedeki sorgulardan ilkinin metnidir.
plan_id bigint Bu sorguya karşılık gelen planın kimliği, henüz kullanılamıyor
start_time timestamp Sorgular zaman demetlerine göre toplanır; demetin zaman aralığı varsayılan olarak 15 dakikadır. Bu, bu girişin zaman demetine karşılık gelen başlangıç saatidir.
end_time timestamp Bu girişin zaman demetine karşılık gelen bitiş saati.
Aramalar bigint Sorgunun kaç kez yürütüldü?
total_time çift duyarlık Milisaniye cinsinden toplam sorgu yürütme süresi
min_time çift duyarlık Milisaniye cinsinden en düşük sorgu yürütme süresi
max_time çift duyarlık Milisaniye cinsinden en fazla sorgu yürütme süresi
mean_time çift duyarlık Milisaniye cinsinden ortalama sorgu yürütme süresi
stddev_time çift duyarlık Sorgu yürütme süresinin milisaniye cinsinden standart sapması
satırlar bigint Deyiminden alınan veya etkilenen toplam satır sayısı
shared_blks_hit bigint deyimi tarafından paylaşılan blok önbelleği isabetlerinin toplam sayısı
shared_blks_read bigint deyimi tarafından okunan toplam paylaşılan blok sayısı
shared_blks_dirtied bigint deyimi tarafından kirlenen toplam paylaşılan blok sayısı
shared_blks_written bigint deyimi tarafından yazılan toplam paylaşılan blok sayısı
local_blks_hit bigint deyimi tarafından yapılan yerel blok önbelleği isabetlerinin toplam sayısı
local_blks_read bigint deyimi tarafından okunan toplam yerel blok sayısı
local_blks_dirtied bigint deyimiyle kirlenen yerel blokların toplam sayısı
local_blks_written bigint deyimi tarafından yazılan toplam yerel blok sayısı
temp_blks_read bigint deyimi tarafından okunan toplam geçici blok sayısı
temp_blks_written bigint Deyimi tarafından yazılan toplam geçici blok sayısı
blk_read_time çift duyarlık Deyimin blokları okuma için harcadığı toplam süre (track_io_timing etkinse, aksi takdirde sıfır)
blk_write_time çift duyarlık Deyimin blokları yazmak için harcadığı toplam süre (track_io_timing etkinse, aksi takdirde sıfır)

query_store.query_texts_view

Bu görünüm, Sorgu Deposu'ndaki sorgu metin verilerini döndürür. Her ayrı query_text için bir satır vardır.

Ad Tür Açıklama
query_text_id bigint query_texts tablosunun kimliği
query_sql_text Varchar(10000) Temsili açıklama metni. Aynı yapıya sahip farklı sorgular birlikte kümelenir; bu metin, kümedeki sorgulardan ilkinin metnidir.

query_store.pgms_wait_sampling_view

Bu görünüm, Sorgu Deposu'ndaki sorgu metin verilerini döndürür. Her ayrı query_text için bir satır vardır. Veriler portal, API'ler veya CLI'daki Akıllı Performans bölümü aracılığıyla kullanılamaz; ancak azure_sys bağlanıp 'query_store.query_texts_view' sorgulanarak bulunabilir.

Ad Tür Başvurular Açıklama
user_id Oıd pg_authid.oid deyimini yürüten kullanıcının OID değeri
Db_ıd Oıd pg_database.oid deyiminin yürütüldiği veritabanının OID'i
query_id bigint deyiminin ayrıştırma ağacından hesaplanan iç karma kodu
Event_type text Arka ucun beklediği olay türü
event text Arka uç şu anda bekliyorsa bekleme olayı adı
Aramalar Tamsayı Yakalanan aynı olayın sayısı

İşlevler

Query_store.qs_reset() void döndürüyor

qs_reset Sorgu Deposu tarafından şimdiye kadar toplanan tüm istatistikleri atar. Bu işlev yalnızca sunucu yöneticisi rolü tarafından yürütülebilir.

Query_store.staging_data_reset() void döndürüyor

staging_data_reset Sorgu Deposu tarafından bellekte toplanan tüm istatistikleri atar (başka bir ifadeyle, bellekteki veriler henüz veritabanına boşaltılmamıştır). Bu işlev yalnızca sunucu yöneticisi rolü tarafından yürütülebilir.

Azure İzleyici

PostgreSQL için Azure Veritabanı ile tümleştirilmiştirAzure İzleyici tanılama ayarları. Tanılama ayarları, Postgres günlüklerinizi JSON biçiminde analiz ve uyarı için Azure İzleyici Günlükleri'ne, akış için Event Hubs'a ve arşivleme için Azure Depolama göndermenize olanak tanır.

Önemli

için bu tanılama özelliği yalnızca Genel Amaçlı ve Bellek için İyileştirilmiş fiyatlandırma katmanlarında kullanılabilir.

Tanılama ayarlarını yapılandırma

Azure portalı, CLI, REST API ve PowerShell'i kullanarak Postgres sunucunuz için tanılama ayarlarını etkinleştirebilirsiniz. Yapılandırılan günlük kategorileri QueryStoreRuntimeStatistics ve QueryStoreWaitStatistics'tir.

Azure portalını kullanarak kaynak günlüklerini etkinleştirmek için:

  1. Portalda, Postgres sunucunuzun gezinti menüsünde Tanılama Ayarlar'ne gidin.
  2. Tanılama Ayarı Ekle'yi seçin.
  3. Bu ayarı adlandır.
  4. Tercih ettiğiniz uç noktayı seçin (depolama hesabı, olay hub'ı, log analytics).
  5. QueryStoreRuntimeStatistics ve QueryStoreWaitStatistics günlük türlerini seçin.
  6. Ayarınızı kaydedin.

PowerShell, CLI veya REST API kullanarak bu ayarı etkinleştirmek için tanılama ayarları makalesini ziyaret edin.

JSON günlük biçimi

Aşağıdaki tablolarda iki günlük türünün alanları açıklanmaktadır. Seçtiğiniz çıkış uç noktasına bağlı olarak, dahil edilen alanlar ve bunların görüntülenme sırası değişebilir.

QueryStoreRuntimeStatistics

Alan Açıklama
TimeGenerated [UTC] Günlüğün UTC olarak kaydedildiği zaman damgası
ResourceId Postgres sunucusunun Azure kaynak URI'sini
Kategori QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s Postgres sunucu adı
runtime_stats_entry_id_s runtime_stats_entries tablosundaki kimlik
user_id_s deyimini yürüten kullanıcının OID değeri
db_id_s deyiminin yürütüldiği veritabanının OID'i
query_id_s deyiminin ayrıştırma ağacından hesaplanan iç karma kodu
end_time_s Bu girişin zaman demetine karşılık gelen bitiş saati
calls_s Sorgunun kaç kez yürütüldü?
total_time_s Milisaniye cinsinden toplam sorgu yürütme süresi
min_time_s Milisaniye cinsinden en düşük sorgu yürütme süresi
max_time_s Milisaniye cinsinden en fazla sorgu yürütme süresi
mean_time_s Milisaniye cinsinden ortalama sorgu yürütme süresi
ResourceGroup Kaynak grubu
SubscriptionId Abonelik kimliğiniz
ResourceProvider Microsoft.DBForPostgreSQL
Kaynak Postgres sunucu adı
ResourceType Servers

QueryStoreWaitStatistics

Alan Açıklama
TimeGenerated [UTC] Günlüğün UTC olarak kaydedildiği zaman damgası
ResourceId Postgres sunucusunun Azure kaynak URI'sini
Kategori QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s deyimini yürüten kullanıcının OID değeri
db_id_s deyiminin yürütüldiği veritabanının OID'i
query_id_s Sorgunun iç karma kodu
calls_s Yakalanan aynı olayın sayısı
event_type_s Arka ucun beklediği olay türü
event_s Arka uç şu anda bekliyorsa bekleme olayı adı
start_time_t Olay başlangıç saati
end_time_s Olay bitiş saati
LogicalServerName_s Postgres sunucu adı
ResourceGroup Kaynak grubu
SubscriptionId Abonelik kimliğiniz
ResourceProvider Microsoft.DBForPostgreSQL
Kaynak Postgres sunucu adı
ResourceType Servers

Sınırlamalar ve bilinen sorunlar

  • PostgreSQL sunucusunda parametresi default_transaction_read_only varsa, Sorgu Deposu verileri yakalayamaz.
  • Uzun Unicode sorguları (>= 6000 bayt) ile karşılaşırsa Sorgu Deposu işlevselliği kesilebilir.
  • Okuma amaçlı çoğaltmalar , Sorgu Deposu verilerini birincil sunucudan çoğaltır. Bu, okuma amaçlı çoğaltmanın Sorgu Deposu'nun okuma çoğaltması üzerinde çalıştırılacak sorgular hakkında istatistik sağlamadığı anlamına gelir.

Sonraki adımlar