Tüm Ürünler
Search
Belge Merkezi

ApsaraDB for SelectDB:İstatistikler

Son Güncelleme:Oct 08, 2026

ApsaraDB for SelectDB, maliyet tabanlı en iyi duruma getiricinin (CBO) verimli sorgu planları seçmesine yardımcı olmak için sütun bazlı istatistikler toplar. Toplama işlemini manuel olarak tetikleyebilir veya sistemin istatistikleri otomatik olarak toplamasına izin verebilirsiniz.

Çalışma mekanizması

Sorgu en iyi duruma getirme sırasında CBO, koşul seçilebilirliğini tahmin etmek ve yürütme planı maliyetlerini karşılaştırmak için istatistikleri kullanır. Doğru istatistikler daha iyi plan seçimlerine ve daha hızlı sorgulara olanak tanır.

Toplanan tüm istatistikler __internal_schema.column_statistics dahili tablosuna yazılır. Herhangi bir toplama işi çalıştırılmadan önce ön uç (FE), bu tablodaki tüm tabletlerin kullanılabilir olduğunu kontrol eder. Kullanılamayan bir tablet tespit edilirse iş reddedilir.

Sütun başına toplanan istatistikler

SelectDB her sütun için aşağıdaki istatistikleri toplar:

Alan Açıklama
row_count Toplam satır sayısı
data_size Toplam veri boyutu
avg_size_byte Bayt cinsinden ortalama değer uzunluğu
ndv Farklı değer sayısı
min Minimum değer
max Maksimum değer
null_count Null değer sayısı

Bir toplama yöntemi seçin

İki toplama yöntemi mevcuttur. Tablo boyutuna ve iş yükünüzün doğruluk gereksinimlerine göre seçim yapın.

Yöntem Çalışma şekli Denge unsuru
Tam toplama Tablonun tamamını tarar En doğru sonuç; daha yüksek kaynak maliyeti ve daha yavaş
Örnekleme ile toplama Satırların bir alt kümesini veya tablonun belirli bir yüzdesini tarar Daha hızlı ve kaynak açısından daha hafif; biraz daha az doğru

5 GiB'ten büyük tablolar için zaman aşımlarını ve aşırı arka uç (BE) belleği kullanımını önlemek amacıyla örnekleme ile toplamayı kullanın.

İstatistikleri manuel olarak toplayın

İhtiyaç duyulduğunda istatistikleri toplamak veya yenilemek için ANALYZE ifadesini çalıştırın.

Söz dizimi

ANALYZE < TABLE | DATABASE table_name | db_name >
    [ (column_name [, ...]) ]
    [ [ WITH SYNC ] [ WITH SAMPLE PERCENT | ROWS ] ];

Parametreler

Parametre Açıklama
table_name Analiz edilecek tablo. Veritabanını belirtmek için database_name.table_name biçimini kullanın.
column_name Analiz edilecek bir veya daha fazla sütun. Birden fazla sütun adını virgülle ayırın.
WITH SYNC İşlemi eşzamanlı olarak çalıştırın ve tamamlanmasının ardından sonucu döndürün. Bu seçenek olmadan işlem eşzamansız olarak çalışır ve bir iş kimliği döndürür.
WITH SAMPLE PERCENT | ROWS Örnekleme ile toplamayı kullanın. Bir örnekleme oranı (yüzde) veya sabit bir satır sayısı belirtin.

Örnekler

Satırların %10'unu örnekleyerek istatistik toplayın:

ANALYZE TABLE lineitem WITH SAMPLE PERCENT 10;

100.000 satır örnekleyerek istatistik toplayın:

ANALYZE TABLE lineitem WITH SAMPLE ROWS 100000;

Otomatik toplamayı yapılandırın

Otomatik toplama varsayılan olarak etkindir. Her içe aktarma işlemi gerçekleştikten sonra SelectDB, etkilenen tabloların istatistik sağlığını yeniden hesaplar ve gerektiğinde toplama işlerini tetikler.

Sağlık puanının çalışma şekli

İstatistik sağlığı 0 ila 100 arasında bir değerdir. Aşağıdaki koşulların tümü karşılandığında otomatik toplama tetiklenir:

  • Tablo son toplamadan bu yana güncellendi.

  • Sağlık puanı yapılandırılan eşik değerin altına düştü.

  • Büyük tablolar için: Son toplamadan bu yana minimum toplama aralığı geçti.

Sağlık puanı ayrıntıları:

  • İstatistiği olmayan bir tablonun sağlık puanı 0'dır.

  • Her içe aktarma işleminden sonra SelectDB, güncellenen satır oranına dayanarak yeni sağlık durumunu tahmin eder.

  • Sağlık durumu table_stats_health_threshold (varsayılan: 60) değerinin altına düşerse tablo eski kabul edilir ve toplama için planlanır.

Büyük tablo stratejisi

huge_table_lower_bound_size_in_bytes (varsayılan: 5 GiB) değerinden büyük tablolar için:

  • SelectDB otomatik olarak örnekleme ile toplamayı kullanır ve huge_table_default_sample_rows satır (varsayılan: 4.194.304) örnekler.

  • Bu süre zarfındaki sağlık puanı değişikliklerinden bağımsız olarak toplama işlemi en fazla huge_table_auto_analyze_interval_in_millis (varsayılan: 12 saat) başına bir kez çalışır.

Daha doğru istatistikler için örnekleme derinliğini artırmak üzere huge_table_default_sample_rows değerini yükseltin.

Toplamayı yoğun olmayan saatlerle sınırlayın

Üretim iş yüklerini etkilememek için otomatik toplama için bir zaman penceresi ayarlayın:

SET auto_analyze_start_time = '02:00:00';
SET auto_analyze_end_time = '06:00:00';

Otomatik toplamayı devre dışı bırakın

SET enable_auto_analyze = false;

Harici katalog

Büyük geçmiş veri kümelerinden kaynaklanan aşırı kaynak tüketimini önlemek için harici kataloglarda otomatik toplama varsayılan olarak devre dışıdır. Katalog başına etkinleştirin veya devre dışı bırakın:

-- Enable automatic collection for an external catalog
ALTER CATALOG external_catalog SET PROPERTIES ('enable.auto.analyze'='true');

-- Disable automatic collection for an external catalog
ALTER CATALOG external_catalog SET PROPERTIES ('enable.auto.analyze'='false');

Toplama işlerini yönetin

Toplama işlerini görüntüleyin

SHOW [AUTO] ANALYZE < table_name | job_id >
    [ WHERE [ STATE = [ "PENDING" | "RUNNING" | "FINISHED" | "FAILED" ] ] ];
Parametre Açıklama
AUTO Geçmiş otomatik toplama işlerini gösterin. Varsayılan olarak yalnızca en son 20.000 tamamlanmış otomatik iş saklanır.
table_name Tabloya göre filtreleyin. database_name.table_name biçimini kullanın. Atlanırsa tüm işler döndürülür.
job_id İş kimliğine göre filtreleyin. İş kimliği, ANALYZE ifadesini eşzamansız modda çalıştırdığınızda döndürülür. Atlanırsa tüm işler döndürülür.

Örnek:

SHOW ANALYZE 245073\G;
*************************** 1. row ***************************
              job_id: 245073
        catalog_name: internal
             db_name: default_cluster:tpch
            tbl_name: lineitem
            col_name: [l_returnflag,l_receiptdate,l_tax,l_shipmode,l_suppkey,l_shipdate,
                        l_commitdate,l_partkey,l_orderkey,l_quantity,l_linestatus,l_comment,
                        l_extendedprice,l_linenumber,l_discount,l_shipinstruct]
            job_type: MANUAL
       analysis_type: FUNDAMENTALS
             message:
last_exec_time_in_ms: 2023-11-07 11:00:52
               state: FINISHED
            progress: 16 Finished  |  0 Failed  |  0 In Progress  |  16 Total
       schedule_type: ONCE

Çıktı alanları:

Alan Açıklama
job_id İş kimliği
catalog_name Katalog adı
db_name Veritabanı adı
tbl_name Tablo adı
col_name Analiz edilen sütunlar
job_type İş türü: MANUAL veya AUTO
analysis_type İstatistik türü
message İstatistik toplama işiyle ilgili bilgiler.
last_exec_time_in_ms Son yürütme zaman damgası
state İş durumu: PENDING, RUNNING, FINISHED veya FAILED
progress Görev tamamlanma dökümü
schedule_type Zamanlama yöntemi: Tek seferlik işler için ONCE

Tablo düzeyindeki istatistikleri görüntüleyin

SHOW TABLE STATS <table_name>;

Örnek:

SHOW TABLE STATS lineitem\G
*************************** 1. row ***************************
updated_rows: 0
 query_times: 0
   row_count: 6001215
updated_time: 2023-11-07
     columns: [l_returnflag, l_receiptdate, l_tax, l_shipmode, l_suppkey, l_shipdate,
               l_commitdate, l_partkey, l_orderkey, l_quantity, l_linestatus, l_comment,
               l_extendedprice, l_linenumber, l_discount, l_shipinstruct]
     trigger: MANUAL

Çıktı alanları:

Alan Açıklama
updated_rows Son ANALYZE ifadesi tarafından güncellenen tablo satırlarının sayısı.
query_times Rezerve edildi; ileriki bir sürümde sorgu sayısını gösterecek
row_count Tablo satırlarının sayısı. Bu parametrenin değeri yürütme sırasındaki kesin satır sayısını göstermez.
updated_time İstatistiklerin en son ne zaman güncellendiği
columns İstatistikleri toplanan sütunlar
trigger Son toplamanın nasıl tetiklendiği

Sütun düzeyindeki görev durumunu görüntüleyin

Her toplama işi sütun başına bir görev oluşturur. Belirli bir iş için görev durumunu görüntülemek için:

SHOW ANALYZE TASK STATUS [job_id]

Örnek:

SHOW ANALYZE TASK STATUS 20038;
+---------+----------+---------+----------------------+----------+
| task_id | col_name | message | last_exec_time_in_ms | state    |
+---------+----------+---------+----------------------+----------+
| 20039   | col4     |         | 2023-06-01 17:22:15  | FINISHED |
| 20040   | col2     |         | 2023-06-01 17:22:15  | FINISHED |
| 20041   | col3     |         | 2023-06-01 17:22:15  | FINISHED |
| 20042   | col1     |         | 2023-06-01 17:22:15  | FINISHED |
+---------+----------+---------+----------------------+----------+

Sütun istatistiklerini görüntüleyin

SHOW COLUMN [cached] STATS table_name [ (column_name [, ...]) ];
Parametre Açıklama
cached Şu anda FE belleğinde önbelleğe alınan istatistikleri gösterin
table_name İncelenecek tablo. database_name.table_name biçimini kullanın.
column_name Bir veya daha fazla sütun. Birden fazla sütun adını virgülle ayırın.

Örnek:

SHOW COLUMN STATS lineitem(l_tax)\G
*************************** 1. row ***************************
  column_name: l_tax
        count: 6001215.0
          ndv: 9.0
     num_null: 0.0
    data_size: 4.800972E7
avg_size_byte: 8.0
          min: 0.00
          max: 0.08
       method: FULL
         type: FUNDAMENTALS
      trigger: MANUAL
  query_times: 0
 updated_time: 2023-11-07 11:00:46

Bir toplama işini durdurun

KILL ANALYZE job_id;

İş kimliği, eşzamansız modda ANALYZE tarafından döndürülür veya SHOW ANALYZE komutundan alınır.

Örnek:

KILL ANALYZE 52357;

Oturum değişkenleri ve FE yapılandırma öğeleri

Oturum değişkenleri

Değişken Varsayılan Açıklama
auto_analyze_start_time 00:00:00 Otomatik toplama penceresinin başlangıç zamanı
auto_analyze_end_time 23:59:59 Otomatik toplama penceresinin bitiş zamanı
enable_auto_analyze true Otomatik toplamayı etkinleştirin veya devre dışı bırakın
huge_table_default_sample_rows 4194304 Büyük tablolar için örneklenen satır sayısı
huge_table_lower_bound_size_in_bytes 5368709120 Bir tablonun büyük olarak kabul edilmesi için gereken boyut eşiği (varsayılan: 5 GiB)
huge_table_auto_analyze_interval_in_millis 43200000 Büyük tablolar için otomatik toplamalar arasındaki minimum aralık (varsayılan: 12 saat)
table_stats_health_threshold 60 Sağlık puanı eşiği (0–100). Sağlığı bu değerin altına düşen bir tablo eski kabul edilir.
analyze_timeout 43200 Bir toplama işi için saniye cinsinden zaman aşımı
auto_analyze_table_width_threshold 70 Otomatik toplamaya katılabilmesi için bir tablonun sahip olabileceği maksimum sütun sayısı

FE yapılandırma öğeleri

Bu öğeler arka plan davranışını kontrol eder. Çoğu durumda varsayılan değerler yeterlidir.

FE yapılandırma öğesi Varsayılan Açıklama
analyze_record_limit 20000 Kalıcı olarak depolanan maksimum iş yürütme kaydı sayısı
stats_cache_size 500000 FE tarafında önbelleğe alınan maksimum istatistik satırı sayısı
statistics_simultaneously_running_task_num 3 Eşzamanlı çalışan maksimum eşzamansız toplama işi sayısı
statistics_sql_mem_limit_in_bytes 2147483648 Toplama için kullanılan SQL ifadesi başına maksimum BE belleği (varsayılan: 2 GiB)

SSS

ANALYZE çalıştırıldıktan sonra "Stats table not available..." hatası görünüyor

Tüm BE düğümlerinin normal durumda olduğunu onaylamak için SHOW BACKENDS komutunu çalıştırın. BE'ler sağlıklı görünüyorsa dahili istatistik tablosunun tablet durumunu kontrol edin:

ADMIN SHOW REPLICA STATUS FROM __internal_schema.[tbl_in_this_db];

Tüm tabletlerin normal bir durum gösterdiğinden emin olun. FE, herhangi bir ANALYZE isteğini kabul etmeden önce tablet kullanılabilirliğini kontrol eder ve __internal_schema.column_statistics içindeki herhangi bir tablet kullanılamazsa isteği reddeder.

Büyük bir tabloda istatistik toplama başarısız oluyor

Tam tarama yerine örnekleme ile toplamayı kullanın. ANALYZE için ayrılan kaynaklar kesinlikle sınırlıdır ve büyük bir tablonun tam taraması zaman aşımına uğrayabilir veya BE belleğini tüketebilir:

ANALYZE TABLE <table_name> WITH SAMPLE PERCENT 10;

Tablo boyutuna ve ihtiyaç duyduğunuz doğruluğa bağlı olarak örnekleme oranını ayarlayın.