全部产品
Search
文档中心

ApsaraDB for SelectDB:Statistik

更新时间:Jul 30, 2025

ApsaraDB for SelectDB memungkinkan Anda memicu pengumpulan statistik secara manual atau mengaktifkan pengumpulan otomatis. Statistik yang dikumpulkan dapat digunakan untuk mengoptimalkan kinerja kueri.

Ikhtisar

ApsaraDB for SelectDB mendukung pengumpulan statistik baik secara manual maupun otomatis. Statistik ini membantu pengoptimal memahami karakteristik distribusi data. Selama optimasi berbasis biaya (CBO), pengoptimal menghitung selektivitas predikat dan memperkirakan biaya setiap rencana eksekusi berdasarkan statistik yang telah dikumpulkan. Dengan demikian, pengoptimal dapat memilih rencana kueri optimal untuk meningkatkan efisiensi kueri secara signifikan.

Statistik yang akan dikumpulkan

Dalam sebagian besar kasus, informasi berikut dikumpulkan untuk setiap kolom.

Informasi

Deskripsi

row_count

Jumlah total baris.

data_size

Jumlah total data.

avg_size_byte

Panjang rata-rata nilai.

ndv

Jumlah nilai berbeda.

min

Nilai minimum.

max

Nilai maksimum.

null_count

Jumlah nilai null.

Pengumpulan statistik

ApsaraDB for SelectDB memungkinkan Anda mengeksekusi pernyataan ANALYZE guna mengumpulkan dan memperbarui statistik secara manual.

Sintaksis

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

Deskripsi parameter

Parameter

Deskripsi

table_name

Nama tabel yang statistiknya ingin Anda kumpulkan. Nilainya dapat ditentukan dalam format database_name.table_name.

column_name

Nama kolom yang statistiknya ingin Anda kumpulkan. Kolom tersebut harus ada di tabel yang ditentukan oleh parameter table_name. Anda dapat menentukan beberapa nama kolom. Pisahkan beberapa nama kolom dengan koma (,).

sync

Jika parameter ini ditentukan, pekerjaan pengumpulan statistik dieksekusi dalam mode sinkron dan hasil eksekusi dikembalikan setelah pekerjaan selesai. Jika parameter ini tidak ditentukan, pekerjaan pengumpulan statistik dieksekusi dalam mode asinkron dan ID pekerjaan dikembalikan.

sample percent | rows

Anda dapat menentukan parameter ini untuk melakukan sampling informasi untuk pengumpulan statistik. Anda dapat menentukan rasio sampling atau jumlah baris yang akan diambil sampelnya.

Contoh

  • Kumpulkan statistik untuk tabel dengan rasio sampling 10%:

    ANALYZE TABLE lineitem WITH SAMPLE PERCENT 10;
  • Kumpulkan statistik untuk tabel dengan mengambil sampel 100.000 baris data:

    ANALYZE TABLE lineitem WITH SAMPLE ROWS 100000;

Pengumpulan otomatis

Secara default, fitur pengumpulan otomatis diaktifkan.

Logika eksekusi

Setelah transaksi impor di-commit, ApsaraDB for SelectDB mencatat jumlah baris tabel yang diperbarui oleh transaksi impor untuk memperkirakan kesehatan statistik tabel. Untuk tabel yang statistiknya belum dikumpulkan, kesehatan statistiknya adalah 0. Anda dapat menentukan parameter table_stats_health_threshold untuk menetapkan ambang batas kesehatan statistik. Dalam contoh ini, nilai yang digunakan adalah 60. Jika kesehatan statistik suatu tabel lebih rendah dari 60, ApsaraDB for SelectDB menganggap bahwa statistik tabel tersebut sudah usang dan memicu pekerjaan pengumpulan statistik untuk tabel tersebut dalam operasi selanjutnya. Untuk tabel dengan kesehatan statistik lebih tinggi dari 60, tidak dilakukan pengumpulan ulang.

Konfigurasi parameter

Pekerjaan pengumpulan statistik membutuhkan sejumlah sumber daya sistem. Untuk meminimalkan overhead, ApsaraDB for SelectDB secara otomatis menggunakan sampling untuk mengumpulkan statistik pada tabel yang ukurannya melebihi ambang batas tertentu. Secara default, ambang batas ditetapkan pada 5 GiB. Anda dapat menyesuaikan ambang batas ini dengan menentukan parameter frontend (FE) huge_table_lower_bound_size_in_bytes. Dalam pengumpulan otomatis, ApsaraDB for SelectDB secara default mengambil sampel 4.194.304 (2^22) baris data untuk mengurangi beban kerja sistem dan menyelesaikan pekerjaan pengumpulan statistik sesegera mungkin.

Jika Anda ingin mengambil lebih banyak sampel baris untuk mendapatkan informasi distribusi data yang lebih akurat, Anda dapat menentukan parameter huge_table_default_sample_rows guna meningkatkan jumlah baris yang diambil sampelnya. Selain itu, ApsaraDB for SelectDB memastikan bahwa interval pengumpulan tidak kurang dari periode waktu tertentu untuk tabel dengan ukuran lebih besar dari ambang batas yang ditentukan pada parameter huge_table_lower_bound_size_in_bytes. Secara default, interval minimum adalah 12 jam. Anda dapat menyesuaikan interval minimum ini dengan menentukan parameter huge_table_auto_analyze_interval_in_millis.

Untuk mencegah dampak terhadap bisnis Anda selama pelaksanaan pekerjaan pengumpulan otomatis, Anda dapat menentukan parameter auto_analyze_start_time dan auto_analyze_end_time sesuai kebutuhan bisnis, sehingga pekerjaan pengumpulan otomatis berjalan hanya pada jam-jam sepi. Selain itu, Anda dapat menonaktifkan fitur ini dengan mengatur parameter enable_auto_analyze ke false.

Secara default, fitur pengumpulan otomatis dinonaktifkan untuk katalog eksternal. Jika diaktifkan, konsumsi sumber daya berlebih dapat terjadi karena katalog eksternal berisi sejumlah besar data historis. Anda dapat mengonfigurasi properti katalog eksternal untuk mengaktifkan atau menonaktifkan fitur pengumpulan otomatis.

ALTER CATALOG external_catalog SET PROPERTIES ('enable.auto.analyze'='true'); // Aktifkan fitur pengumpulan otomatis untuk katalog eksternal.
ALTER CATALOG external_catalog SET PROPERTIES ('enable.auto.analyze'='false'); // Nonaktifkan fitur pengumpulan otomatis untuk katalog eksternal.

Manajemen pekerjaan

Lihat pekerjaan pengumpulan statistik

Anda dapat mengeksekusi pernyataan SHOW ANALYZE untuk melihat informasi terkait pekerjaan pengumpulan statistik.

Sintaksis

SHOW [AUTO] ANALYZE < table_name | job_id >
    [ WHERE [ STATE = [ "PENDING" | "RUNNING" | "FINISHED" | "FAILED" ] ] ];

Deskripsi parameter

Parameter

Deskripsi

AUTO

Informasi tentang pekerjaan pengumpulan otomatis historis.

Catatan

Secara default, status hanya 20.000 pekerjaan pengumpulan otomatis terbaru yang selesai disimpan.

table_name

Nama tabel yang pekerjaan pengumpulan statistiknya ingin Anda lihat. Nilainya dapat ditentukan dalam format database_name.table_name. Jika Anda menentukan parameter ini, informasi tentang pekerjaan pengumpulan statistik yang dieksekusi pada tabel yang ditentukan dikembalikan. Jika Anda tidak menentukan parameter ini, informasi tentang semua pekerjaan pengumpulan statistik dikembalikan.

job_id

ID pekerjaan pengumpulan statistik yang ingin Anda lihat. Anda dapat memperoleh ID pekerjaan dari output pernyataan ANALYZE yang dieksekusi untuk mengumpulkan statistik dalam mode asinkron. Jika Anda tidak menentukan parameter ini, informasi tentang semua pekerjaan pengumpulan statistik dikembalikan.

Contoh

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

Tabel berikut menjelaskan parameter dalam output:

Parameter

Deskripsi

job_id

ID pekerjaan pengumpulan statistik.

catalog_name

Nama katalog.

db_name

Nama database.

tbl_name

Nama tabel.

col_name

Nama kolom.

job_type

Jenis pekerjaan.

analysis_type

Jenis statistik.

message

Informasi tentang pekerjaan pengumpulan statistik.

last_exec_time_in_ms

Waktu ketika pekerjaan pengumpulan statistik terakhir dieksekusi.

state

Status pekerjaan pengumpulan statistik.

schedule_type

Metode penjadwalan pekerjaan pengumpulan statistik.

Lihat informasi tentang pengumpulan statistik tabel

Anda dapat mengeksekusi pernyataan SHOW TABLE STATS untuk melihat informasi terkait pengumpulan statistik tabel.

Sintaksis

SHOW TABLE STATS <table_name>;

Deskripsi parameter

Parameter

Deskripsi

table_name

Nama tabel yang statistiknya ingin Anda lihat. Nilainya dapat ditentukan dalam format database_name.table_name.

Contoh

Pernyataan berikut menunjukkan contoh cara melihat informasi tentang statistik yang dikumpulkan dari tabel lineitem:

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

Tabel berikut menjelaskan parameter dalam output:

Parameter

Deskripsi

updated_rows

Jumlah baris tabel yang diperbarui oleh pernyataan ANALYZE terakhir.

query_times

Kolom cadangan. Di versi mendatang, parameter ini menunjukkan jumlah kueri yang dilakukan pada tabel.

row_count

Jumlah baris tabel. Nilai parameter ini tidak menunjukkan jumlah baris yang tepat selama eksekusi.

updated_time

Waktu ketika statistik yang dikumpulkan terakhir diperbarui.

columns

Kolom tempat statistik dikumpulkan.

trigger

Metode pemicu pekerjaan pengumpulan statistik.

Lihat informasi tentang pengumpulan statistik kolom

Setiap pekerjaan pengumpulan statistik terdiri dari satu atau lebih tugas, di mana setiap tugas berkaitan dengan pengumpulan kolom. Anda dapat mengeksekusi pernyataan berikut untuk melihat informasi terkait pengumpulan statistik pada kolom tertentu.

Sintaksis

SHOW ANALYZE TASK STATUS [job_id]

Deskripsi parameter

Parameter

Deskripsi

job_id

ID pekerjaan pengumpulan statistik.

Contoh

Pernyataan berikut menunjukkan contoh cara melihat informasi tentang tugas pengumpulan statistik dengan ID 20038:

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 |
+---------+----------+---------+----------------------+----------+

Lihat statistik kolom

Anda dapat mengeksekusi pernyataan SHOW COLUMN STATS untuk melihat statistik kolom.

Sintaksis

SHOW COLUMN [cached] STATS table_name [ (column_name [, ...]) ];

Deskripsi parameter

Parameter

Deskripsi

cached

Statistik dalam cache memori FE.

table_name

Nama tabel yang statistik kolomnya ingin Anda lihat. Nilainya dapat ditentukan dalam format database_name.table_name.

column_name

Nama kolom yang statistiknya ingin Anda lihat. Kolom tersebut harus ada di tabel yang ditentukan oleh parameter table_name. Anda dapat menentukan beberapa nama kolom. Pisahkan beberapa nama kolom dengan koma (,).

Contoh

Pernyataan berikut menunjukkan contoh cara melihat statistik kolom l_tax:

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

Hentikan pekerjaan pengumpulan statistik

Anda dapat mengeksekusi pernyataan KILL ANALYZE untuk menghentikan proses pengumpulan statistik.

Sintaksis

KILL ANALYZE job_id;

Deskripsi parameter

Parameter

Deskripsi

job_id

ID pekerjaan pengumpulan statistik. Anda dapat memperoleh ID pekerjaan dari output pernyataan ANALYZE yang dieksekusi untuk mengumpulkan statistik dalam mode asinkron. Anda juga dapat memperoleh ID pekerjaan dengan mengeksekusi pernyataan SHOW ANALYZE.

Contoh

Pernyataan berikut menunjukkan contoh cara menghentikan pekerjaan pengumpulan statistik dengan ID 52357:

KILL ANALYZE 52357;

Variabel sesi dan item konfigurasi FE

Variabel sesi

Variabel sesi

Nilai default

Deskripsi

auto_analyze_start_time

00:00:00

Waktu mulai pekerjaan pengumpulan otomatis.

auto_analyze_end_time

23:59:59

Waktu akhir pekerjaan pengumpulan otomatis.

enable_auto_analyze

true

Menentukan apakah fitur pengumpulan otomatis diaktifkan.

huge_table_default_sample_rows

4194304

Jumlah baris yang akan diambil sampelnya untuk tabel besar.

huge_table_lower_bound_size_in_bytes

5368709120

Ambang batas untuk pengambilan sampel. Jika ukuran tabel melebihi nilai ini, pengambilan sampel otomatis digunakan selama pengumpulan otomatis.

huge_table_auto_analyze_interval_in_millis

43200000

Interval minimum di mana pengumpulan otomatis dilakukan untuk tabel besar. Selama interval yang ditentukan, pengumpulan otomatis hanya dilakukan sekali untuk tabel yang ukurannya lebih besar dari ambang batas yang ditentukan untuk parameter huge_table_lower_bound_size_in_bytes.

table_stats_health_threshold

60

Ambang batas kesehatan statistik. Nilai valid: 0 hingga 100. Jika rasio data yang diperbarui mencapai nilai (100 - nilai parameter table_stats_health_threshold) × %, statistik dianggap sudah usang.

analyze_timeout

43200

Periode timeout pekerjaan pengumpulan statistik. Satuan: detik.

auto_analyze_table_width_threshold

70

Jumlah maksimum kolom yang dapat dimiliki oleh tabel yang digunakan untuk pengumpulan otomatis. Jika jumlah kolom dalam tabel melebihi nilai tersebut, tabel tidak berpartisipasi dalam pengumpulan otomatis.

Item konfigurasi FE

Item konfigurasi FE berikut terkait dengan statistik yang akan dikumpulkan. Pada sebagian besar kasus, Anda tidak perlu memfokuskan perhatian pada item konfigurasi ini.

Item konfigurasi FE

Nilai default

Deskripsi

analyze_record_limit

20000

Jumlah maksimum baris persisten yang dapat disimpan untuk mencatat eksekusi pekerjaan pengumpulan statistik.

stats_cache_size

500000

Jumlah maksimum baris statistik yang dapat di-cache di sisi FE.

statistics_simultaneously_running_task_num

3

Jumlah maksimum pekerjaan pengumpulan statistik asinkron yang dapat dieksekusi secara bersamaan.

statistics_sql_mem_limit_in_bytes

2.147.483.648 bytes (2 GiB)

Memori backend (BE) maksimum yang dapat ditempati oleh setiap pernyataan SQL untuk pengumpulan statistik.

Tanya Jawab Umum

  • T: Apa yang harus saya lakukan jika kesalahan "Stats table not available..." dilaporkan setelah saya mengirimkan pernyataan ANALYZE?

    J: Periksa status BE.

    Anda dapat mengeksekusi pernyataan SHOW BACKENDS untuk memeriksa apakah status BE normal. Jika status BE normal, Anda dapat mengeksekusi pernyataan ADMIN SHOW REPLICA STATUS FROM __internal_schema.[tbl_in_this_db] untuk memeriksa status tablet di database. Pastikan status semua tablet normal. Selama eksekusi pernyataan ANALYZE, statistik yang dikumpulkan ditulis ke tabel internal bernama __internal_schema.column_statistics. Sebelum eksekusi pernyataan ANALYZE, FE memeriksa status tablet tabel. Jika ada tablet yang tidak tersedia, permintaan pengumpulan statistik ditolak.

  • T: Apa yang harus saya lakukan jika statistik gagal dikumpulkan dari tabel besar?

    J: Kami sarankan Anda mengeksekusi pernyataan ANALYZE ... WITH SAMPLE... untuk mengumpulkan statistik dari tabel besar. Sumber daya yang dapat dikonsumsi oleh pernyataan ANALYZE dibatasi secara ketat. Dalam hal ini, jika Anda mengeksekusi pernyataan ANALYZE pada tabel besar, eksekusi mungkin timeout atau dibatasi oleh memori BE yang tersedia.