Bir MaxCompute SQL işi beklenenden yavaş çalıştığında, bunun nedeni genellikle görev sayısı ile kullanılabilir kaynaklar arasındaki uyumsuzluktur. split_size ipucu, MaxCompute'ün tablo verilerini paralel işlemek için nasıl parçalara böleceğini belirler. Her parça bir harita (map) görevine dönüşür; bu nedenle bölme boyutu doğrudan işin eşzamanlılığını belirler. Görev sayısını mevcut kaynaklarla dengelemek için bu değeri ayarlayın: Daha küçük bölmeler daha yüksek paralellik için daha fazla harita görevi oluştururken, daha büyük bölmeler zamanlama baskısını azaltmak amacıyla görev sayısını düşürür.
SELECT ...
FROM <table_name> /*+split_size(<value_in_mb>)*/
...
Varsayılan bölme boyutu 256 MB'tır.
Nasıl çalışır
MaxCompute bir tablonun verilerini okur ve belirtilen boyutta parçalara böler. Harita görevlerinin sayısı yaklaşık olarak şöyledir:
map tasks = table data size / split_size
Örneğin, split_size(256) kullanılan 10 GB'lık bir tablo yaklaşık 40 harita görevi oluşturur. Bu değer split_size(64) olarak düşürülürse yaklaşık 160 harita görevi oluşturulur; bu da paralelliği dört katına çıkarır.
MaxCompute çoğu tablo için split_size ipucunu dikkate alır. Bunun tek istisnası şudur: Sorgu iyileştirici, optimizasyon amacıyla kümeleştirilmiş bir tablonun paketleme özelliklerini kullanıyorsa o tablo için ipucunu yok sayar.
Bölme boyutunu ayarlama
Görev sayısı ile kullanılabilir kaynaklar arasındaki uyumsuzluk, yavaş SQL işlerinin en yaygın nedenlerinden biridir:
Mevcut kaynaklara göre çok fazla görev -- Görevler yürütme yuvaları için kuyruğa girer ve zamanlama ek yükü artar. İş, hesaplama yapmaktan çok beklemeyle geçer.
Mevcut kaynaklara göre çok az görev -- Kaynaklar boşta kalırken az sayıda görev büyük veri parçalarını sırayla işler. İş olması gerekenden daha uzun sürer.
|
|
|
|
|
|
|
|
|
|
|
|
En iyi performans için split_size değerini 256 MB'ın katları olacak şekilde (örneğin 256, 512, 1024) ayarlayın.
Örnekler
Tüm örneklerde ipucu, FROM yan tümcesinde tablo adının hemen ardından yer alır.
src okunurken bölme boyutunu 1 MB olarak ayarlayın. src tablosundaki veriler 1 MB'lık parçalara bölünür ve her parça ayrı bir harita görevi tarafından işlenir. 10 GB'lık bir tablo için bu işlem, varsayılan 40 görev yerine yaklaşık 10.240 harita görevi oluşturur:
SELECT a.key
FROM src a /*+split_size(1)*/
JOIN src2 b ON a.key = b.key;
Büyük bir tabloda görev sayısını azaltmak için bölme boyutunu 512 MB'a çıkarın. 10 GB'lık bir tablo için bu işlem görev sayısını 40'tan yaklaşık 20'ye düşürür:
SELECT *
FROM large_table /*+split_size(512)*/
WHERE dt = '2024-01-01';
Kümeleştirilmiş tablolar ve birden fazla ipucu ile davranış
Kümeleştirilmiş tablolar: Sorgu iyileştirici, optimizasyon amacıyla tablonun paketleme özelliklerini kullanıyorsa kümeleştirilmiş bir tablo için
split_sizeipucunu yok sayar.-
Aynı tabloda birden fazla ipucu: Bir sorgu aynı tabloyu farklı
split_sizeipuçlarıyla birden fazla kez okursa MaxCompute en küçük değeri kullanır. Örneğin:Aynı tabloda
split_size(1)vesplit_size(10)-- MaxCompute1değerini kullanır.Bir başvuruda
split_size(1)ve diğerinde ipucu yok -- MaxCompute1değerini kullanır (256 MB'lık varsayılan değeri değil).
Başvuru
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|