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.
ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Esnek Sunucu
Dizin ayarlama, PostgreSQL için Azure Veritabanı esnek sunucunuzda izlenen sorguları analiz ederek ve dizin önerileri sağlayarak iş yükünüzün performansını otomatik olarak geliştiren bir özelliktir.
PostgreSQL için Azure Veritabanı esnek sunucunuzda yerleşik olan ve sorgu deposu işlevselliğini kullanarak performansı izleyen bir özelliktir. Dizin ayarlama, sorgu deposu tarafından izlenen iş yükünü analiz eder ve analiz edilen iş yükünün performansını artırmak veya yinelenen veya kullanılmayan dizinleri bırakmak için dizin önerileri üretir.
- Dizin ayarlama oturumu sırasında analiz edilen sorguları önemli ölçüde geliştirebilecekleri için hangi dizinlerin oluşturulmasının yararlı olduğunu belirleyin.
- Varoluşlarının ve bakımlarının sistemin genel performansı üzerindeki performansını azaltmak için tam yineleme olan ve ortadan kaldırılabilir dizinleri belirleyin.
- Kaldırılacak adaylar olabilecek yapılandırılabilir bir dönemde kullanılmayan dizinleri belirleyin.
Dizin ayarlama algoritmasının genel açıklaması
index_tuning.mode
Sunucu parametresi olarak report
yapılandırıldığında ayarlama oturumları, sunucu parametresinde index_tuning.analysis_interval
yapı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
azuresu
yürütülen sorgular) - Herhangi bir sistem veritabanı (
azure_sys
,template0
,template1
veazure_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 olarak tanımlandıkları veya yapılandırılabilir bir süre için kullanılmadıkları için kaldırılabilen dizinleri arar.
CREATE INDEX önerileri
Dizin önerileri üretmek için 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.
Not
Sistemin şu anda önerdiği tek dizin türü B-Tree türündeki dizinlerdir.
Sorgu tablonun bir sütununa başvuruda bulunuyorsa ve bu tabloda istatistik yoksa, sorgunun tamamını atlar ve yürütmesini geliştirmek için dizin önerileri üretmez.
İstatistikleri toplamak için gereken analiz, ANALYZE komutu kullanılarak el ile veya otomatik vakum daemon'ı tarafından otomatik olarak tetiklenebilir.
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_factor
belirtilen 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_factor
belirtilen bir faktörün iş yükündeki tek bir sorguda regresyona neden olmadığından emin olmak için denetlenir.
Not
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 concurrently
içerir. Bu yan tümcenin etkileri hakkında daha fazla bilgi için CREATE INDEX için PostgreSQL resmi belgelerini ziyaret edin.
Dizin 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
Dizin ayarlama işlevinin belirlendiği 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_period
gü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_table
gösterin. - Dizinin oluşturulduğu tabloda en az (günlük ortalama) okuma sayısını
index_tuning.unused_reads_per_table
gö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.
Dizin ayarlamayı yapılandırma
Dizin ayarlama etkinleştirilebilir, devre dışı bırakılabilir ve davranışını denetleyebilen bir dizi parametre aracılığıyla yapılandırılabilir.
Dizin 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_interval
değiştirirseniz değerinin yalnızca bir sonraki zamanlanmış yürütme tamamlandıktan sonra gözlemlendiğine dikkat edin. Bu nedenle, örneğin, dizin ayarlamayı bir gün saat 10:00'da etkinleştirirseniz, varsayılan değeri index_tuning.analysis_interval
720 dakika olduğundan, ilk yürütme aynı gün saat 22:00'de başlayacak şekilde zamanlanır. Saat 10:00 ile 22:00 arasında değerinde index_tuning.analysis_interval
yaptığınız değişiklikler bu 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.
Dizin ayarlama parametrelerini yapılandırmak için aşağıdaki seçenekler kullanılabilir:
Parametre | Açıklama | Varsayılan | Aralık | Birimler |
---|---|---|---|---|
index_tuning.analysis_interval |
index_tuning.mode olarak ayarlandığında her dizin iyileştirme oturumunun tetiklendiği sıklığı ayarlar REPORT . |
720 |
60 - 10080 |
dakika |
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_mode olarak 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 index-tuning show-settings
ve az postgres flexible-server index-tuning set-settings
kullanarak dizin ayarlama ayarlarından herhangi birini görüntüler veya değiştirirseniz, --name
parametresi için kabul edilen değerler, önceki tablonun Parametre sütununda gösterilenlerdir, ancak index_tuning.
öneki eklenmeden kullanılır.
Dizin ayarlama tarafından üretilen bilgiler
Dizin ayarlama tarafından oluşturulan önerileri okuma, yorumlama ve kullanma, dizin 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 dizin 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 dizin ayarlamanın etkinleştirilmesi gerekir.
Hypopg uzantısına bağımlılık
DIZIN ayarlamanın CREATE INDEX önerileri üretmesi için hypopg uzantısını kullanır.
Bir ayarlama oturumu başladığında uzantı zaten varsa, oluşturulduğu şemada kullanılır. Ayarlama oturumu tamamlandığında uzantı bırakılmaz. Uzantının şemada pg_catalog
oluşturulması buna bir özel durumdur. Bu durumda, dizin ayarlama uzantıyı bırakır.
Uzantı ilk etapta mevcut değilse veya şemada pg_catalog
oluşturulduğu için bıraktıysak dizin ayarlama, uzantıyı adlı ms_temp_recommendations709253
bir şema altında oluşturur ve ayarlama oturumu başarıyla tamamlandığında uzantıyı bırakır ve şemayı kaldırır.
Rolün azure_pg_admin
üyesi olan kullanıcılar, dizin ayarlama özelliği tarafından oluşturulduğunda bile hipopg uzantısını herhangi bir zamanda bırakabilir. Ancak dizin 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
Dizin 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
Dizin ayarlama, PostgreSQL için Azure Veritabanı Esnek Sunucu'nun 12. veya daha büyük sürümlerindedesteklenir.
search_path kullanımı
Dizin ayarlama, query_store.qs_view sütununda search_path
kalıcı olan değeri tüketir, böylece her sorgu çözümlendiğinde, sorgu ilk olarak yürütülürken ayarlanan değerin aynı değerisearch_path
, olası önerileri analiz etmek için ayarlandığı değerdir.
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 dizin ayarlama, sorgu deposu sorgunun yürütülmesini yakaladığında pg_qs.parameters_capture_modecapture_first_sample
. 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 succeeded
ayarlanmalıdır.
Salt okunur mod ve okuma amaçlı çoğaltmalar
Dizin ayarlama, okuma amaçlı çoğaltmalarda desteklenmeyen veya bir örnek salt okunur moddayken sorgu deposuna bağlı olduğundan, bunu okuma amaçlı çoğaltmalarda veya salt okunur modda olan örneklerde desteklemeyiz.
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
Bir sunucuda dizin ayarlama etkinleştirildiyse ve bu sunucunun işlem ölçeğini gerekli sanal çekirdek sayısı en 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.mode
ON
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 en düşük gereksinimleri karşılayan bir işlem olarak her artırdığınızda, index_tuning.mode
ölçeğini gereksinimleri karşılamayan bir işlem olarak azaltmadan ö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.
İlgili içerik
- Sorgu deposu.
- Dizin ayarlamayı yapılandırın.
- Dizin önerilerini kullanın.