Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Otonom ayarlama, PostgreSQL için Azure Veritabanı esnek sunucu örneğinizde iş yükünüzün takip edilen sorgularını analiz eden ve bu sorguların performansını iyileştirmeye yönelik öneriler sağlayan bir özelliktir.
PostgreSQL için Azure Veritabanı esnek sunucu örneğinizde sorgu deposu işlevselliğinin üzerine kurulu yerleşik bir tekliftir. Otonom ayarlama, sorgu deposu tarafından izlenen iş yükünü analiz eder ve analiz edilen iş yükünün performansını geliştirmek için dizin veya tablo önerileri üretir. Yeni dizinler oluşturma, yinelenen veya kullanılmayan dizinleri ortadan kaldırma, istatistik içermeyen veya güncel olmayan tabloları analiz etme ya da şişirilmiş tabloları vakumlama önerileri üretebilir.
- Otonom ayarlama oturumu sırasında analiz edilen sorguları önemli ölçüde geliştirebileceğinden, hangi dizinlerin oluşturulmasının yararlı olduğunu belirleyin.
- Tam olarak yinelenen ve kaldırılabilir dizinleri belirleyin.
- Kaldırılacak adaylar olabilecek yapılandırılabilir bir dönemde kullanılmayan dizinleri belirleyin.
- Geçersiz olarak işaretlenen ve geçerli dizinlere dönüştürmek için yeniden dizinlenmesi gereken dizinleri belirleyin.
- Analiz edilmesi gereken geçerli istatistiklere sahip olmayan tabloları belirleyin.
- Vakumlanması gereken şişirilmiş tabloları tanımlayın .
Otonom ayarlama algoritmasının genel açıklaması
index_tuning.mode Sunucu parametresi olarak reportyapılandırıldığında ayarlama oturumları, sunucu parametresinde index_tuning.analysis_intervalyapılandırılan sıklıkta otomatik olarak başlatılır ve dakika cinsinden ifade edilir.
İlk aşamada ayarlama oturumu, üretebileceği önerilerin sistemin genel performansını önemli ölçüde etkileyebileceğini düşündüğü veritabanlarının listesini arar. Bunu yapmak için, yürütmeleri bu ayarlama oturumunun odaklandığı arama aralığı içinde yakalanan sorgu deposu tarafından kaydedilen tüm sorguları toplar. Arama aralığı şu anda ayarlama oturumunun başlangıç zamanından itibaren son index_tuning.analysis_interval dakikalara yayılıyor.
Sorgu deposunda kaydedilen ve çalışma zamanı istatistikleri sıfırlanmayan, kullanıcı tarafından başlatılan tüm sorgular için sistem bunları toplam yürütme süresine göre sıralar. Sürelerine göre dikkatini en öne çıkan sorgulara odaklar.
Aşağıdaki sorgular bu listenin dışında tutulur:
- Sistem tarafından başlatılan sorgular. (yani rol tarafından
azuresuyürütülen sorgular) - Herhangi bir sistem veritabanı (
azure_sys,template0,template1veazure_maintenance) bağlamında yürütülen sorgular.
Algoritma hedef veritabanları üzerinde yinelenir ve analiz edilen iş yüklerinin performansını geliştirebilecek olası dizinleri arar. Ayrıca, yinelenen olduğundan veya yapılandırılabilir bir süre için kullanılmadığından kaldırılabilen dizinleri arar. Ayrıca, güncel istatistiklerden yoksun olan veya şişirilmiş tabloları tanımlar.
CREATE INDEX önerileri
Analiz etmeye aday olarak tanımlanan her veritabanı için arama aralığı boyunca ve bu veritabanı bağlamında yürütülen tüm SELECT, UPDATE, INSERT ve DELETE sorguları dikkate alınır.
Sonuçta elde edilen sorgu kümesi toplam yürütme süresine göre sıralanır ve olası dizin önerileri için en üstte index_tuning.max_queries_per_database analiz edilir.
Olası öneriler, bu tür sorguların performansını iyileştirmeyi hedefler:
- Filtre içeren sorgular (where yan tümcesinde koşul içeren sorgular),
- Birden çok ilişkiyi birleştiren sorgular, birleşimlerin JOIN yan tümcesiyle ifade edildiği söz dizimini izlemeleri veya birleştirme koşullarının WHERE yan tümcesinde ifade edilip edilmediği.
- Filtreleri ve birleştirme koşullarını birleştiren sorgular.
- Gruplandırma içeren sorgular (GROUP BY yan tümcesine sahip sorgular).
- Filtreleri ve gruplandırmaları birleştiren sorgular.
- Sıralama içeren sorgular (ORDER BY yan tümcesine sahip sorgular).
- Filtreleri ve sıralamayı birleştiren sorgular.
Uyarı
Sistemin şu anda önerdiği tek dizin türü B-Tree'dir.
Sorgu bir tablonun bir sütununa başvuruda bulunuyorsa ve bu tabloda istatistik yoksa, yürütülmesini geliştirmek için dizin önerileri üretmez. Ancak, tabloyu analiz etmek için bir öneri oluşturur.
index_tuning.max_indexes_per_table ayarlama oturumu sırasında herhangi bir sayıda sorgu tarafından başvurulmuş tek bir tablo için tabloda zaten var olabilecek dizinler hariç, önerilebilen dizin sayısını belirtir.
index_tuning.max_index_count ayarlama oturumu sırasında analiz edilen herhangi bir veritabanının tüm tabloları için oluşturulan dizin önerilerinin sayısını belirtir.
Bir dizin önerisinin yayılabilmesi için, ayarlama altyapısının ile index_tuning.min_improvement_factorbelirtilen bir faktör tarafından analiz edilen iş yükündeki en az bir sorguyu geliştirdiğini tahmin etmesi gerekir.
Benzer şekilde, tüm dizin önerileri, ile index_tuning.max_regression_factorbelirtilen bir faktörün iş yükündeki tek bir sorguda regresyona neden olmadığından emin olmak için denetlenir.
Uyarı
index_tuning.min_improvement_factor ve index_tuning.max_regression_factor her ikisi de sorgu planlarının süresine veya yürütme sırasında kullandıkları kaynaklara değil maliyetine başvurur.
Önceki paragraflarda belirtilen tüm parametreler, varsayılan değerleri ve geçerli aralıkları yapılandırma seçeneklerinde açıklanmıştır.
Dizin oluşturma önerisiyle birlikte oluşturulan betik şu deseni izler:
CREATE INDEX CONCURRENTLY {indexName} ON {schema}.{table}({column_name}[, ...])
yan tümcesini CONCURRENTLYiçerir. Bu yan tümcenin etkileri hakkında daha fazla bilgi için CREATE INDEX için PostgreSQL resmi belgelerini ziyaret edin.
Otonom ayarlama, önerilen dizinlerin adlarını otomatik olarak oluşturur. Bu adlar genellikle "_" (alt çizgi) ile ayrılmış farklı anahtar sütunlarının adlarından ve sabit bir "_idx" soneki ile oluşur. Adın toplam uzunluğu PostgreSQL sınırlarını aşarsa veya mevcut ilişkilerle çakıştırılırsa ad biraz farklıdır. Kesilebilir ve adın sonuna bir sayı eklenebilir.
CREATE INDEX önerisinin etkisini hesaplama
Dizin önerisi oluşturmanın etkisi IndexSize (megabayt) ve QueryCostImprovement (yüzde) üzerinde ölçülür.
IndexSize, tablonun geçerli kardinalitesini ve önerilen dizin tarafından başvuruda bulunan sütunların boyutunu dikkate alarak dizinin tahmini boyutunu temsil eden tek bir değerdir.
QueryCostImprovement, bir dizi değerden oluşur ve burada her öğe, bu dizin mevcut olduğunda planının maliyetinin artacağı tahmin edilen her sorgu için planın maliyetindeki iyileştirmeyi temsil eder. Her öğe, sorgunun tanımlayıcısını (sorgulanmış) ve öneri uygulandığında planın maliyetinin artırıldığı yüzdeyi (boyutlu) gösterir.
DROP INDEX ve REINDEX önerileri
Aday olarak tanımlanan her veritabanı için yeni bir oturum başlatması gerekir ve CREATE INDEX önerileri aşaması tamamlandıktan sonra, aşağıdaki ölçütlere göre mevcut dizinlerin bırakılması veya yeniden dizinlenmesi önerilir:
- Başkalarının yineleneni olarak kabul edilirse bırakın.
- Yapılandırılabilir bir süre kullanılmadıysa bırakın.
- Geçersiz olarak işaretlenmiş dizinleri yeniden dizinle.
Yinelenen dizinleri bırakma
Yinelenen dizinleri bırakma önerileri: İlk olarak, hangi dizinlerin yinelenenleri olduğunu belirleyin.
Yinelemeler, dizine atfedilebilen farklı işlevlere ve bunların tahmini boyutlarına göre sıralanır.
Son olarak, başvuru liderinden daha düşük bir derecelendirmeye sahip tüm yinelemeleri bırakmanızı önerir ve her yinelemenin neden olduğu gibi sıralandığını açıklar.
İki dizinin yinelenen olarak kabul edilmesi için şunları yapmalıdır:
- Aynı tablo üzerinde oluşturulmalıdır.
- Tam olarak aynı türde bir dizin olmalıdır.
- Anahtar sütunlarını eşleştirin ve çok sütunlu dizin anahtarları için başvurulan sırayla eşleşin.
- Koşulunun ifade ağacını eşleştirin. Yalnızca kısmi dizinler için geçerlidir.
- Tüm nonsimple sütun başvurularının ifade ağacını eşleştirin. Yalnızca ifadelerde oluşturulan dizinler için geçerlidir.
- Anahtarda başvuruda bulunan her sütunun harmanlamasını eşleştirin.
Kullanılmayan dizinleri bırakma
Kullanılmayan dizinleri bırakma önerileri şu dizinleri tanımlar:
- En az
index_tuning.unused_min_periodgün boyunca kullanılmaz. - Dizinin oluşturulduğu tabloda en düşük (günlük ortalama) DLL sayısını
index_tuning.unused_dml_per_tablegösterin. - Dizinin oluşturulduğu tabloda en az (günlük ortalama) okuma sayısını
index_tuning.unused_reads_per_tablegösterin.
Geçersiz dizinleri yeniden dizine alma
Mevcut dizinleri yeniden dizine alma önerileri, geçersiz olarak işaretlenen dizinleri tanımlar. Dizinlerin neden ve ne zaman geçersiz olarak işaretleneceği hakkında daha fazla bilgi edinmek için PostgreSQL'de REINDEX resmi belgelerine bakın.
DROP INDEX önerisinin etkisini hesaplama
Bırakma dizini önerisinin etkisi iki boyut üzerinde ölçülür: Avantaj (yüzde) ve IndexSize (megabayt).
Avantaj, şimdilik yoksayılabilir tek bir değerdir.
IndexSize, tablonun geçerli kardinalitesini ve önerilen dizin tarafından başvuruda bulunan sütunların boyutunu dikkate alarak dizinin tahmini boyutunu temsil eden tek bir değerdir.
Tablo önerileri
Analiz etmeye aday olarak tanımlanan her veritabanı için tablo düzeyinde öneriler üretmeyi hedefleyen bir oturum başlatır. Bu öneriler, incelemiş sorguların eriştiği tablolarda ANALYZE veya VACUUM komutlarını çalıştırmanızı önerir; ayar motoru bu komutların çalıştırılmasının, iş yükünüzün performansını artırabileceğini düşünmektedir.
Tablo önerilerini analiz et
Bir tabloyu çözümlemeye yönelik öneriler, şu tabloları tanımlar:
- Bir sorguda referans alınırlar ve bu tablonun bazı sütunlarının belirtilen koşullarda (WHERE, JOIN, ORDER BY, GROUP BY) kullanılması ve aynı zamanda aşağıdaki iki koşuldan birini de karşılaması gerekir:
- Daha önce hiç analiz edilmedi.
- Bir noktada analiz edildi, ancak artık istatistik yok (genellikle istatistiğin diskte kalıcı hale getirilmeden önce sunucunun kilitlenmesi nedeniyle).
VACUUM tablosu önerileri
Tabloyu vakumlama önerileri, şişirilmiş tabloları tanımlar. Bu öneriler yalnızca iş yükü analiz edilirken sunucu düzeyinde autovacuum_enabled'nin off olarak ayarlanmadığı durumlarda oluşturulur.
Otonom ayarlamayı yapılandırma
Otonom ayarlama etkinleştirilebilir, devre dışı bırakılabilir ve davranışını denetleyebilen bir dizi parametre aracılığıyla yapılandırılabilir.
Otonom ayarlama etkinleştirildiğinde, sunucu parametresinde index_tuning.analysis_interval yapılandırılmış bir sıklık ile (varsayılan olarak 720 dakika veya 12 saat) uyanır ve bu süre boyunca sorgu deposu tarafından kaydedilen iş yükünü analiz etmeye başlar.
değerini index_tuning.analysis_intervaldeğiştirirseniz değerinin yalnızca bir sonraki zamanlanmış yürütme tamamlandıktan sonra gözlemlendiğine dikkat edin. Bu nedenle, örneğin, varsayılan değeri index_tuning.analysis_interval 720 dakika olduğundan, otonom ayarlamayı bir gün saat 10:00'da etkinleştirirseniz, ilk yürütme aynı gün saat 22:00'de başlayacak şekilde zamanlanır. 10:00 ile 22:00 arasında index_tuning.analysis_interval değerinde yaptığınız değişiklikler ilk zamanlamayı etkilemez. Yalnızca zamanlanmış çalıştırma tamamlandığında, için ayarlanan index_tuning.analysis_interval geçerli değeri okur ve bu değere göre bir sonraki yürütmeyi zamanlar.
Otonom ayarlama parametrelerini yapılandırmak için aşağıdaki seçenekler kullanılabilir:
| Parameter | Açıklama | Varsayılan | Aralık | Units |
|---|---|---|---|---|
index_tuning.analysis_interval |
index_tuning.mode olarak ayarlandığında her dizin iyileştirme oturumunun tetiklendiği sıklığı ayarlar REPORT. |
720 |
60 - 10080 |
minutes |
index_tuning.max_columns_per_index |
Önerilen dizinler için dizin anahtarının parçası olabilecek en fazla sütun sayısı. | 2 |
1 - 10 |
|
index_tuning.max_index_count |
Bir iyileştirme oturumu sırasında her veritabanı için önerilen en fazla dizin sayısı. | 10 |
1 - 25 |
|
index_tuning.max_indexes_per_table |
Her tablo için önerilebilen en fazla dizin sayısı. | 10 |
1 - 25 |
|
index_tuning.max_queries_per_database |
Dizinlerin önerilebileceği veritabanı başına en yavaş sorgu sayısı. | 25 |
5 - 100 |
|
index_tuning.max_regression_factor |
Bir iyileştirme oturumu sırasında analiz edilen sorgulardan herhangi birinde önerilen dizin tarafından sunulan kabul edilebilir regresyon. | 0.1 |
0.05 - 0.2 |
Yüzde |
index_tuning.max_total_size_factor |
Belirli bir veritabanı için önerilen tüm dizinlerin kullanabileceği toplam disk alanının yüzdesi cinsinden maksimum toplam boyut. | 0.1 |
0 - 1 |
Yüzde |
index_tuning.min_improvement_factor |
Önerilen dizinin bir iyileştirme oturumu sırasında analiz edilen sorgulardan en az birine sağlaması gereken maliyet iyileştirmesi. | 0.2 |
0 - 20 |
Yüzde |
index_tuning.mode |
Dizin iyileştirmeyi devre dışı (OFF) veya yalnızca öneri yaymak için etkin olarak yapılandırılır. veya pg_qs.query_capture_modeolarak ayarlanarak TOP sorgu deposunın etkinleştirilmesini ALL gerektirir. |
OFF |
OFF, REPORT |
|
index_tuning.unused_dml_per_table |
Tabloyu etkileyen günlük ortalama DML işlemlerinin en az sayısıdır, bu nedenle kullanılmayan dizinleri bırakma olarak kabul edilir. | 1000 |
0 - 9999999 |
|
index_tuning.unused_min_period |
Sistem istatistiklerine göre dizinin kullanılmadığı en az gün sayısı, dolayısıyla düşüş olarak kabul edilir. | 35 |
30 - 70 |
|
index_tuning.unused_reads_per_table |
Kullanılmayan dizinlerinin düşüş olarak kabul edilmesi için tabloyu etkileyen günlük ortalama okuma işlemlerinin en az sayısı. | 1000 |
0 - 9999999 |
CLI komutlarını az postgres flexible-server autonomous-tuning show-settings kullanırsanız ve az postgres flexible-server autonomous-tuning set-settings otonom ayarlama ayarlarından herhangi birini görüntüler veya değiştirirseniz, parametresi için --name bağımsız değişken olarak kabul edilen değerler, önceki tablonun Parametre sütununda gösterilen değerlerdir, ancak ön eki index_tuning.dahil değildir.
Otonom ayarlama tarafından üretilen bilgiler
Otonom ayarlama önerilerini kullanma, otonom ayarlama tarafından oluşturulan önerilerin nasıl alınıp kullanılacağını ayrıntılı olarak açıklar.
Sınırlamalar ve desteklenebilirlik
Aşağıda, otonom ayarlamaya yönelik sınırlamaların ve desteklenebilirlik kapsamının listesi yer alır.
Önerilerin otomatik olarak silinmesi
Öneriler, son üretildikten 35 gün sonra otomatik olarak silinir. Bu otomatik silme mekanizmasının çalışması için otonom ayarlamanın etkinleştirilmesi gerekir.
Hypopg uzantısına bağımlılık
CREATE INDEX önerileri üretmek için otonom ayarlama için hypopg uzantısını kullanır.
Bir ayar oturumu başladığında uzantı zaten mevcutsa, oluşturulduğu şemada kullanılır. Ayarlama oturumu tamamlandığında eklenti kaldırılmaz. Bu kuralın bir istisnası, uzantının şemada pg_catalog oluşturulmuş olmasıdır. Bu durumda, otomatik ayarlama uzantıyı devre dışı bırakır.
Uzantı ilk etapta mevcut değilse veya pg_catalog şeması içinde oluşturulduğu için bıraktıysak, otonom ayarlama bu uzantıyı ms_temp_recommendations709253 adlı bir şema altında oluşturur ve ayarlama oturumu başarıyla tamamlandığında uzantıyı sonlandırır ve şemayı siler.
Rolün azure_pg_admin üyesi olan kullanıcılar, otonom ayarlama özelliği tarafından oluşturulmuş olsa bile hypopg uzantısını istedikleri zaman kaldırabilir. Ancak, otonom bir ayarlama oturumu çalışırken bu ayarı bırakmak bu oturumun başarısız olmasına neden olabilir ve herhangi bir öneri üretmez.
Desteklenen işlem katmanları ve SKU'lar
Otonom ayarlama şu anda kullanılabilir olan tüm katmanlarda desteklenir: SeriLeştirilebilir, Genel Amaçlı ve Bellek için İyileştirilmiş ve en az 4 sanal çekirdek içeren şu anda desteklenen herhangi bir işlem SKU'su .
PostgreSQL'in desteklenen sürümleri
Otonom ayarlama, PostgreSQL için Azure Veritabanı esnek sunucu örneklerinin 12. veya daha büyüksürümlerinde desteklenir.
search_path kullanımı
Otonom ayarlama, query_store.qs_view sütununda kalıcı olan search_path değerini tüketir, böylece her sorgu analiz edildiğinde, sorgu ilk yürütüldüğünde ayarlanmış olan search_path değeri, olası önerileri analiz etmek için ayarlanan değer olur.
Parametreli sorgular
PREPARE ile oluşturulan veya genişletilmiş sorgu protokolü kullanılarak oluşturulan parametreli sorgular ayrıştırılır ve bunlar üzerinde dizin önerileri üretmek için analiz edilir.
Parametreli sorguların analizi için otonom ayarlama, sorgu deposu sorgunun yürütülmesini yakaladığında pg_qs.parameters_capture_mode olarak ayarlanmasını capture_first_sample gerektirir. Ayrıca, sorgu yürütülürken parametrelerin sorgu deposu tarafından doğru bir şekilde yakalanmasını gerektirir. Başka bir deyişle, analiz edilen sorgu için query_store.qs_view öğesinin sütunu parameters_capture_status olarak succeededayarlanmalıdır.
Salt okunur mod ve okuma amaçlı çoğaltmalar
Otonom ayarlama, sorgu deposunun veritabanında yerel olarak saklanan ve okuma amaçlı çoğaltmalarda veya bir örnek salt okunur modda olduğunda desteklenmeyen verilere dayandığından, bu nedenle okuma amaçlı çoğaltmalarda veya salt okunur modda olan örneklerde desteklemiyoruz.
Okuma amaçlı çoğaltmada görülen öneriler birincil çoğaltmada yalnızca birincil çoğaltmada yürütülen iş yükü analiz edildikten sonra üretildi.
İşlem ölçeğini azaltma
Otonom ayarlama bir sunucuda etkinse ve bu sunucunun işlem ölçeğini gereken sanal çekirdek sayısı alt sınırdan daha az olacak şekilde azaltıyorsanız, özellik etkin kalır. Özellik 4'ten az sanal çekirdek içeren sunucularda desteklenmediğinden, iş yükünü analiz etmek ve öneriler üretmek için çalışmaz. İşlemin ölçeği azaltıldığında, index_tuning.modeON olarak ayarlansa bile çalışmaz. Sunucu en düşük gereksinimleri karşılamasa da, tüm index_tuning.* sunucu parametrelerine erişilemez. Sunucunuzun ölçeğini, minimum gereksinimleri karşılayan bir hesaba geri yükselttiğinizde, index_tuning.mode ölçeklendirmeyi gereksinimleri karşılamayan bir hesaba indirmeden önce ayarlanan değerle yapılandırılır.
Yüksek kullanılabilirlik ve okuma amaçlı çoğaltmalar
Sunucunuzda yapılandırılmış yüksek kullanılabilirlik veya okuma amaçlı çoğaltmalarınız varsa, önerilen dizinleri uygularken birincil sunucuda yazma yoğunluklu iş yükleri üretmenin etkilerini unutmayın. Boyutu büyük olduğu tahmin edilen dizinler oluştururken özellikle dikkatli olun.
Otonom ayarlamanın belirli sorgular için dizin önerileri oluşturmama nedenleri
Aşağıda, otonom ayarlamanın CREATE INDEX önerileri oluşturmadığı sorgu türlerinin listesi yer alır. Sorgular şunlardır:
- Otonom ayarlama motoru analiz aşamasında EXPLAIN çıkışını almaya çalıştığında bir hata ile karşılaşıldı.
- pg_statistic sistem kataloğunda içerikleri hakkında istatistikler olmayan başvuru tabloları. Ayarlama altyapısının gelecekte bu sorguları dikkate alabilmesi için bu tablolarda ANALYZE komutunu çalıştırın.
- Soru metninin sorgu deposunda kesilmesini sağlayın. Sorgu metninin uzunluğu pg_qs.max_query_text_length içinde yapılandırılan değeri aştığında bu durum geçerlidir.
- Çözümleme gerçekleşmeden önce bırakılan veya yeniden adlandırılan başvuru nesneleri. Bu sorgular yine de söz dizimsel olarak geçerli olabilir, ancaksemantolojik olarak geçerli olmayabilir.
- Geçici tablolara veya geçici tablolardaki dizinlere erişim sağlayın.
- Görünümlere veya maddesel görünümlere erişin.
- Bölümlenmiş tablolara erişin.
- Yardımcı ifadeler olarak tanımlanır. Yardımcı program deyimleri veya yardımcı program komutları temelde SELECT, INSERT, UPDATE, DELETE veya MERGE olarak kabul edilmeyen tüm deyimler ve bunlardan birini içeren bazı komutlardır.
- Analiz edilen veritabanı ve süre için en yavaş index_tuning.max_queries_per_database arasında yer almıyor.
- Bu sorgulardan hiçbiri sunucu düzeyinde en yavaş olarak tanımlanmadığında belirli bir veritabanı bağlamında çalıştırıldı.