Sorgu karmaşıklığı üzerindeki kısıtlamalar 

Sorgu karmaşıklığı üzerindeki kısıtlamalar ayarların bir parçasıdır.
Kullanıcı arabiriminden daha güvenli yürütme sağlamak için kullanılırlar.
Hemen hemen tüm kısıtlamalar sadece aşağıdakiler için geçerlidir SELECT. Dağıtılmış sorgu işleme için kısıtlamalar her sunucuda ayrı ayrı uygulanır.

ClickHouse, her satır için değil, veri bölümleri için kısıtlamaları denetler. Bu, veri parçasının boyutu ile kısıtlama değerini aşabileceğiniz anlamına gelir.

Üzerindeki kısıtlamalar “maximum amount of something” 0 değerini alabilir, yani “unrestricted”.
Çoğu kısıtlama da bir ‘overflow_mode’ ayar, sınır aşıldığında ne yapılması gerektiği anlamına gelir.
İki değerden birini alabilir: throw veya break. Toplama (group_by_overflow_mode) üzerindeki kısıtlamalar da değere sahiptir any.

throw – Throw an exception (default).

break – Stop executing the query and return the partial result, as if the source data ran out.

any (only for group_by_overflow_mode) – Continuing aggregation for the keys that got into the set, but don't add new keys to the set.

max_memory_usage 

Tek bir sunucuda bir sorgu çalıştırmak için kullanılacak en fazla RAM miktarı.

Varsayılan yapılandırma dosyasında maksimum 10 GB'DİR.

Bu ayar, kullanılabilir belleğin hacmini veya makinedeki toplam bellek hacmini dikkate almaz.
Kısıtlama, tek bir sunucu içindeki tek bir sorgu için geçerlidir.
Kullanabilirsiniz SHOW PROCESSLIST her sorgu için geçerli bellek tüketimini görmek için.
Ayrıca, en yüksek bellek tüketimi her sorgu için izlenir ve günlüğe yazılır.

Bellek kullanımı, belirli toplama işlevlerinin durumları için izlenmez.

Toplam işlevlerin durumları için bellek kullanımı tam olarak izlenmiyor min, max, any, anyLast, argMin, argMax itibaren String ve Array değişkenler.

Bellek tüketimi de parametrelerle sınırlıdır max_memory_usage_for_user ve max_memory_usage_for_all_queries.

max_memory_usage_for_user 

Tek bir sunucuda bir kullanıcının sorguları çalıştırmak için kullanılacak en fazla RAM miktarı.

Varsayılan değerler Ayarlar.sa. Varsayılan olarak, tutar sınırlı değildir (max_memory_usage_for_user = 0).

Ayrıca açıklamasına bakın max_memory_usage.

max_memory_usage_for_all_queries 

Tek bir sunucuda tüm sorguları çalıştırmak için kullanılacak en fazla RAM miktarı.

Varsayılan değerler Ayarlar.sa. Varsayılan olarak, tutar sınırlı değildir (max_memory_usage_for_all_queries = 0).

Ayrıca açıklamasına bakın max_memory_usage.

max_rows_to_read 

Aşağıdaki kısıtlamalar her blokta kontrol edilebilir (her satır yerine). Yani, kısıtlamalar biraz kırılabilir.
Birden çok iş parçacığında bir sorgu çalıştırırken, aşağıdaki kısıtlamalar her iş parçacığı için ayrı ayrı uygulanır.

Bir sorgu çalıştırırken bir tablodan okunabilen satır sayısı.

max_bytes_to_read 

Bir sorgu çalıştırırken bir tablodan okunabilen bayt sayısı (sıkıştırılmamış veri).

read_overflow_mode 

Okunan veri hacmi sınırlardan birini aştığında ne yapmalı: ‘throw’ veya ‘break’. Varsayılan olarak, atın.

max_rows_to_group_by 

Toplama alınan benzersiz anahtarların maksimum sayısı. Bu ayar, toplama sırasında bellek tüketimini sınırlamanızı sağlar.

group_by_overflow_mode 

Toplama için benzersiz anahtarların sayısı sınırı aştığında ne yapmalı: ‘throw’, ‘break’, veya ‘any’. Varsayılan olarak, atın.
Kullanarak ‘any’ değer, GROUP BY'NİN bir yaklaşımını çalıştırmanızı sağlar. Bu yaklaşımın kalitesi, verilerin istatistiksel niteliğine bağlıdır.

max_bytes_before_external_group_by 

Çalıştırmayı etkinleştirir veya devre dışı bırakır GROUP BY harici bellekte yan tümceleri. Görmek Harici bellekte grupla.

Olası değerler:

  • Tek tarafından kullanılabilecek maksimum RAM hacmi (bayt cinsinden) GROUP BY operasyon.
  • 0 — GROUP BY harici bellekte devre dışı.

Varsayılan değer: 0.

max_rows_to_sort 

Sıralamadan önce en fazla satır sayısı. Bu, sıralama yaparken bellek tüketimini sınırlamanıza izin verir.

max_bytes_to_sort 

Sıralamadan önce en fazla bayt sayısı.

sort_overflow_mode 

Sıralamadan önce alınan satır sayısı sınırlardan birini aşarsa ne yapmalı: ‘throw’ veya ‘break’. Varsayılan olarak, atın.

max_result_rows 

Sonuçtaki satır sayısını sınırlayın. Ayrıca, dağıtılmış bir sorgunun parçalarını çalıştırırken alt sorgular ve uzak sunucularda da kontrol edildi.

max_result_bytes 

Sonuçtaki bayt sayısını sınırlayın. Önceki ayar ile aynı.

result_overflow_mode 

Sonucun hacmi sınırlardan birini aşarsa ne yapmalı: ‘throw’ veya ‘break’. Varsayılan olarak, atın.

Kullanım ‘break’ LİMİT kullanmaya benzer. Break yürütmeyi yalnızca blok düzeyinde keser. Bu, döndürülen satırların miktarının daha büyük olduğu anlamına gelir max_result_rows birden çok max_block_size ve bağlıdır max_threads.

Örnek:

SET max_threads = 3, max_block_size = 3333;
SET max_result_rows = 3334, result_overflow_mode = 'break';

SELECT *
FROM numbers_mt(100000)
FORMAT Null;

Sonuç:

6666 rows in set. ...

max_execution_time 

Saniye cinsinden maksimum sorgu yürütme süresi.
Şu anda, sıralama aşamalarından biri için veya toplama işlevlerini birleştirirken ve sonlandırırken kontrol edilmez.

timeout_overflow_mode 

Sorgu daha uzun çalıştırılırsa ne yapmalı ‘max_execution_time’: ‘throw’ veya ‘break’. Varsayılan olarak, atın.

min_execution_speed 

Saniyede satırlarda minimum yürütme hızı. Her veri bloğunda ne zaman kontrol edildi ‘timeout_before_checking_execution_speed’ doluyor. Yürütme hızı düşükse, bir istisna atılır.

min_execution_speed_bytes 

Saniyede en az yürütme bayt sayısı. Her veri bloğunda ne zaman kontrol edildi ‘timeout_before_checking_execution_speed’ doluyor. Yürütme hızı düşükse, bir istisna atılır.

max_execution_speed 

Saniyede en fazla yürütme satırı sayısı. Her veri bloğunda ne zaman kontrol edildi ‘timeout_before_checking_execution_speed’ doluyor. Yürütme hızı yüksekse, yürütme hızı azaltılır.

max_execution_speed_bytes 

Saniyede en fazla yürütme bayt sayısı. Her veri bloğunda ne zaman kontrol edildi ‘timeout_before_checking_execution_speed’ doluyor. Yürütme hızı yüksekse, yürütme hızı azaltılır.

timeout_before_checking_execution_speed 

Yürütme hızının çok yavaş olmadığını kontrol eder (en az ‘min_execution_speed’), saniye içinde belirtilen süre dolduktan sonra.

max_columns_to_read 

Tek bir sorguda bir tablodan okunabilen sütun sayısı. Bir sorgu daha fazla sayıda sütun okuma gerektiriyorsa, bir özel durum atar.

max_temporary_columns 

Sabit sütunlar da dahil olmak üzere bir sorgu çalıştırırken aynı anda RAM'de tutulması gereken geçici sütun sayısı. Bundan daha fazla geçici sütun varsa, bir istisna atar.

max_temporary_non_const_columns 

Aynı şey ‘max_temporary_columns’, ancak sabit sütunları saymadan.
Bir sorgu çalıştırırken sabit sütunların oldukça sık oluşturulduğunu, ancak yaklaşık sıfır bilgi işlem kaynağı gerektirdiğini unutmayın.

max_subquery_depth 

Alt sorguların maksimum yuvalama derinliği. Alt sorgular daha derinse, bir istisna atılır. Varsayılan olarak, 100.

max_pipeline_depth 

Maksimum boru hattı derinliği. Sorgu işleme sırasında her veri bloğunun geçtiği dönüşümlerin sayısına karşılık gelir. Tek bir sunucunun sınırları içinde sayılır. Boru hattı derinliği büyükse, bir istisna atılır. Varsayılan olarak, 1000.

max_ast_depth 

Sorgu sözdizimsel ağacının en fazla yuvalama derinliği. Aşılırsa, bir istisna atılır.
Şu anda, ayrıştırma sırasında değil, yalnızca sorguyu ayrıştırdıktan sonra kontrol edilir. Yani, ayrıştırma sırasında çok derin bir sözdizimsel ağaç oluşturulabilir, ancak sorgu başarısız olur. Varsayılan olarak, 1000.

max_ast_elements 

Sorgu sözdizimsel ağacındaki en fazla öğe sayısı. Aşılırsa, bir istisna atılır.
Önceki ayarla aynı şekilde, yalnızca sorguyu ayrıştırdıktan sonra kontrol edilir. Varsayılan olarak, 50.000.

max_rows_in_set 

Bir alt sorgudan oluşturulan In yan tümcesinde bir veri kümesi için satır sayısı.

max_bytes_in_set 

Bir alt sorgudan oluşturulan In yan tümcesinde bir set tarafından kullanılan en fazla bayt sayısı (sıkıştırılmamış veri).

set_overflow_mode 

Veri miktarı sınırlardan birini aştığında ne yapmalı: ‘throw’ veya ‘break’. Varsayılan olarak, atın.

max_rows_ın_distinct 

DISTINCT kullanırken en fazla sayıda farklı satır.

max_bytes_ın_distinct 

DISTINCT kullanırken bir karma tablo tarafından kullanılan bayt sayısı.

distinct_overflow_mode 

Veri miktarı sınırlardan birini aştığında ne yapmalı: ‘throw’ veya ‘break’. Varsayılan olarak, atın.

max_rows_to_transfer 

Uzak bir sunucuya geçirilen veya GLOBAL In kullanırken geçici bir tabloya kaydedilen satır sayısı.

max_bytes_to_transfer 

Uzak bir sunucuya geçirilen veya GLOBAL In kullanırken geçici bir tabloya kaydedilen bayt sayısı (sıkıştırılmamış veri).

transfer_overflow_mode 

Veri miktarı sınırlardan birini aştığında ne yapmalı: ‘throw’ veya ‘break’. Varsayılan olarak, atın.

max_rows_in_join 

Tabloları birleştirirken kullanılan karma tablodaki satır sayısını sınırlar.

Bu ayarlar aşağıdakiler için geçerlidir SELECT … JOIN işlemleri ve Katmak masa motoru.

Bir sorgu birden çok birleşim içeriyorsa, ClickHouse her Ara sonuç için bu ayarı denetler.

Limit ulaşıldığında ClickHouse farklı eylemlerle devam edebilirsiniz. Kullan... join_overflow_mode eylemi seçmek için ayarlama.

Olası değerler:

  • Pozitif tamsayı.
  • 0 — Unlimited number of rows.

Varsayılan değer: 0.

max_bytes_in_join 

Tabloları birleştirirken kullanılan karma tablonun bayt cinsinden boyutunu sınırlar.

Bu ayarlar aşağıdakiler için geçerlidir SELECT … JOIN işlemleri ve Jo tablein table engine.

Sorgu birleşimler içeriyorsa, ClickHouse her Ara sonuç için bu ayarı denetler.

Limit ulaşıldığında ClickHouse farklı eylemlerle devam edebilirsiniz. Kullanmak join_overflow_mode eylemi seçmek için ayarlar.

Olası değerler:

  • Pozitif tamsayı.
  • 0 — Memory control is disabled.

Varsayılan değer: 0.

join_overflow_mode 

Tanımlar katılın aşağıdaki sınırlar her zaman eylem ClickHouse gerçekleştirdiği ulaştı:

Olası değerler:

  • THROW — ClickHouse throws an exception and breaks operation.
  • BREAK — ClickHouse breaks operation and doesn't throw an exception.

Varsayılan değer: THROW.

Ayrıca Bakınız

max_partitions_per_ınsert_block 

Eklenen tek bir bloktaki en fazla bölüm sayısını sınırlar.

  • Pozitif tamsayı.
  • 0 — Unlimited number of partitions.

Varsayılan değer: 100.

Ayrıntı

Veri eklerken, ClickHouse eklenen bloktaki bölüm sayısını hesaplar. Bölüm sayısı fazla ise max_partitions_per_insert_block, ClickHouse aşağıdaki metinle bir özel durum atar:

“Too many partitions for single INSERT block (more than” + toString (max_parts) + “). The limit is controlled by ‘max_partitions_per_insert_block’ setting. A large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000..10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc).”

Orijinal makale

Rating: 3.7 - 6 votes

Was this content helpful?
★★★★☆