İşlem hattı yürütme motoru, eski yürütme motorunun yerine geçmek üzere tasarlanmış ApsaraDB for SelectDB'nin yeni bir temel özelliğidir. Karma iş yükü ortamlarında eski volkan modeli motoru, çok çekirdekli CPU'ların kapasitesini tam olarak kullanamaz; iş parçacığı havuzu tükenmesi sorununa yol açar ve büyük sorguların küçükleri engellemesine neden olur. İşlem hattı yürütme motoru, bu eski motorun yerini alır. Veriye dayalı, itme tabanlı mimarisi sayesinde iş parçacığı şişkinliğini ortadan kaldırır ve eşzamanlı sorgular arasındaki kaynak rekabetini azaltır.
Tasarım ayrıntıları için bkz. Support Pipeline Exec Engine.
Nasıl çalışır?
Eski SQL yürütme motoru, çok çekirdekli ortamlarda üç temel soruna sahip olan volkan modeline dayanır:
Elle paralellik ayarı gerekir. Motor, çok çekirdekli CPU kapasitesini otomatik olarak kullanamaz. Sorgu performansını artırmak için paralellik derecesini manuel olarak ayarlamanız gerekir. Bu ayarı üretim ortamında doğru yapmak zordur.
İş parçacığı havuzu tükenmesi ve kilitlenmeler. Her sorgu örneği, iş parçacığı havuzunda bir iş parçacığı kaplar. Havuz kapasitesine ulaştığında sorgu motoru sözde bir kilitlenme durumuna girer ve yeni sorgulara yanıt vermeyi durdurur. Mantıksal kilitlenmeler de oluşabilir. Örneğin, tüm iş parçacıkları bir örnekteki probe görevini yürütüyorsa kilitlenme meydana gelebilir. Normal yük altında bile bloklayan operatörler, çalıştırılabilir örneklere yeniden atanamayan iş parçacıklarını tutarak genel CPU kullanımını düşük seviyede bırakır.
Yüksek iş parçacığı değiştirme ek yükü. Bloklayan operatörler işletim sistemi iş parçacığı zamanlayıcısına bağımlıdır. Karma iş yükü senaryolarında bu durum, aktarım hızını düşüren önemli bir bağlam değiştirme ek yüküne neden olur.
İşlem hattı yürütme motoru, bu sorunları üç mimari değişiklikle çözer:

Çekmeden itmeye yürütme. Sorgular, geleneksel çekme modeli yerine itme modunda çalışır. Veriler, sonuçları çekmek için bekleyen iş parçacıkları olmadan işlem hatları üzerinden aşağı akışa doğru ilerler.
Bloklamadan asenkron işlemlere. Daha önce iş parçacıklarını engelleyen operatörler, asenkron işlemler olarak yeniden tasarlanmıştır. Bu yaklaşım, iş parçacığı değiştirme ek yükünü ortadan kaldırır ve CPU kullanımını yüksek seviyede tutar.
Sınırlı iş parçacığı sayısı ve zaman dilimi zamanlaması. Motor, yürütme iş parçacığı sayısını sınırlar. Eşzamanlı işlem hatları arasında arbitraj yapmak için zaman dilimi değiştirmeyi kullanır. Büyük sorgular artık iş parçacıklarını tekelleştirerek küçük sorguları engelleyemez.
İşlem hattı yürütme motorunu yapılandırma
Belirli bir sorgu oturumu için İşlem hattı yürütme motorunun nasıl çalışacağını kontrol etmek amacıyla oturum değişkenlerini ayarlayın.
Oturum değişkenleri
| Değişken | Varsayılan | Açıklama |
|---|---|---|
enable_pipeline_engine |
true |
Arka uç (BE) düğümlerinde İşlem hattı yürütme motorunu etkinleştirir. true olarak ayarlandığında BE düğümü, sorgu yürütme için İşlem hattı yürütme motorunu kullanır. |
parallel_pipeline_task_num |
0 |
SQL sorgusu başına eşzamanlı olarak çalıştırılacak işlem hattı görevi sayısı. 0 olarak ayarlandığında ApsaraDB for SelectDB, bu değeri BE düğümündeki CPU çekirdek sayısının yarısına otomatik olarak ayarlar. |
max_instance_num |
64 |
ApsaraDB for SelectDB tarafından otomatik olarak ayarlanan maksimum eşzamanlılık sayısı. Varsayılan olarak bu oturum değişkeni 64 değerine ayarlanır. |
İşlem hattı yürütmeyi etkinleştirme
İşlem hattı yürütme motoru varsayılan olarak etkindir. Açıkça etkinleştirmek için:
SET enable_pipeline_engine = true;
İşlem hattı eşzamanlılığını ayarlama
Varsayılan olarak ApsaraDB for SelectDB, işlem hattı görevi eşzamanlılığını CPU çekirdek sayısının yarısına otomatik olarak ayarlar (parallel_pipeline_task_num = 0). Bu ayarı geçersiz kılmak için:
SET parallel_pipeline_task_num = <n>;
parallel_pipeline_task_numdeğeri0olduğunda otomatik hesaplanan eşzamanlılık,max_instance_num(varsayılan:64) ile sınırlanır. Otomatik eşzamanlılık üzerindeki üst sınırı değiştirmek içinmax_instance_numdeğerini ayarlayabilirsiniz.