Nereids, ApsaraDB for SelectDB içindeki sorgu iyileştiricisidir. Çok tablolu birleştirmeler ve derin iç içe geçmiş alt sorgular gibi karmaşık analitik sorgular için eski iyileştiricinin yerini alır. Manuel SQL yeniden yazımına gerek kalmadan, elle ayarlanmış eski bir plana kıyasla benzer performans sunar.
Nasıl çalışır
Nereids, RBO ve CBO optimizasyon noktalarını kural biçiminde sunar. Her kural, sorgu planının şeklini tanımlayan bir dizi desen sağlar. Bu sayede Nereids, çok katmanlı iç içe geçmiş alt sorgular dahil olmak üzere karmaşık sorgu yapılarını eşleştirip yeniden yazabilir.
CBO, Cascades çerçevesi temel alınarak geliştirilmiştir. Birden çok boyutta maliyet modeliyle birlikte çeşitli veri istatistiklerini kullanır; bu da onu çok tablolu birleştirme sorguları için son derece uygun hale getirir.
Tüm optimizasyon kuralları mantıksal yürütme planı ağacı üzerinde çalışır. Sorgunun (eski iyileştiricide kullanılan düz yapı yerine) bir ağaç olarak temsil edilmesi, alt sorguların tek bir birleşik geçişte işlenmesini sağlar. Bu yaklaşım, birden çok kuralın alt sorguları bağımsız şekilde işlemesinden kaynaklanan mantıksal hataları ortadan kaldırır.
Her biri 16 CPU çekirdeği ve 64 GB belleğe sahip üç BE düğümü kullanılarak yapılan TPC-H SF100 kıyaslamasında, sorgu yürütmeden önce istatistiklerin toplanmasıyla Nereids, orijinal SQL'de eski iyileştiriciden çok daha iyi performans göstermiş; manuel olarak optimize edilmiş SQL'de ise eski iyileştiriciyle benzer performansa ulaşmıştır.
Ön koşullar
Nereids ile sorgu çalıştırmadan önce tablolar üzerinde istatistik toplayın. CBO için istatistik toplamak amacıyla her tabloda ANALYZE ifadesini çalıştırın. Toplama stratejileri ve daha fazla bilgi için bkz. İstatistikler.
Nereids varsayılan olarak etkindir. Ek kurulum gerekmez.
Nereids'i etkinleştirin veya devre dışı bırakın
Nereids davranışını denetlemek için oturum değişkenlerini kullanın:
| Değişken | Açıklama |
|---|---|
enable_nereids_planner |
Geçerli oturum için Nereids'i etkinleştirir. Varsayılan olarak etkindir. |
enable_fallback_to_original_planner |
Nereids'te bir sorun oluştuğunda eski iyileştiriciye geri döner. |
Bir oturum için Nereids'i devre dışı bırakmak ve eski iyileştiriciyi zorlamak için:
SET enable_nereids_planner = false;
Nereids'i yeniden etkinleştirmek için:
SET enable_nereids_planner = true;
Eski iyileştiriciye otomatik geri dönüşü etkinleştirmek için:
SET enable_fallback_to_original_planner = true;
enable_fallback_to_original_planner etkinleştirildiğinde, Nereids sorunla karşılaşan sorguları otomatik olarak eski iyileştiriciye yönlendirir. Hangi iyileştiricinin her sorguyu çalıştıracağı üzerinde açık denetim istiyorsanız geri dönüşü devre dışı bırakın.
Sınırlamalar
enable_fallback_to_original_planner etkinleştirildiğinde, bu sınırlamalara takılan sorgular otomatik olarak eski iyileştiriciye yönlendirilir.
Yarı yapılandırılmış veri türleri
JSON, ARRAY, MAP veya STRUCT türünde sütunlar ya da işlev dönüş değerleri içeren sorgular Nereids tarafından işlenemez.
Geçici çözüm: enable_fallback_to_original_planner = true ayarını koruyun. Eski iyileştirici bu sorguları otomatik olarak işler.
DML ifadeleri
Nereids yalnızca INSERT INTO SELECT, UPDATE ve DELETE ifadelerini destekler. Diğer DML kalıpları desteklenmez.
Geçici çözüm: enable_fallback_to_original_planner = true ayarlayarak eski iyileştiriciyi kullanın.
Filtre koşulları içeren materialize görünümler
Nereids, filtre koşulları tanımlanmış materialize görünümleri kullanacak şekilde sorguları yeniden yazmaz.
Geçici çözüm: Filtre koşulu olmayan materialize görünümleri kullanın veya temel tablolara doğrudan sorgu gönderin.
İşlev takma adları
İşlev takma adları Nereids tarafından tanınmaz.
Geçici çözüm: Sorguda işlev takma adlarını tam işlev ifadeleriyle değiştirin.
Kullanıcı tanımlı işlevler
Java'da uygulanan veya Hadoop Distributed File System (HDFS) üzerinden yüklenen kullanıcı tanımlı işlevler (UDF'ler) desteklenmez.
Geçici çözüm: enable_fallback_to_original_planner = true ayarını koruyun. Bu sorgular otomatik olarak eski iyileştiriciye geri döner.
Yüksek eşzamanlı nokta sorguları
Nereids analitik iş yükleri için optimize edilmiştir. Yüksek eşzamanlı nokta sorguları eski iyileştiriciyi kullanmalıdır.
Geçici çözüm: Yüksek eşzamanlı nokta sorguları çalıştıran oturumlarda enable_nereids_planner = false ayarlayın.
Bilinen sorunlar
Nereids, sorguları hızlandırmak için bölüm önbelleğini kullanamaz.
Sonraki adımlar
İstatistikler — CBO için tablo istatistiklerini toplayın ve yönetin.