BUILD işleri, yeni veri yazılan bölümleri yeniden oluşturmak için kullanılır. Bu işlem okuma performansını iyileştirir. Yeniden oluşturma sürecinde sistem dizinler oluşturur, gereksiz verileri temizler ve DDL deyimlerini zaman uyumsuz olarak çalıştırır.
Genel bakış
Bir BUILD işi sırasında sistem, gerçek zamanlı olarak yazılan verileri ve bu verileri içeren geçmiş bölümleri birleştirir, dizinler oluşturur ve DDL deyimlerini zaman uyumsuz olarak çalıştırır. Bir bölümdeki veriler üzerinde INSERT, UPDATE veya DELETE deyimleri çalıştırıldıktan sonra bölümü yeniden oluşturmak için bir BUILD işi başlatabilirsiniz. BUILD işleri, verilerinde değişiklik olmayan bölümleri yeniden oluşturmaz.
BUILD işleri tablo düzeyinde planlanır. Farklı tabloların BUILD işleri paralel olarak çalışabilir. Bir tabloda BUILD işi başladıktan sonra iş, parça düzeyinde görevlere ayrılır. Bir parçanın üç çoğaltmasının her biri bir görevi yürütür. Tüm görevler tamamlandığında BUILD işi biter.
DELETE veya REPLACE deyimlerini çalıştırdığınızda veriler silinecek olarak işaretlenir ve arka plandaki BUILD işleri tarafından zaman uyumsuz olarak temizlenir. Çok sayıda DELETE veya REPLACE deyimi çalıştırdıktan sonra BUILD işleri tamamlanmamışsa Depolamaya Genel Bakış'ta görüntülenen tablo satırı sayısı, SELECT COUNT(*) tarafından döndürülen sonuçtan büyük olur: Depolamaya Genel Bakış'ta görüntülenen tablo satırı sayısı, fiziksel satırları sayan ve henüz temizlenmemiş olsa da silinecek olarak işaretlenen satırları içeren information_schema.kepler_partitions içindeki row_count alanından alınır. SELECT COUNT(*) mantıksal olarak geçerli satır sayısını döndürür ve silinecek olarak işaretlenen satırları hariç tutar. İki sayının tutarlı hale gelmesi için silinecek olarak işaretlenen verileri temizlemek üzere BUILD TABLE komutunu manuel olarak çalıştırabilirsiniz.
Kullanım notları
Bir BUILD işi devam ederken iş tamamlanana kadar tablolara veri eklemek için
INSERT OVERWRITE SELECTdeyimi çalıştıramazsınız. Veri eklemek istiyorsanızINSERT INTOdeyimini kullanabilirsiniz.Bir BUILD işi gönderildikten sonra bu işi iptal edemezsiniz.
-
Varsayılan olarak eşzamanlı BUILD işi sayısı,
Çekirdek sayısı/3değerinin yukarı yuvarlanmış sonucudur ve değiştirilemez.Örneğin, bir AnalyticDB for MySQL kümesinin düğüm teknik özellikleri 32 çekirdek ve 128 GB bellek ise eşzamanlı BUILD işi sayısı 11'dir (
32/3değerinin yukarı yuvarlanmış sonucu). BUILD işleri CPU, bellek ve G/Ç kaynaklarını tüketir. Bu nedenle CPU kullanımı ve disk G/Ç kullanımı gibi diskle ilgili ölçümler artabilir. BUILD işleri tamamlandıktan sonra ölçümler normal değerlere döner. BUILD işlerini yoğun olmayan saatlerde çalıştırmanızı öneririz.
BUILD işlerinin otomatik tetiklenmesi
Aşağıdaki koşullardan biri karşılandığında BUILD işi otomatik olarak tetiklenir:
-
En son BUILD işinden bu yana geçen süre, BUILD işleri arasındaki minimum zaman aralığına ulaşır ve bir tablonun bir parçasına en az 50.000 satır veri eklenir.
Enterprise Edition, Basic Edition veya Data Lakehouse Edition için zaman aralığı: 1,5 saat.
Esnek modda Data Warehouse Edition için zaman aralığı: 1,5 saat.
Ayrılmış modda Data Warehouse Edition için zaman aralığı: 0,5 saat.
En son BUILD işinden bu yana yirmi dört saat geçmiştir ve en az bir satır veri değiştirilmiştir.
-
Bir tablonun bir parçasındaki yeni eklenen veri miktarı 1 milyon satıra ulaştığında BUILD işleri arasındaki zaman aralığı dikkate alınmaz ve bir sonraki programlamada hemen bir BUILD işi çalıştırılır.
NotBu kural yalnızca çekirdek sürümleri v3.1.8.7, v3.1.9.4, v3.1.10.1 veya v3.2.0 ve üzeri olan kümeler tarafından desteklenir. Bir kümenin çekirdek sürümünü görüntüleme hakkında bilgi için bkz. How to view instance version information. Bu kuralı tetikleme eşiği,
RC_BUILD_IGNORE_INTERVAL_TIME_ROW_COUNTkontrol parametresi kullanılarak ayarlanabilir. Varsayılan değer1000000(1 milyon satır) değeridir. Ayarlama, yeniden başlatma gerektirmeden hemen etkili olur. -
Tabloda Bekleme durumunda DDL zaman uyumsuz görevleri olduğunda bir sonraki programlamada hemen bir BUILD işi çalıştırılır.
NotBu kural yalnızca çekirdek sürümleri v3.2.0 ve üzeri olan kümeler tarafından desteklenir. DDL zaman uyumsuz görevleri (sütun türlerini değiştirme ve depolama ilkelerini değiştirme gibi) ancak bir BUILD işi tamamlandıktan sonra etkili olur. Bu kural, zaman uyumsuz DDL görevlerinin BUILD işleri arasındaki zaman aralığını beklemesi nedeniyle uzun süre Bekleme durumunda kalmasını önler. Bu kural,
RC_AUTO_BUILD_WHEN_HAS_DATA_MODIFY_TASKSkontrol parametresi tarafından denetlenir ve varsayılan olarak etkindir. Devre dışı bırakmak içinSET ADB_CONFIG RC_AUTO_BUILD_WHEN_HAS_DATA_MODIFY_TASKS = false;komutunu çalıştırın.
BUILD işini manuel olarak tetikleme
Veri değişikliği olan bölümlerde BUILD deyimi çalıştırma
-
XUANWU tablosu
BUILD TABLE <table_name>;Bu yöntem, yalnızca verileri değiştirilen bölümlerde bir BUILD işi tetikler.
-
-
XUANWU_V2 tablosu
BUILD TABLE <table_name> [BUILD_OPTION];BUILD_OPTION: Yalnızca isteğe bağlı bir parametre olanttldeğerini destekler. Bu parametreyi boş bırakırsanız bu yöntem yalnızca verileri değiştirilen bölümlerde bir BUILD işi tetikler. Bu parametreyi belirtirseniz bu yöntem, BUILD işi tamamlandıktan sonra süresi dolmuş bölümleri hemen siler.
NotBir tablo altyapısının nasıl belirleneceği ve belirtileceği hakkında bilgi için XUANWU_V2 engine konusunun "Specify a table engine" bölümüne bakın.
-
Belirli bölümlerde BUILD deyimi çalıştırma
BUILD TABLE test force partitions='partition1,partition2';
Belirli bölümlerde yalnızca V3.1.6.0 veya daha yeni sürümlere sahip AnalyticDB for MySQL kümeleri için BUILD deyimi çalıştırabilirsiniz. Bir AnalyticDB for MySQL kümesinin küçük sürümünü görüntüleme hakkında bilgi için bkz. How to view instance version information Bir kümenin küçük sürümünü güncellemek için teknik destekle iletişime geçin.
Bir tablo büyük miktarda veri içeriyorsa BUILD TABLE <table_name> force = true; deyiminin çalıştırılması uzun sürebilir. AnalyticDB for MySQL üzerinde BUILD işi çalıştırmak istediğiniz partitions değerini belirtmenize olanak tanır. Bu, kaynak kullanımını azaltmaya ve BUILD işlerinin performansını artırmaya yardımcı olur.
Tüm tabloda BUILD deyimi çalıştırma
BUILD TABLE <table_name> force = true;
Bu yöntem, bir tablonun tüm bölümlerinde bir BUILD işi tetikler ve dizini yeniden oluşturur. Varsayılan olarak bu özellik devre dışı bırakılmıştır.
Bu yöntem, bir tablodaki tüm mevcut veriler için bir dizini yeniden oluşturur ve bu işlem uzun sürer. Belirli bölümlerde BUILD deyimi çalıştırmanızı öneririz. Tüm tabloda BUILD deyimi çalıştırmadan önce etkileri ve riskleri değerlendirmeniz gerekir. Bu özelliği etkinleştirmek için destek talebi gönderin.
BUILD işleri için otomatik programlamayı yapılandırma
-
Yapılandırma yöntemi
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;startveendparametreleri, BUILD işlerini programlamak istediğiniz bir zaman aralığını belirtir. Parametreleri 0 ile 24 aralığında ayarlayın ve zaman aralığını ters tırnak içine () alın. Birden çok zaman aralığı yapılandırabilirsiniz. Birden çok zaman aralığını noktalı virgül (;) ile ayırın.Örneğin,
startparametresini 0 veendparametresini 6 olarak ayarlayarak BUILD işlerini 00:00 ile 06:59 arasında programlayabilirsiniz.ÖnemliBelirtilen zaman aralıkları işleri yürütmek için değil, işleri programlamak için kullanılır. Bu nedenle işler programlandıktan sonra sistem, zaman aralıkları sona erdiğinde işleri tamamlamamış olabilir.
-
Örnek
BUILD işlerini aşağıdaki zaman aralıklarında programlanacak şekilde yapılandırın: 00:00 - 06:59 ve 18:00 - 22:59.
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;Yukarıdaki deyimi çalıştırdıktan sonra sistem BUILD işlerini 00:00 - 06:59 ve 18:00 - 22:59 saatleri arasında programlar.
BUILD işleri için programlama önceliklerini yapılandırma
BUILD işlerinin programlanma sırası, tablolardaki tek tek paralara eklenen veri miktarına göre belirlenir. Bir tablonun bir parçasına eklenen veri miktarı ne kadar büyükse iş o kadar erken programlanır ve çalıştırılır. Tablolar için BUILD işlerinin programlama önceliklerini yapılandırmak üzere bir ipucu kullanabilir veya SET ADB_CONFIG deyimini çalıştırabilirsiniz.
-
BUILD işlerinin programlama önceliklerini yalnızca V3.1.5.0 veya daha yeni sürümlere sahip AnalyticDB for MySQL kümeleri için yapılandırabilirsiniz.
Küçük sürümü görüntülemek ve güncellemek için AnalyticDB for MySQL konsoluna gidin, Cluster Information sayfasındaki Configuration Information bölümüne gidin.
Bir ipucu yalnızca bir tabloyu destekler. Yapılandırılan öncelik yalnızca mevcut BUILD işi üzerinde etkili olur.
SET ADB_CONFIGdeyimi bir veya daha fazla tabloyu destekler. Yapılandırılan öncelikler, tablolar için yeni BUILD işi programlama öncelikleri yapılandırana kadar geçerli olur.Bir tablo için farklı BUILD işi programlama önceliklerini yapılandırmak üzere bir ipucu ve
SET ADB_CONFIGdeyimi kullanırsanız mevcut işte ipucu tabanlı programlama önceliği öncelik kazanır.
task_priority parametresi, BUILD işlerinin programlama önceliğini belirtir. Değer bir tamsayı olmalıdır. Varsayılan değer 0'dır. Daha büyük bir değer daha yüksek bir programlama önceliği belirtir. BUILD işleri için öncelikler yapılandırdıktan sonra ön uç düğümler BUILD işlerini önceliklere göre programlar. Bir tablo için task_priority parametresini 0'dan küçük bir değere ayarlarsanız o tablo için otomatik BUILD işi programlaması devre dışı bırakılır ve ön uç düğümler o tablo için BUILD işlerini programlamaz.
Yapılandırma yöntemleri:
-
İpucu kullanma
/*build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;Örneğin,
adb_demoveritabanındakitesttablosu için BUILD işlerinin programlama önceliğini 30 olarak ayarlayın./*build_task_priority = 30 */ Build TABLE adb_demo.test; -
SET ADB_CONFIG deyimi kullanma
-
Farklı veritabanlarında bulunan birden çok tablo için BUILD işlerinin programlama önceliklerini yapılandırın.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;NotBirden çok tabloyu noktalı virgül (;) ile ayırın.
Örneğin,
adb_demo1veritabanındakitest1tablosu için BUILD işlerinin programlama önceliğini 30 veadb_demo2veritabanındakitest2tablosu için 10 olarak ayarlayın.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`; -
Bir veritabanındaki tüm tablolar için aynı BUILD işi programlama önceliğini yapılandırın.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;Örneğin,
adb_demo1veritabanındaki tüm tablolar için BUILD işlerinin programlama önceliğini 30 olarak ayarlayın.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`; -
Bir tablo ile aynı veritabanındaki diğer tablolar arasında farklı BUILD işi programlama öncelikleri yapılandırın.
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;Örneğin,
adb_demo1veritabanındakitest1tablosu için BUILD işlerinin programlama önceliğini 30 ve veritabanındaki diğer tüm tablolar için 10 olarak ayarlayın.SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;
-
Mevcut BUILD işi programlama önceliğini sorgulamak için SHOW ADB_CONFIG deyimini çalıştırabilirsiniz.
BUILD işinin durumunu sorgulama
Bir BUILD işi otomatik veya manuel olarak tetiklendikten sonra son üç gün içindeki BUILD işinin durumunu sorgulamak için aşağıdaki SQL deyimini çalıştırabilirsiniz:
SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
Aşağıdaki tabloda status parametresinin değerlerine göre BUILD işlerinin durumu açıklanmaktadır.
|
|
|
|
|
|
|
|
|
|
|
|
SSS
BUILD işlerinin otomatik programlanması neden etkili olmuyor?
Neden: Zamanla ilgili parametreler ters tırnak ( ) içine alınmamıştır. Bu nedenle parametreler ayrıştırılamaz.
Çözüm: Otomatik programlamayı yapılandırmak için SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD deyimini çalıştırırken start ve end parametrelerini ters tırnak ( ) içine alın. Örneğin, SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD= ifadesi sistemin BUILD işlerini 00:00 ile 06:59 arasında programladığını belirtir.