Dokumen ini menjelaskan perintah ANALYZE di Hologres dan perilaku AUTO ANALYZE untuk pengumpulan statistik otomatis, termasuk parameter utama yang membantu Anda memahami serta mengontrol pengumpulan statistik guna meningkatkan kualitas rencana kueri.
Ikhtisar statistik dan ANALYZE
Mengapa statistik diperlukan?
Pengoptimal mengandalkan statistik tabel dan kolom untuk menghasilkan rencana eksekusi yang masuk akal, termasuk:
-
Jumlah baris dan jumlah kolom
-
Lebar kolom (Width)
-
Number of Distinct Values (NDV)
-
Most Common Values (MCV) dan frekuensinya
-
Histogram dan karakteristik distribusi lainnya
Informasi ini membimbing pengoptimal untuk:
-
Memperkirakan biaya eksekusi operator
-
Memangkas ruang pencarian rencana eksekusi
-
Memilih urutan Join dan algoritma Join yang sesuai
-
Memperkirakan kebutuhan memori dan paralelisme
Hal ini menghasilkan rencana eksekusi yang lebih optimal.
Perintah ANALYZE adalah metode standar bagi pengguna untuk secara aktif mengumpulkan statistik tabel/kolom. Ketika statistik tidak tersedia atau tidak akurat, rencana kueri dapat menurun secara signifikan—misalnya, urutan Join yang tidak normal—yang terlihat sebagai: OOM pada kueri, waktu eksekusi lama, atau konsumsi CPU instans yang tinggi.
AUTO ANALYZE adalah metode standar bagi sistem Hologres untuk secara otomatis mengumpulkan statistik tabel/kolom. Karena AUTO ANALYZE merupakan perilaku sistem latar belakang asinkron, terdapat penundaan beberapa detik hingga menit antara perubahan data tabel dan saat AUTO ANALYZE mendeteksi, menjadwalkan, serta menyelesaikan pengumpulan statistik otomatis. Oleh karena itu, dalam beberapa skenario tertentu, disarankan agar pengguna menjalankan ANALYZE secara manual untuk memastikan statistik dikumpulkan tepat waktu.
Kapan harus menjalankan ANALYZE secara manual
Eksekusi manual disarankan dalam skenario berikut:
-
Setelah operasi
INSERT/UPDATE/DELETEyang mengimpor/memperbarui/menghapus sejumlah besar data pada suatu tabel, dan tabel tersebut akan diakses segera, disarankan untuk menjalankan ANALYZE pada tabel tersebut setelah operasiINSERT/UPDATE/DELETE; -
Ketika performa Join multi-tabel menurun secara signifikan, jalankan ANALYZE tingkat kolom pada kolom Join utama dan kolom Group By;
-
Setelah menjalankan
CREATE FOREIGN TABLEatauIMPORT FOREIGN SCHEMAuntuk tabel eksternal, dan tabel tersebut akan diakses segera, disarankan untuk menjalankan ANALYZE pada tabel eksternal yang baru dibuat sebelum melakukan kueri untuk mengumpulkan statistik awal; -
Setelah menjalankan
CREATE EXTERNAL DATABASE, dan database tersebut akan diakses segera, disarankan untuk menjalankan ANALYZE pada tabel-tabel yang perlu diakses di bawah database eksternal tersebut sebelum melakukan kueri; -
Ketika salah satu dari error/gejala berikut terjadi:
-
Error OOM pada Join multi-tabel:
Query executor exceeded total memory limitation ..., atauQuery exceed per query memory limitation ...; -
Error Join multi-tabel:
Capacity error: BinaryArray cannot contain more than 2147483646 bytes ...; -
Tugas impor atau kueri berjalan sangat lama dengan pemanfaatan CPU yang tidak merata.
-
EXPLAIN <SQL>menunjukkan operator Scan dengan perkiraan jumlah baris sebesar 1000,-> Seq Scan on tbl (cost=0.00..5.00 rows=1000 width=1); hal ini menunjukkan bahwa tabel tidak memiliki statistik. -
EXPLAIN <SQL>menunjukkan operator Scan dengan perkiraan jumlah baris sebesar 1,-> Seq Scan on tbl (cost=0.00..1.00 rows=1 width=1); hal ini menunjukkan bahwa tabel diperkirakan memiliki 0 baris. Jika hasil Scan aktual bukan 0 baris, statistik mungkin sudah usang, dan disarankan untuk menjalankan ANALYZE secara manual.
-
Pada skenario di atas, umumnya disarankan untuk pertama kali menjalankan ANALYZE secara manual dan mengamati apakah performa pulih, kemudian menyesuaikan konfigurasi AUTO ANALYZE lebih lanjut.
Perintah ANALYZE
Sintaks dasar dan perilaku
-
Mengumpulkan statistik untuk semua kolom seluruh tabel
ANALYZE table_name;
-
Mengumpulkan jumlah baris tabel dan secara seragam mengumpulkan statistik Width, MCV, Histogram, NDV, dan lainnya untuk semua kolom reguler dalam tabel;
-
Menggunakan pendekatan berbasis sampling untuk memperkirakan berbagai nilai statistik. Operasi sampling memulai sub-SQL sampling dalam proses ANALYZE.
-
Secara default, ANALYZE melakukan sampling acak sebanyak 30.000 baris dari tabel untuk pengumpulan dan komputasi statistik. Jika tabel memiliki kurang dari 30.000 baris, semua baris akan disampling.
-
Mengumpulkan statistik hanya untuk kolom tertentu (disarankan untuk kolom kunci)
ANALYZE table_name(col1, col2, ...);
-
Menghitung NDV yang lebih akurat untuk kolom yang ditentukan (biasanya menggunakan logika
APPROX_COUNT_DISTINCT), yang lebih akurat daripada sampling tingkat tabel tetapi lebih mahal; -
Statistik MCV, Histogram, Width, dan lainnya masih diperoleh melalui sampling;
-
Ketika
ANALYZEdijalankan beberapa kali pada kolom yang sama, eksekusi terakhir akan menimpa statistik lama untuk kolom tersebut, tetapi tidak memengaruhi kolom lain yang tidak ditentukan.
Untuk tabel dengan banyak kolom, ANALYZE table_name; tidak sepenuhnya setara dengan ANALYZE table_name(col1, col2, ...): yang terakhir biasanya lebih akurat untuk NDV tetapi lebih mahal. Disarankan untuk menjalankan ANALYZE tingkat kolom pada kolom Join yang sering digunakan, kolom Group By, dan kolom kunci lainnya sebagai pelengkap.
Batasan dan pertimbangan
-
Kolom mana yang tidak akan dianalisis
-
Tipe yang tidak didukung: Ketika tipe kolom merupakan User Defined Type atau tidak termasuk dalam himpunan tipe yang didukung Hologres untuk statistik, pengumpulan statistik akan dilewati:
-
Tipe kolom yang tidak mendukung ANALYZE meliputi: "char" (tipe karakter tunggal), BIT, VARBIT, BYTEA, NAME, JSON, TSVECTOR, TSQUERY, OID, XID, CID, INET, POINT, LINE, LSEG, BOX, CIRCLE, PATH, POLYGON, BITARRAY, VARBITARRAY, BYTEAARRAY, INT2ARRAY, MONEYARRAY, NUMERICARRAY, TIMEARRAY, TIMETZARRAY, TIMESTAMPTZARRAY, TIMESTAMPARRAY, ANYARRAY, REGCLASS, DATEARRAY, atau tipe INTERNAL lainnya.
-
Ketika tipe kolom tidak didukung, baik ANALYZE manual maupun AUTO ANALYZE akan diabaikan;
-
Untuk tabel partisi, tipe kolom yang tidak mendukung penggabungan statistik partisi inkremental juga tidak akan dianalisis. Selain tipe yang tercantum di atas, tipe yang tidak didukung juga mencakup: BOOLARRAY, INT4ARRAY, TEXTARRAY, BPCHARARRAY, VARCHARARRAY, INT8ARRAY, FLOAT4ARRAY, FLOAT8ARRAY.
-
-
Kolom yang ditandai sebagai dropped: Kolom logis yang dipertahankan setelah
ALTER TABLE ... DROP COLUMN(attisdropped = true) tidak akan dianalisis; -
Dinonaktifkan secara eksplisit melalui atribut kolom:
-
Kolom dengan atribut kolom
enable_analyze = falsetidak akan diproses oleh ANALYZE atau AUTO ANALYZE; -
Kolom dengan atribut kolom
enable_auto_analyze = falsetidak akan diproses oleh AUTO ANALYZE. -
Untuk detail tentang atribut kolom ini, lihat bagian selanjutnya.
-
-
Statistik kolom JSONB tidak diaktifkan:
-
Jika tipe kolom adalah
JSONBdanenable_jsonb_statstidak diaktifkan, statistik JSONB tidak akan dikumpulkan untuk kolom tersebut; -
Jika Anda perlu mengandalkan statistik kolom JSONB (misalnya, kondisi filter JSON kompleks), Anda perlu mengaktifkan
enable_jsonb_statsterlebih dahulu dalam atribut kolom.
-
-
Rangkuman: Bahkan setelah menjalankan ANALYZE table_name;, kolom-kolom di atas mungkin dilewati karena batasan tipe atau atribut kolom. Ketika Anda tidak dapat menemukan catatan statistik yang sesuai di pg_stats, Anda harus memeriksa batasan ini terlebih dahulu.
-
Batasan ANALYZE untuk tabel data lake
-
ANALYZE tidak didukung untuk Timestamp, Version, Branch, Snapshot, atau Tag tertentu secara individual
-
Penggunaan khas
-
Penggunaan khas yang direkomendasikan
-
Jalankan ANALYZE tingkat kolom pada kolom Join, kolom Group By, dan kolom kondisi filter:
-
ANALYZE tablename (order_id, user_id, dt);
ANALYZE tablename;
ANALYZE foreign_table;
-
Lewati pengumpulan statistik untuk kolom tertentu dengan mengatur atribut kolom
-
Hologres mendukung pengendalian apakah ANALYZE atau AUTO ANALYZE dijalankan pada suatu kolom melalui atribut tingkat kolom, yang berlaku untuk skenario berikut:
-
Kolom ultra-lebar (seperti Text yang sangat panjang) memiliki overhead pengumpulan statistik yang tinggi, dan pengumpulan statistik untuknya memberikan manfaat terbatas atau tidak ada bagi rencana kueri;
-
Kolom tertentu tidak pernah berpartisipasi dalam Join, filtering, atau agregasi, sehingga tidak perlu pengumpulan statistik;
-
Perlu mengurangi konsumsi sumber daya ANALYZE atau AUTO ANALYZE.
-
-
Parameter kontrol adalah opsi kolom berikut:
-
enable_analyze: Mengontrol apakah kolom berpartisipasi dalam ANALYZE manual dan AUTO ANALYZE otomatis. Default-nya adalahtrue; -
enable_auto_analyze: Mengontrol hanya apakah kolom berpartisipasi dalam AUTO ANALYZE otomatis. Default-nya adalahtrue.
-
-
Metode pengaturan (melalui perintah
ALTER TABLE):
-
-- Nonaktifkan ANALYZE dan AUTO ANALYZE untuk kolom tertentu
ALTER TABLE t ALTER COLUMN bitmap_col SET (enable_analyze = false);
-- Nonaktifkan AUTO ANALYZE untuk kolom tertentu namun tetap mengizinkan ANALYZE manual
ALTER TABLE t ALTER COLUMN large_text_col SET (enable_auto_analyze = false);
-- Kembalikan ke perilaku default (aktifkan kembali)
ALTER TABLE t ALTER COLUMN bitmap_col RESET (enable_analyze);
ALTER TABLE t ALTER COLUMN large_text_col RESET (enable_auto_analyze);
Tabel partisi dan ANALYZE partisi inkremental
Untuk mengurangi overhead menjalankan ANALYZE pada tabel partisi besar, Hologres mendukung ANALYZE partisi inkremental:
-
Tujuan:
-
Menghindari sampling penuh pada tabel induk setiap kali;
-
Memperbarui statistik tabel induk dengan menjalankan
ANALYZEpada partisi anak dan menggabungkan statistiknya; -
Melewati pengumpulan ulang statistik untuk partisi anak yang tidak berubah.
-
Skenario dan batasan
-
Di Hologres V2.0 dan versi setelahnya, ANALYZE partisi inkremental diaktifkan secara default tanpa konfigurasi manual. Untuk detailnya, lihat catatan versi produk;
-
Ketika diaktifkan, menjalankan
ANALYZEpada partisi anak akan mencoba menggabungkan statistiknya dengan statistik partisi anak lain untuk menghasilkan statistik tabel induk; -
Prasyarat untuk menggabungkan statistik tabel induk adalah, selain partisi anak yang sedang dianalisis, semua partisi anak lain di bawah tabel induk harus sudah memiliki statistik (termasuk statistik jumlah baris dan statistik kolom);
-
Oleh karena itu, Anda dapat:
-
Saat penyiapan awal, jalankan
ANALYZEpada tabel induk terlebih dahulu. Sistem akan secara otomatis mendeteksi partisi anak yang memerlukanANALYZEdan menganalisisnya satu per satu, akhirnya menggabungkan hasilnya ke dalam statistik tabel induk; -
Ketika partisi baru ditambahkan nanti, Anda hanya perlu menjalankan
ANALYZEpada partisi anak yang baru ditambahkan.
-
Contoh singkat
BEGIN;
DROP TABLE IF EXISTS t_parent;
CREATE TABLE t_parent(a int, b int) PARTITION BY LIST (a);
CREATE TABLE child1 PARTITION OF t_parent FOR VALUES IN (1);
CREATE TABLE child2 PARTITION OF t_parent FOR VALUES IN (2);
COMMIT;
insert into child1 values (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 2);
insert into child2 values (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 5), (2, 5), (2, 5), (2, 5), (2, 5);
-- child2 tidak memiliki statistik, sehingga statistik tabel induk tidak dapat digabung
dbname=# ANALYZE child1;
INFO: auto merging of leaf partition stats to calculate root partition stats is not possible because partition child2 is not analyzed
ANALYZE
-- child1 sudah memiliki statistik. Setelah menganalisis child2, statistik tabel induk dapat digabung secara otomatis
dbname=# ANALYZE child2;
ANALYZE
dbname=# SELECT tablename,
attname,
null_frac AS "NF",
avg_width,
n_distinct,
most_common_vals AS "MCV",
most_common_freqs AS "MCV_FRAQ"
FROM pg_stats
WHERE tablename = 't_parent';
tablename | attname | NF | avg_width | n_distinct | MCV | MCV_FRAQ
-----------+---------+----+-----------+------------+-------+------------
t_parent | a | 0 | 4 | 2 | {1,2} | {0.5,0.5}
t_parent | b | 0 | 4 | -0.2 | {1,5} | {0.45,0.3}
(2 rows)
-- Setelah ini, ketika partisi baru ditambahkan, Anda hanya perlu menjalankan ANALYZE pada partisi anak. Statistik tabel induk akan digabung secara otomatis hanya dengan sampling pada partisi anak tersebut.
ANALYZE pada tabel induk
Terkadang beberapa partisi anak dari tabel partisi mengalami perubahan data, dan Anda tidak ingin menjalankan ANALYZE pada setiap partisi anak secara individual. Dalam kasus ini, Anda dapat melakukan ANALYZE tunggal pada tabel induk.
Ketika ANALYZE partisi inkremental diaktifkan, menjalankan ANALYZE secara manual pada tabel induk menyebabkan sistem secara adaptif memilih partisi anak yang memerlukan pembaruan statistik, alih-alih menganalisis semua partisi anak secara membabi buta. Mekanisme ini secara signifikan mengurangi overhead ANALYZE untuk tabel partisi besar sekaligus memastikan akurasi statistik.
Deskripsi perilaku
Ketika menjalankan ANALYZE partition_parent_table;, sistem secara otomatis mengidentifikasi dua jenis partisi anak berikut, memprioritaskan pengumpulan statistik ANALYZE-nya, lalu menggabungkannya ke dalam statistik tabel induk:
-
Partisi dengan perubahan statistik
-
Data partisi anak telah berubah secara signifikan sejak
ANALYZEterakhir (insert, update, atau delete); -
Kriteria penentuan:
-
Jumlah baris yang berubah mencapai ambang batas perubahan (
1% * jumlah baris pada ANALYZE terakhir).
-
-
-
Partisi yang tidak dapat digabung
-
Partisi anak tidak memiliki statistik lengkap, sehingga tidak dapat berpartisipasi dalam penggabungan statistik tabel induk;
-
Penyebab umum meliputi:
-
ANALYZE belum pernah dijalankan: Statistik partisi anak benar-benar tidak tersedia;
-
Statistik kolom tidak tersedia: Kolom tertentu tidak memiliki statistik yang diperlukan (seperti MCV, Histogram, atau NDV HLL Counter);
-
Ketidakcocokan tipe statistik dengan tipe kolom: Tipe kolom partisi anak telah berubah, menyebabkan statistik yang ada tidak konsisten dengan tipe kolom saat ini;
-
Versi statistik usang: Versi statistik tabel induk (statistic_version) lebih rendah daripada versi statistik partisi anak terbaru, menunjukkan bahwa statistik tabel induk belum mutakhir dan perlu digabung ulang.
-
-
Contoh eksekusi dan output
-- Jalankan ANALYZE pada tabel induk
ANALYZE partition_parent_table;
Output khas:
INFO: will analyze 5 part tables first (stats changed 3, unable-to-merge 2)
Output ini menunjukkan:
-
Sistem mengidentifikasi 5 partisi anak yang perlu pengumpulan statistik prioritas;
-
Diantaranya, 3 partisi anak memerlukan pembaruan statistik karena perubahan data yang signifikan;
-
Diantaranya, 2 partisi anak ditandai sebagai tidak dapat digabung karena statistik yang hilang atau tidak dapat digunakan, sehingga perlu memicu ANALYZE internal terlebih dahulu.
Catatan
-
Tidak disarankan untuk mengatur
autovacuum_enabled = false(menonaktifkan AUTO ANALYZE tingkat tabel) untuk partisi anak, karena hal ini dapat menyebabkan partisi anak tetap dalam keadaan "tidak dapat digabung" untuk jangka waktu yang lama kecuali Anda menjalankan ANALYZE secara manual lagi.
Melalui mekanisme ini, Hologres dapat secara signifikan meningkatkan efisiensi eksekusi ANALYZE untuk tabel partisi besar sekaligus memastikan kualitas statistik, memberikan data pengambilan keputusan yang lebih tepat waktu dan akurat kepada pengoptimal kueri.
ANALYZE untuk tabel partisi logis
Tabel partisi logis adalah jenis tabel partisi yang unik untuk Hologres. Berbeda dengan tabel partisi PostgreSQL standar (yang membuat tabel anak fisik melalui PARTITION BY), tabel partisi logis tetap secara fisik sebagai satu tabel tunggal dan hanya mempartisi data secara logis berdasarkan nilai kolom partisi, memberikan kemampuan manajemen partisi yang lebih fleksibel.
Logika ANALYZE untuk tabel partisi logis pada dasarnya sama dengan tabel partisi fisik. Satu-satunya perbedaan adalah bahwa partisi anak dari tabel partisi logis bukanlah tabel terpisah, tetapi seperti partisi anak fisik, masing-masing tetap memiliki statistik jumlah baris dan statistik kolom yang independen.
Deskripsi perilaku
Ketika menjalankan ANALYZE pada tabel partisi logis, sistem menggunakan logika pemrosesan yang mirip tetapi independen dari tabel partisi fisik:
-
Penemuan otomatis partisi logis
-
Ketika menjalankan
ANALYZE logical_partitioned_table;pada tabel (induk) partisi logis, sistem secara otomatis menanyakan mesin penyimpanan untuk semua partisi logis tabel tersebut;
-
-
Pemilihan adaptif partisi logis yang memerlukan statistik
-
Seperti pada tabel partisi fisik, sistem mengidentifikasi partisi logis berikut dan memprioritaskan pengumpulan statistiknya:
-
Partisi dengan perubahan statistik
-
Data partisi anak telah berubah secara signifikan sejak
ANALYZEterakhir (insert, update, atau delete), dengan kriteria penentuan yang sama seperti pada tabel partisi fisik yang dijelaskan di atas; -
Partisi logis dengan statistik yang hilang: ANALYZE belum pernah dijalankan, atau kolom tertentu tidak memiliki statistik yang diperlukan (seperti counter HLL);
-
Partisi logis dengan statistik yang tidak dapat digunakan: Statistik kolom tidak cocok dengan tipe kolom saat ini, atau statistiknya sudah usang.
-
-
Partisi kosong dilewati: Partisi logis dengan 0 baris diabaikan secara otomatis.
-
Sistem mengeluarkan pesan informasi, misalnya:
INFO: will analyze 10 logical partitions first -
-
Sampling dan pengumpulan statistik per partisi
-
Untuk setiap partisi logis yang memerlukan pengumpulan statistik, sistem membuat kueri sampling dengan kondisi filter kolom partisi (seperti
WHERE user_id = 1 AND event_date = '2024-11-04'); -
Sampling data dilakukan dalam cakupan partisi logis tersebut untuk mengumpulkan statistik tingkat kolom (NDV, MCV, Histogram, counter HLL, dll.);
-
Statistik disimpan pada granularitas partisi logis di
hologres_statistic.hg_table_statistic, dibedakan berdasarkan fieldunique_nameuntuk partisi logis yang berbeda.
-
-
Menggabungkan statistik tabel induk
-
Setelah pengumpulan statistik untuk semua partisi logis selesai, sistem secara otomatis memicu penggabungan statistik untuk menghasilkan statistik tabel induk.
-
Contoh eksekusi dan output
Contoh 1: Jalankan ANALYZE pada tabel induk partisi logis
-- Buat tabel partisi logis
CREATE TABLE user_events (
user_id INT NOT NULL,
event_type TEXT NOT NULL,
event_date DATE NOT NULL,
event_data INT
)
LOGICAL PARTITION BY LIST(user_id, event_date);
-- Masukkan data ke partisi logis yang berbeda
INSERT INTO user_events SELECT 1, 'login', '2024-11-01', i FROM generate_series(1, 1000) i;
INSERT INTO user_events SELECT 1, 'logout', '2024-11-02', i FROM generate_series(1, 1000) i;
INSERT INTO user_events SELECT 2, 'purchase', '2024-11-03', i FROM generate_series(1, 1000) i;
INSERT INTO user_events SELECT 3, 'view', '2024-11-04', i FROM generate_series(1, 1000) i;
-- Jalankan ANALYZE pada tabel induk
ANALYZE VERBOSE user_events;
Output khas:
INFO: will analyze 4 logical partitions first
INFO: analyzing hologres table "public.user_events" PARTITION (user_id=1,event_date='2024-11-01')
INFO: analyzing hologres table "public.user_events" PARTITION (user_id=1,event_date='2024-11-02')
INFO: analyzing hologres table "public.user_events" PARTITION (user_id=2,event_date='2024-11-03')
INFO: analyzing hologres table "public.user_events" PARTITION (user_id=3,event_date='2024-11-04')
INFO: try to merge root partition
INFO: automatically merging leaf partition stats to calculate root partition stats
Deskripsi:
-
Sistem secara otomatis menemukan 4 partisi logis yang memerlukan pembaruan statistik;
-
Statistik dikumpulkan untuk setiap partisi logis satu per satu;
-
Akhirnya, statistik global tabel induk digabung dan dihasilkan secara otomatis.
Contoh 2: Jalankan ANALYZE pada partisi logis tertentu
-- Jalankan ANALYZE pada satu partisi logis
ANALYZE user_events PARTITION (user_id=1, event_date='2024-11-01');
-- Jalankan ANALYZE pada beberapa partisi logis
ANALYZE user_events
PARTITION (user_id=1, event_date='2024-11-01')
PARTITION (user_id=2, event_date='2024-11-03');
-- Jalankan ANALYZE pada kolom tertentu dari partisi logis yang ditentukan
ANALYZE user_events
PARTITION (user_id=1, event_date='2024-11-01') (user_id, event_type);
Deskripsi:
-
Anda dapat menggunakan klausa
PARTITIONuntuk menentukan partisi logis mana yang akan dianalisis; -
Beberapa partisi logis dapat ditentukan sekaligus;
-
Seperti pada ANALYZE standar, Anda dapat lebih lanjut menentukan kolom untuk mengumpulkan statistik.
Penyimpanan statistik
Statistik untuk tabel partisi logis disimpan di tabel hologres_statistic.hg_table_statistic:
SELECT
unique_name,
schema_name,
table_name,
total_rows,
sample_rows,
nattr
FROM hologres_statistic.hg_table_statistic
WHERE table_name = 'user_events'
ORDER BY unique_name;
Hasil contoh:
| unique_name | schema_name | table_name | total_rows | sample_rows | nattr |
|-------------|-------------|------------|------------|-------------| ----- |
| user_events | public | user_events | 4000 | 0 | 4 |
| user_events.a1b2c3d4e5f6... | public | user_events | 1000 | 1000 | 4 |
| user_events.f6e5d4c3b2a1... | public | user_events | 1000 | 1000 | 4 |
| user_events.1234567890ab... | public | user_events | 1000 | 1000 | 4 |
| user_events.abcdef123456... | public | user_events | 1000 | 1000 | 4 |
Deskripsi field:
-
Catatan tabel induk:
-
total_rows = 4000: Total jumlah baris di semua partisi logis; -
sample_rows = 0: Statistik tabel induk diperoleh melalui penggabungan, tanpa sampling langsung.
-
-
Catatan partisi logis (
unique_nameberisi hash MD5 yang mengidentifikasi objek statistik (tabel/partisi)):-
Setiap partisi logis memiliki catatan statistik independen;
-
sample_rows = 1000: Jumlah baris aktual yang disampling untuk partisi logis tersebut.
-
Praktik terbaik untuk ANALYZE tabel partisi logis
-
Lebih baik menjalankan ANALYZE pada tabel induk partisi logis
-
Ketika menjalankan
ANALYZEpada tabel induk partisi logis, sistem secara otomatis menemukan dan mengumpulkan statistik untuk semua partisi logis tanpa perlu menentukan setiap partisi secara manual; -
Hanya gunakan klausa
PARTITIONuntuk menentukan partisi ketika Anda perlu memperbarui statistik dengan cepat untuk partisi logis tertentu.
-
-
Manfaatkan pembaruan statistik inkremental
-
Ketika data hanya ditulis ke beberapa partisi logis, Anda dapat menjalankan ANALYZE hanya pada partisi tersebut;
-
Sistem akan secara otomatis memicu penggabungan statistik tabel induk tanpa perlu mengumpulkan ulang statistik untuk semua partisi.
-
-
Perhatikan jumlah partisi logis
-
Ketika terdapat terlalu banyak partisi logis (misalnya ribuan), ANALYZE awal mungkin memakan waktu lama. Disarankan untuk menjalankannya selama jam sepi;
-
-
Pertimbangan performa terkait versi untuk tabel partisi logis
-
Pada versi sebelum V4.1.20, menjalankan ANALYZE pada tabel partisi logis mungkin mengalami penurunan performa signifikan (waktu eksekusi yang panjang dengan jeda sekitar 10 detik). Hal ini disebabkan oleh kontensi lock antara proses ANALYZE foreground dan tugas pemuatan statistik latar belakang (trigger load stats): saat ANALYZE melakukan iterasi melalui sub-partisi dari tabel partisi logis yang sama, ia terus-menerus menghasilkan entri binlog statistik, yang memicu pemuatan statistik latar belakang berulang untuk tabel dan versi yang sama, mengakibatkan kontensi lock SUE (Statistics Update Exclusive).
-
Pada versi V4.2.5 dan setelahnya, masalah ini telah dioptimalkan melalui deduplikasi proses pemuatan statistik latar belakang, menghilangkan operasi pemuatan berlebihan untuk tabel dan versi yang sama. Jika Anda mengalami performa ANALYZE yang lambat pada tabel partisi logis, disarankan untuk melakukan upgrade ke V4.2.5 atau versi setelahnya.
-
-
Gunakan bersamaan dengan AUTO ANALYZE
-
Tabel partisi logis juga dikelola oleh AUTO ANALYZE, yang secara otomatis mengidentifikasi partisi logis yang memerlukan pembaruan statistik.
-
Parameter yang dapat dikonfigurasi untuk perintah ANALYZE
|
Parameter |
Deskripsi |
Versi Didukung |
Nilai Default |
Catatan / Contoh Penggunaan |
|
hg_experimental_analyze_foreign_partitions_access_limit |
Jumlah maksimum partisi yang diizinkan diakses selama sampling acak ketika menjalankan ANALYZE pada tabel eksternal |
v0.10 dan setelahnya |
0 (tidak terbatas) |
-- Hanya sampling 100 partisi untuk mencegah sampling acak memindai terlalu banyak data tabel eksternal ALTER DATABASE dbname SET hg_experimental_analyze_foreign_partitions_access_limit = 100; |
|
hg_analyze_foreign_table_max_sample_row_count |
Jumlah maksimum baris yang disampling selama sampling acak ketika menjalankan ANALYZE pada tabel eksternal |
v4.1 dan setelahnya |
0 (tidak terbatas). Untuk detailnya, lihat pembaruan versi. |
Pengumpulan statistik otomatis AUTO ANALYZE
Mulai dari Hologres V0.10, Hologres mendukung mekanisme pengumpulan statistik otomatis AUTO ANALYZE:
-
Secara otomatis menentukan tabel mana yang memerlukan pembaruan statistik berdasarkan pembuatan tabel, penulisan data, dan perubahan data;
-
Menjadwalkan tugas pengumpulan statistik secara asinkron di latar belakang, menghilangkan kebutuhan bagi pengguna untuk menjalankan ANALYZE secara manual pada setiap tabel;
-
Mengurangi risiko statistik yang hilang karena kelalaian menjalankan ANALYZE.
Sakelar dan cakupan
Sakelar tingkat database
-
Parameter yang dapat dikonfigurasi adalah
hg_enable_start_auto_analyze_worker. Mulai dari Hologres V0.10, parameter ini diaktifkan secara default.
-- Periksa apakah AUTO ANALYZE diaktifkan untuk database saat ini
SHOW hg_enable_start_auto_analyze_worker;
-- Nonaktifkan (gunakan hanya untuk troubleshooting sementara)
ALTER DATABASE dbname SET hg_enable_start_auto_analyze_worker = OFF;
-- Atur ulang ke nilai default ON (direkomendasikan)
ALTER DATABASE dbname RESET hg_enable_start_auto_analyze_worker;
Catatan: GUC di atas adalah konfigurasi tingkat database. Konfigurasi tingkat SESSION atau ROLE tidak efektif. Harus diatur melalui ALTER DATABASE agar berlaku pada database tersebut, dan hanya superuser yang dapat memodifikasinya.
Sakelar tingkat tabel
Hologres mendukung pengendalian perilaku AUTO ANALYZE untuk tabel individual.
Deskripsi perilaku
-
Nonaktifkan AUTO ANALYZE untuk satu tabel
ALTER TABLE my_table SET (autovacuum_enabled = false);
-
Aktifkan AUTO ANALYZE untuk satu tabel (kembalikan perilaku default)
-- Direkomendasikan: atur ulang untuk mengembalikan default
ALTER TABLE my_table RESET (autovacuum_enabled);
-- Atau atur eksplisit ke true (tidak direkomendasikan)
ALTER TABLE my_table SET (autovacuum_enabled = true);
-
Periksa status autovacuum_enabled suatu tabel
SELECT relname, reloptions FROM pg_class WHERE relname = 'my_table';
relname | reloptions
----------+----------------------------
my_table | {autovacuum_enabled=false}
(1 row)
Kasus penggunaan khas
-
Tabel bisnis khusus yang tidak memerlukan statistik
-
Beberapa tabel hanya digunakan untuk penyimpanan sementara atau logging dan tidak berpartisipasi dalam kueri kompleks, sehingga pengumpulan statistik tidak diperlukan;
-
Tabel dengan volume data besar yang berubah secara frekuen tetapi tidak memerlukan statistik dapat menghindari konsumsi sumber daya yang tidak perlu dengan mengatur
autovacuum_enabled = false.
-
-
Statistik sudah dikelola secara manual
-
Untuk tabel kritis tertentu, Anda mungkin telah menetapkan alur kerja ANALYZE manual rutin yang memenuhi kebutuhan bisnis Anda.
-
-
Nonaktifkan sementara untuk mengurangi penggunaan sumber daya
-
Selama jam sibuk bisnis atau troubleshooting darurat, Anda dapat menonaktifkan sementara AUTO ANALYZE untuk tabel tertentu;
-
Setelah situasi terselesaikan, aktifkan kembali atau jalankan ANALYZE secara manual.
-
Pertimbangan
-
Untuk tabel partisi:
-
Tidak disarankan untuk mengatur
autovacuum_enabled = falsepada partisi anak, karena hal ini dapat menyebabkan partisi anak tetap dalam keadaan "tidak dapat digabung" untuk jangka waktu yang lama, memengaruhi akurasi statistik tabel induk; -
Jika Anda perlu menonaktifkannya, disarankan hanya mengaturnya pada tabel partisi induk.
-
-
Sakelar tingkat tabel memiliki prioritas lebih tinggi daripada sakelar tingkat database:
-
Bahkan jika AUTO ANALYZE tingkat database diaktifkan, tabel dengan
autovacuum_enabled = falsetidak akan diproses oleh AUTO ANALYZE.
-
Sakelar tingkat kolom
Hologres mendukung pengendalian apakah ANALYZE atau AUTO ANALYZE dilakukan pada kolom tertentu melalui atribut tingkat kolom, yang berlaku untuk skenario berikut:
-
Kolom lebar (seperti field Text panjang) memiliki overhead pengumpulan statistik yang tinggi tetapi memberikan manfaat terbatas bagi rencana kueri;
-
Kolom tertentu tidak pernah berpartisipasi dalam Join, filter, atau agregasi dan tidak memerlukan pengumpulan statistik;
-
Perlu mengurangi konsumsi sumber daya AUTO ANALYZE.
Parameter kontrol adalah opsi kolom berikut:
-
enable_auto_analyze: Mengontrol hanya apakah kolom berpartisipasi dalam AUTO ANALYZE otomatis, default-nya adalahtrue. -
Metode konfigurasi (melalui perintah
ALTER TABLE):
-- Nonaktifkan AUTO ANALYZE untuk kolom tertentu namun tetap mengizinkan ANALYZE manual
ALTER TABLE t ALTER COLUMN large_text_col SET (enable_auto_analyze = false);
-- Kembalikan ke perilaku default (aktifkan kembali)
ALTER TABLE t ALTER COLUMN large_text_col RESET (enable_auto_analyze);
-
Pertimbangan:
-
Setelah mengatur
enable_auto_analyze = falsepada tingkat kolom, tugas AUTO ANALYZE tidak akan lagi mengumpulkan statistik untuk kolom tersebut. Namun, Anda masih dapat mengumpulkan statistik secara eksplisit melaluiANALYZE table_name;atauANALYZE table_name(col);manual; -
Jika suatu kolom memiliki dampak signifikan terhadap rencana kueri (seperti kolom Join atau kolom kondisi filter), tidak disarankan untuk menonaktifkan pengumpulan statistiknya.
-
Logika pemicu AUTO ANALYZE
AUTO ANALYZE menggabungkan berbagai jenis sinyal untuk menentukan apakah statistik perlu diperbarui untuk tabel tertentu:
-
Volume Perubahan Data
-
Hanya berlaku untuk tabel Hologres reguler (tidak termasuk tabel eksternal);
-
Pada interval 1 menit, mengumpulkan jumlah baris operasi
INSERT/UPDATE/DELETEyang diamati FE pada setiap tabel. Jika perubahan melebihi ambang batas, AUTO ANALYZE dipicu (respons cepat); -
Pada interval 10 menit, mengambil jumlah baris perubahan insert/update/delete dari mesin penyimpanan. Jika perubahan melebihi ambang batas, AUTO ANALYZE dipicu (kalibrasi presisi);
-
-
Perubahan Skema
-
Hanya berlaku untuk tabel Hologres reguler (tidak termasuk tabel eksternal);
-
Pada interval 1 menit, mengumpulkan tabel dengan perubahan berikut dan melakukan AUTO ANALYZE:
-
ADD / DROP COLUMN;
-
Tabel partisi (termasuk tabel partisi logis) ATTACH / DETACH partisi anak.
-
-
-
Statistik Hilang / Tidak Dapat Menggabung Statistik Tabel Partisi Induk
-
Berlaku untuk tabel Hologres reguler dan tabel eksternal;
-
Pada interval 1 menit, mengumpulkan tabel/kolom dengan statistik yang hilang dan partisi anak yang tidak memenuhi syarat untuk penggabungan statistik inkremental.
-
-
Tabel Eksternal
-
Hanya berlaku untuk tabel eksternal yang diperkenalkan melalui
CREATE FOREIGN TABLE,IMPORT FOREIGN SCHEMA, atau mekanisme Auto Load di bawah konteks non-External Database; -
Saat ini hanya mendukung AUTO ANALYZE untuk tabel eksternal MaxCompute;
-
Pada interval 4 jam, secara berkala memeriksa semua tabel eksternal di DB. Di antara dua pemeriksaan, jika terdapat perubahan data eksternal (kriterianya adalah last_modify_timestamp tabel eksternal yang sesuai berada di antara dua interval pemeriksaan), AUTO ANALYZE dipicu.
-
-
Statistik Cadangan
-
Selama jendela 01.00–05.00 pagi, AUTO ANALYZE "cadangan" dilakukan pada tabel yang mengalami perubahan terus-menerus tetapi belum memicu ambang batas (>5000 baris berubah, <10% volume perubahan), untuk menangkap deviasi distribusi data di kolom (misalnya, field bertipe tanggal yang ditulis setelah tengah malam hari berikutnya sangat berbeda dari hari sebelumnya, mengakibatkan perubahan distribusi).
-
-
Mengakses Tabel Hotspot (Hanya untuk Database Eksternal)
-
Setelah mengaktifkan parameter
enable_auto_analyzepada External Database, sistem Hologres mulai melacak tabel yang baru-baru ini diakses sejak startup sistem terakhir dan menambahkannya ke daftar observasi; -
Pada interval 1 jam, tabel dalam daftar observasi yang "sering diakses baru-baru ini" memicu AUTO ANALYZE;
-
Perhatikan bahwa setelah restart sistem, daftar tabel yang diakses dihapus dan pencatatan dimulai kembali.
-
AUTO ANALYZE untuk External Database
-
Mulai dari Hologres V3.0, Hologres mendukung fitur External Database. Saat membuat External Database, Anda dapat mengaktifkan AUTO ANALYZE (secara default dinonaktifkan, lihat catatan rilis untuk detailnya):
-- Aktifkan AUTO ANALYZE saat membuat External Database
-- Referensi: https://www.alibabacloud.com/help/zh/hologres/developer-reference/create-external-database
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type 'maxcompute'
mc_project 'project_name'
enable_auto_analyze 'true';
-- Aktifkan AUTO ANALYZE untuk External Database yang sudah ada
ALTER EXTERNAL DATABASE dbname WITH enable_auto_analyze 'true';
Batasan fitur: Untuk V3.2 dan versi sebelumnya, AUTO ANALYZE untuk External Database mengharuskan pernyataan CREATE EXTERNAL DATABASE dikonfigurasi dengan Access Key dan Access Secret. AUTO ANALYZE tidak didukung untuk External Database yang dikonfigurasi dengan SLR atau STS. Tidak ada batasan seperti ini untuk V4.0 dan versi setelahnya.
-
Cakupan
metastore_typeyang didukung AUTO ANALYZE pada External Database adalah:dlf, dlf-paimon, dlf-rest, maxcompute. -
Format tabel yang didukung AUTO ANALYZE pada External Database meliputi:
MaxCompute, Paimon, Iceberg. -
AUTO ANALYZE pada External Database menggunakan identitas Owner External Database secara default, dan menggunakan autentikasi Time-based One-Time Password (TOTP) untuk menjalankan tugas ANALYZE. Jika Owner tidak memiliki izin tabel yang cukup, sistem tidak dapat menjalankan tugas AUTO ANALYZE dengan sukses.
-
Agar tabel eksternal dalam External Database memenuhi syarat untuk AUTO ANALYZE, kondisi berikut harus terpenuhi:
-
Konfigurasi External Database
hg_enable_start_auto_analyze_worker = on; (default-nya on) -
Atribut External Database
enable_auto_analyzediatur ketrue(tidak dikonfigurasi secara default, yang berartifalse, lihat catatan rilis untuk detailnya) -
Owner External Database harus memiliki izin kueri untuk Project data lake (jika berlaku) dan tabel tersebut
-
Tabel tersebut harus telah diakses setidaknya satu kali dalam 3 hari terakhir
-
AUTO ANALYZE di bawah External Database hanya memantau tabel eksternal yang telah diakses setidaknya satu kali;
-
Setelah restart sistem, jika tabel eksternal diakses setidaknya satu kali, sistem AUTO ANALYZE menambahkannya ke daftar observasi dan secara berkala memicu AUTO ANALYZE untuk tabel-tabel tersebut;
-
-
Catatan: Untuk tabel eksternal dalam External Database yang belum pernah diakses, akses pertama menggunakan mekanisme estimasi jumlah baris cepat untuk mendapatkan jumlah baris sebagai statistik cadangan (lihat bagian "Estimasi Jumlah Baris Cepat" di bawah), yang masih memberikan cakupan statistik tertentu.
Batasan sumber daya AUTO ANALYZE
Untuk mencegah tugas AUTO ANALYZE latar belakang memengaruhi tugas pengguna foreground, Hologres telah menetapkan batasan sumber daya berikut untuk fitur AUTO ANALYZE:
-
Ketika tugas AUTO ANALYZE dijalankan, batas memori default per worker adalah
4 GB. Jika volume data tabel terlalu besar, sampling mungkin melebihi batas memori, menyebabkan SQL sampling AUTO ANALYZE gagal. Dalam kasus seperti ini, hanya informasi jumlah baris yang dapat dikumpulkan, dan informasi distribusi kolom (MCV, Histogram, NDV, dll.) tidak dapat dikumpulkan. Anda dapat menyesuaikanauto_analyze_work_memory_mbuntuk mengubah perilaku ini. Semakin besar spesifikasi instans, semakin tinggi batas memori yang tersedia untuk AUTO ANALYZE. -
Konkurensi tingkat instans untuk tugas AUTO ANALYZE yang dijadwalkan secara simultan biasanya tidak melebihi 4, dan dalam kasus ekstrem tidak melebihi 6.
-
Untuk tugas AUTO ANALYZE partisi anak di bawah tabel partisi yang sama, konkurensi penjadwalan simultan maksimum adalah 3.
-
Secara default, AUTO ANALYZE mengumpulkan statistik untuk 256 kolom pertama. Jika tabel memiliki lebih dari 256 kolom, hanya 256 kolom pertama yang dikumpulkan (untuk tabel partisi, kolom partisi diprioritaskan dan akan dikumpulkan bahkan jika posisinya melebihi 256). Anda dapat menyesuaikan
hg_experimental_auto_analyze_max_columns_countuntuk mengubah nilai ini. -
Sub-SQL sampling tugas AUTO ANALYZE dijalankan menggunakan Background Pool prioritas rendah dengan konkurensi eksekusi kueri yang terbatas. Hal ini menyebabkan tugas AUTO ANALYZE memakan waktu lebih lama daripada ANALYZE manual, yang tidak perlu dikhawatirkan pengguna.
-
Untuk tabel eksternal, AUTO ANALYZE hanya mengumpulkan statistik kolom untuk kolom partisi (misalnya, MCV). Tidak melakukan sampling untuk mengumpulkan statistik kolom untuk kolom selain kolom partisi.
Parameter yang dapat dikonfigurasi AUTO ANALYZE
Secara default, fitur AUTO ANALYZE Hologres tidak memerlukan modifikasi parameter apa pun.
Dalam skenario bisnis langka (seperti penulisan/pembaruan data yang jarang, beban kerja kueri yang tidak memerlukan statistik, atau peningkatan beban sistem yang disebabkan oleh AUTO ANALYZE), pengguna dapat memodifikasi parameter default tertentu untuk menyesuaikan perilaku AUTO ANALYZE demi intervensi atau penyetelan performa parsial.
Catatan: Hanya superuser yang dapat menyesuaikan perilaku default AUTO ANALYZE. Semua parameter harus diatur pada tingkat DB dan berlaku setelah menit berikutnya.
-- Superuser: modifikasi parameter default AUTO ANALYZE pada tingkat database
ALTER DATABASE dbname SET <GUC> = <values>;
|
Parameter |
Deskripsi |
Versi Didukung |
Nilai Default |
Catatan / Contoh Penggunaan |
|
hg_enable_start_auto_analyze_worker |
Mengaktifkan fitur AUTO ANALYZE |
V0.10 dan setelahnya |
on |
-- Nonaktifkan sementara AUTO ANALYZE untuk DB |
|
hg_experimental_auto_analyze_max_columns_count |
Jumlah kolom yang dikumpulkan statistiknya secara otomatis oleh AUTO ANALYZE |
V1.1.0 dan setelahnya |
256 |
|
|
auto_analyze_work_memory_mb |
Batas memori untuk satu tabel dalam AUTO ANALYZE, dalam MB |
V1.1.54 dan setelahnya |
4096 |
-- Ubah menjadi 9 GB |
|
auto_analyze_work_statement_timeout |
Timeout eksekusi tugas AUTO ANALYZE, dalam ms |
V2.0 dan setelahnya |
3600000 |
-- Ubah menjadi 3h |
|
hg_experimental_auto_analyze_max_foreign_table_partitions |
Jumlah maksimum partisi tabel eksternal yang diakses selama AUTO ANALYZE |
V1.1.54 dan setelahnya |
100 |
Jika jumlah partisi tabel eksternal melebihi 100, jumlah baris dari 100 partisi teratas berdasarkan urutan leksikografis nilai partisi tingkat pertama digunakan secara default untuk memperkirakan jumlah baris keseluruhan dan MCV kolom partisi tabel eksternal. |
|
hg_auto_analyze_run_with_serverless_computing |
Apakah AUTO ANALYZE dijalankan menggunakan sumber daya Serverless |
V3.1 dan setelahnya |
off (default-nya on untuk instans Serverless) |
Umumnya tidak perlu penyesuaian. AUTO ANALYZE biasanya mengonsumsi sumber daya minimal dan dijalankan di latar belakang menggunakan proses prioritas rendah, dengan dampak minimal pada beban instans. |
|
hg_auto_analyze_serverless_computing_query_priority |
Prioritas tugas Serverless, rentang 1-5, nilai lebih tinggi menunjukkan prioritas lebih tinggi. Catatan: hg_auto_analyze_run_with_serverless_computing harus diaktifkan terlebih dahulu |
V3.1 dan setelahnya |
2 |
-- Ubah menjadi prioritas tertinggi |
Estimasi jumlah baris cepat (Fast Num of Rows)
Mulai dari Hologres V3.1, Hologres memperkenalkan fitur estimasi jumlah baris cepat. Ketika mendeteksi bahwa tabel dalam kueri SQL yang dieksekusi tidak memiliki statistik atau statistiknya mungkin sudah usang, Hologres dapat dengan cepat memperkirakan jumlah baris tabel melalui metadata dari penyimpanan dasar atau sistem eksternal, sehingga menghasilkan rencana eksekusi yang lebih masuk akal.
Mulai dari Hologres V3.2, fitur estimasi jumlah baris cepat (Fast Num of Rows) diaktifkan secara default.
Sakelar
Cara mengaktifkan estimasi jumlah baris cepat:
-- Nonaktifkan (gunakan hanya untuk troubleshooting sementara atau ketika statistik tidak diperlukan untuk seluruh database)
ALTER DATABASE dbname SET hg_experimental_get_fast_num_of_rows = OFF;
-- V3.2 dan setelahnya: aktifkan (atur ulang ke nilai default)
ALTER DATABASE dbname RESET hg_experimental_get_fast_num_of_rows;
-- V3.1 dan sebelumnya: aktifkan
ALTER DATABASE dbname SET hg_experimental_get_fast_num_of_rows = ON;
Catatan: Estimasi jumlah baris cepat tidak dapat menggantikan pengumpulan statistik lengkap. Masih disarankan untuk menjaga statistik tetap mutakhir pada tabel bisnis kritis melalui ANALYZE/AUTO ANALYZE.
Batasan penggunaan
-
Estimasi jumlah baris cepat berlaku untuk tabel reguler (termasuk tabel partisi), tabel eksternal dalam External Database, dan skenario lainnya.
-
Jumlah baris yang diperkirakan oleh fitur estimasi jumlah baris cepat tidak dijamin sepenuhnya akurat. Misalnya, demi alasan performa, pada tabel partisi Hologres, hanya statistik jumlah baris dari maksimal 60 partisi (secara default) yang digunakan untuk memperkirakan jumlah baris keseluruhan tabel partisi.
-
Pada V4.1.15 dan versi sebelumnya, estimasi jumlah baris cepat tidak diaktifkan secara default untuk tipe tabel eksternal (Foreign Table). Dapat diaktifkan melalui parameter
hg_experimental_enable_foreign_table_get_fast_num_of_rows. Diaktifkan secara default pada V4.1.16 dan versi setelahnya. -
Untuk tipe tabel eksternal, estimasi jumlah baris cepat hanya mendukung tabel eksternal MaxCompute, tabel eksternal Paimon, dan tabel eksternal Iceberg.
Contoh
-
Contoh hg_experimental_get_fast_num_of_rows
Jika tabel tidak memiliki statistik, mengaktifkan estimasi jumlah baris cepat dapat memberikan jumlah baris yang lebih akurat. (Diaktifkan secara default di Hologres V3.2 dan versi setelahnya)
-- V3.2+
create table test_tbl (a int);
insert into test_tbl select * from generate_series (1, 999);
-- Estimasi jumlah baris akurat (rows=999)
explain select count(1) from test_tbl ;
QUERY PLAN
----------------------------------------------------------------------------------------
Final Aggregate (cost=0.00..5.00 rows=1 width=8)
-> Gather (cost=0.00..5.00 rows=10 width=8)
-> Partial Aggregate (cost=0.00..5.00 rows=10 width=8)
-> Local Gather (cost=0.00..5.00 rows=20 width=8)
-> Partial Aggregate (cost=0.00..5.00 rows=20 width=8)
-> Seq Scan on test_tbl (cost=0.00..5.00 rows=999 width=1)
Berikut adalah kasus produksi nyata:
Tanpa fitur ini diaktifkan, jika tabel tidak memiliki statistik, node Scan dalam rencana kueri akan menunjukkan rows=1000 (menunjukkan tidak tersedia statistik, dan rencana dihasilkan berdasarkan estimasi default 1000 baris).
Setelah mengaktifkan fitur ini, jika tabel tidak memiliki statistik, rows node Scan dalam rencana kueri tidak akan sama dengan 1000 (sistem memanggil metadata dari mesin penyimpanan dasar untuk mendapatkan jumlah baris tabel).
Parameter yang dapat dikonfigurasi untuk estimasi jumlah baris cepat
|
Parameter |
Deskripsi |
Versi Didukung |
Nilai Default |
Catatan / Contoh Penggunaan |
|
hg_experimental_get_fast_num_of_rows |
Apakah akan mengaktifkan estimasi jumlah baris cepat. |
v3.1 dan setelahnya |
off (V3.1) on (V3.2+) |
|
|
hg_experimental_enable_foreign_table_get_fast_num_of_rows |
Apakah akan mengaktifkan estimasi jumlah baris tabel eksternal. |
v3.1 dan setelahnya |
off (V4.1.15 dan sebelumnya) on (V4.1.16+) |
-- Cara mengaktifkan: ALTER DATABASE dbname SET hg_experimental_enable_foreign_table_get_fast_num_of_rows = on; |
|
hg_experimental_fast_num_rows_foreign_partitions_access_limit |
Untuk tabel partisi eksternal, jumlah maksimum partisi dari mana jumlah baris diperoleh sebagai dasar estimasi keseluruhan. Catatan: Ini hanya berlaku ketika estimasi jumlah baris tabel eksternal diaktifkan. |
v3.1 dan setelahnya |
60 |
Ini untuk mengontrol overhead waktu estimasi jumlah baris cepat. |
|
hg_get_fast_num_of_rows_holo_partitions_access_limit |
Untuk tabel partisi fisik Hologres, jumlah maksimum partisi dari mana jumlah baris diperoleh sebagai dasar estimasi keseluruhan. |
v3.1 dan setelahnya |
60 |
Ini untuk mengontrol overhead waktu estimasi jumlah baris cepat. |
Menampilkan catatan eksekusi historis ANALYZE dan AUTO ANALYZE
Setelah ANALYZE dan AUTO ANALYZE dijalankan, catatan eksekusinya ditulis ke Query Log. Pengguna dapat melihat catatan eksekusi historis ANALYZE dan AUTO ANALYZE melalui tampilan hologres.hg_query_log, termasuk informasi seperti SQL yang dieksekusi, durasi, dan status.
Cara mengidentifikasi catatan ANALYZE dan AUTO ANALYZE di query log
ANALYZE dan AUTO ANALYZE, beserta pernyataan SQL sampling-nya, dicatat secara terpisah di Query Log.
Catatan eksekusi memiliki karakteristik berikut di Query Log:
|
Field |
ANALYZE |
AUTO ANALYZE |
Deskripsi |
|
|
Username yang menjalankan ANALYZE |
|
AUTO ANALYZE menggunakan akun sistem internal untuk eksekusi, yang secara seragam ditampilkan sebagai |
|
|
Nama aplikasi sesi yang menjalankan ANALYZE |
|
Koneksi framework AUTO ANALYZE menggunakan |
|
|
|
|
|
|
|
|
|
Jenis perintah yang dieksekusi |
|
|
|
|
Sub-SQL sampling adalah pernyataan SELECT. Anda dapat menggunakan pernyataan ini untuk memeriksa konsumsi sumber daya sampling. |
ANALYZE dan SQL sampling-nya dikaitkan melalui komentar di field query, atau melalui extended_info->>'source_query_id'.
SELECT query_id,
extended_info->>'src_query_id' as "source query id",
application_name,
status,
duration
FROM hologres.hg_query_log
WHERE query_start >= now() - interval '1 hour'
AND application_name IN ('AutoAnalyze', 'Hologres SQL Generated BY AUTO ANALYZE')
ORDER BY query_start DESC
LIMIT 2;
query_id | source query id | application_name | status | duration
---------------------+---------------------+----------------------------------------+---------+----------
1004019226350863009 | 1004019226350778807 | Hologres SQL Generated BY AUTO ANALYZE | SUCCESS | 119
1004019226350778807 | | AutoAnalyze | SUCCESS | 3276
Contoh kueri
-
Menampilkan catatan eksekusi AUTO ANALYZE terbaru
SELECT usename,
status,
duration,
query_start,
query_end,
query,
application_name
FROM hologres.hg_query_log
WHERE query_start >= now() - interval '1 hour'
AND application_name IN ('AutoAnalyze')
ORDER BY query_start DESC
LIMIT 20;
query_id,
extended_info->>'src_query_id' as "source query id"
-
Menampilkan riwayat eksekusi AUTO ANALYZE untuk tabel tertentu
SELECT status,
duration,
query_start,
query
FROM hologres.hg_query_log
WHERE query_start >= now() - interval '1 day'
AND application_name IN ('AutoAnalyze')
AND query LIKE '%my_table_name%'
ORDER BY query_start DESC;
-
Merangkum ikhtisar eksekusi AUTO ANALYZE selama 3 hari terakhir
SELECT query_date,
status,
COUNT(*) AS task_count,
AVG(duration) AS avg_duration_ms,
MAX(duration) AS max_duration_ms
FROM hologres.hg_query_log
WHERE query_start >= CURRENT_DATE::timestamptz - interval '2 day'
AND application_name IN ('AutoAnalyze')
AND command_tag = 'ANALYZE'
AND (status = 'SUCCESS' OR (
message NOT LIKE '%does not exist%'
AND message NOT LIKE '%retry later%'))
GROUP BY query_date, status
ORDER BY query_date DESC;
-
Menampilkan tugas AUTO ANALYZE yang gagal dalam sehari terakhir
SELECT query_start,
duration,
message,
query
FROM hologres.hg_query_log
WHERE query_start >= now() - interval '1 day'
AND application_name IN ('AutoAnalyze', 'Hologres SQL Generated BY AUTO ANALYZE')
AND status != 'SUCCESS'
AND (message NOT LIKE '%does not exist%'
AND message NOT LIKE '%retry later%')
ORDER BY query_start DESC;
Catatan
-
Karena koneksi AUTO ANALYZE dimulai dengan identitas administrator internal, pengguna biasa memerlukan peran
pg_read_all_statsatau hak istimewa administrator database untuk melihat catatan eksekusi AUTO ANALYZE lengkap. -
Jika Anda menemukan bahwa tidak ada catatan AUTO ANALYZE di Query Log untuk jangka waktu yang lama, disarankan untuk memeriksa apakah sakelar AUTO ANALYZE diaktifkan.
Menampilkan dan troubleshooting statistik
Menampilkan statistik tabel (hologres_statistic.hg_table_statistic)
Statistik tabel disimpan di tabel hologres_statistic.hg_table_statistic dan juga dapat diamati di tabel sistem.
-
Kueri tabel ini untuk mendapatkan statistik dari ANALYZE terbaru.
SELECT schema_name, -- Skema tabel
table_name, -- Nama tabel
user_name, -- Pengguna yang terakhir menjalankan ANALYZE
schema_version, -- Versi skema tabel pada ANALYZE terakhir
total_rows, -- Jumlah baris pada ANALYZE terakhir
sample_rows, -- Baris sampel yang digunakan pada ANALYZE terakhir
analyze_timestamp, -- Waktu penyelesaian ANALYZE terakhir
analyze_count -- Total jumlah ANALYZE sejauh ini
FROM hologres_statistic.hg_table_statistic
WHERE unique_name = hologres.hg_internal_statistic_unique_name ('schemaname', 'tablename')
ORDER BY analyze_timestamp DESC;
-- Output contoh
schema_name | table_name | user_name | schema_version | total_rows | sample_rows | analyze_timestamp | analyze_count
-------------+------------+------------------+----------------+------------+-------------+---------------------+---------------
public | test_fnr | BASIC$test_fnr | -1 | 999 | 999 | 2026-03-02 22:05:29 | 2
(1 row)
V3.1 dan sebelumnya:
-
Setiap tabel memiliki 0 hingga n catatan di tabel hologres_statistic.hg_table_statistic. 0 catatan berarti ANALYZE belum pernah dilakukan, dan 1 atau lebih catatan berarti ANALYZE telah dijalankan.
-
Jika terdapat dua catatan atau lebih, schema_version kedua catatan tersebut harus berbeda, karena perubahan skema tabel (seperti ADD_COLUMN, CALL SET_TABLE_PROPERTY, dll.) menghasilkan versi baru, yang menambahkan catatan statistik baru. Catatan yang sesuai dengan schema_version lama tidak lagi digunakan.
-
Hasil kueri contoh berikut menunjukkan bahwa tabel yang sama memiliki 2 catatan, dan schema_version catatan kedua lebih rendah daripada yang pertama. Catatan kedua karena itu tidak valid dan tidak akan digunakan, dan Anda tidak perlu memperhatikannya. Hologres saat ini tidak membersihkan catatan kadaluarsa historis di tabel hg_table_statistic, dan pengguna tidak perlu khawatir tentang data lama.
schema_name | table_name | user_name | schema_version | total_rows | sample_rows | analyze_timestamp | analyze_count
-------------+------------+------------------+----------------+------------+-------------+---------------------+---------------
public | test_fnr | BASIC$test_fnr | 13 | 999 | 999 | 2026-03-01 18:05:29 | 2
public | test_fnr | BASIC$test_fnr | 12 | 999 | 999 | 2026-03-01 08:05:29 | 1
(1 row)
V3.1 dan setelahnya:
-
Setiap tabel memiliki 0 hingga 1 catatan di tabel hologres_statistic.hg_table_statistic. 0 catatan berarti ANALYZE belum pernah dilakukan, dan 1 catatan berarti ANALYZE telah dijalankan.
-
schema_version secara seragam diatur ke -1 (mewakili Deprecated).
-
Artinya, banyak operasi DDL tidak lagi membatalkan statistik. Misalnya, CALL SET_TABLE_PROPERTY tidak akan memicu kembali AUTO ANALYZE, dan statistik yang ada akan terus digunakan. Dibandingkan dengan Hologres V3.0 dan versi sebelumnya, frekuensi pemicu AUTO ANALYZE berkurang secara signifikan.
-
Menanyakan jumlah baris dan statistik lainnya
Informasi jumlah baris dicatat di field reltuples tabel pg_class.
-- relallvisible > 0: tabel memiliki statistik jumlah baris
-- relallvisible = 0: jumlah baris tidak diketahui; jangan mengandalkan reltuples
-- relallvisible < 0: tabel tidak memiliki statistik
SELECT relallvisible, reltuples FROM pg_class WHERE relname = 'test_table';
Jika tabel tidak memiliki statistik, lihat bagian "Menampilkan tabel dengan statistik yang hilang" di bawah untuk mengidentifikasi penyebabnya.
-
Menanyakan statistik kolom
Dengan menanyakan tampilan pg_stats, Anda dapat memperoleh statistik untuk semua kolom tabel saat ini. Misalnya, untuk mendapatkan statistik untuk kolom ds dari test_table:
select * from pg_stats where tablename = 'test_table' and attname = 'ds';
schemaname | tablename | attname | inherited | null_frac | avg_width | n_distinct | most_common_vals | most_common_freqs | histogram_bounds | correlation | most_common_elems | most_common_elem_freqs | elem_count_histogram
------------+------------+---------+-----------+-----------+-----------+------------+------------------+-------------------+------------------+-------------+-------------------+------------------------+----------------------
public | test_table | ds | f | 0 | 4 | 1 | {20241104} | {1} | | | | |
(1 row)
Jika kolom tidak memiliki statistik, lihat bagian "Menampilkan tabel dengan statistik yang hilang" di bawah untuk mengidentifikasi penyebabnya.
Menampilkan tabel dengan statistik yang hilang
Hologres menyediakan tampilan HG_STATS_MISSING (nama tampilan sebenarnya mungkin berbeda tergantung versi) untuk memeriksa tabel di database saat ini yang kehilangan statistik, sehingga memudahkan mengidentifikasi objek yang memerlukan ANALYZE tambahan.
Untuk field spesifik dan metode penggunaan, lihat dokumentasi instans yang sesuai atau bantuan konsol.
Masalah umum dan troubleshooting
-
Kemungkinan alasan untuk 0 catatan yang dikembalikan dari tabel hologres_statistic.hg_table_statistic:
-
ANALYZE belum pernah dijalankan (baik secara manual maupun oleh AUTO ANALYZE);
-
AUTO ANALYZE tidak berfungsi, atau tabel belum memenuhi kondisi pemicu;
Tindakan yang disarankan:
-
Pertama, jalankan secara manual:
ANALYZE schema_name.table_name;
-
Jika tabel masih tidak dapat dicakup oleh AUTO ANALYZE untuk jangka waktu yang lama, disarankan untuk memeriksa sakelar AUTO ANALYZE dan konfigurasi GUC, atau menghubungi dukungan teknis.
-
Kemungkinan alasan untuk analyze_timestamp yang jelas usang:
-
AUTO ANALYZE telah dinonaktifkan atau dibatasi (seperti
autovacuum_enabled = false); -
AUTO ANALYZE memiliki sumber daya yang tidak mencukupi atau gagal (dapat diselidiki bersamaan dengan log/pemantauan);
Tindakan yang disarankan:
-
Jalankan ANALYZE secara manual sekali dan amati hasilnya;
-
Periksa:
-
Apakah
hg_enable_start_auto_analyze_workerdiaktifkan; -
Apakah
autovacuum_enabled = falsetelah diatur secara keliru atau batasan GUC terkait terlalu ketat; -
Periksa apakah terdapat error terkait tugas AUTO ANALYZE di Query Log.
-
-
Estimasi jumlah baris abnormal dalam rencana kueri (terlalu kecil atau terlalu besar secara signifikan)
-
Periksa apakah tabel yang sesuai kehilangan statistik atau memiliki statistik yang usang;
-
Periksa apakah kolom predikat memiliki statistik (pg_stats), dan lakukan ANALYZE tingkat kolom pada kolom kritis;
-
Periksa apakah fitur estimasi jumlah baris cepat telah dinonaktifkan atau belum diaktifkan.
-
Statistik induk-anak tidak konsisten untuk tabel partisi atau statistik yang hilang pada tabel induk
-
Gejala: Tabel partisi induk tidak memiliki catatan di
hologres_statistic.hg_table_statistic, atautotal_rowsjauh lebih kecil daripada jumlah semua jumlah baris tabel anak, atau distribusi MCV kolom partisi tabel induk sudah usang (misalnya, kolom ds di pg_stats kehilangan distribusi kemarin); -
Poin troubleshooting:
-
Periksa apakah ANALYZE partisi inkremental / AUTO ANALYZE telah dinonaktifkan;
-
SHOW hg_experimental_enable_incremental_analyze;
SHOW hg_experimental_enable_incremental_auto_analyze;
-
Gunakan tampilan
HG_STATS_MISSINGuntuk memeriksa apakah terdapat tabel anak yang tidak dapat digabung; -
Periksa apakah terdapat error terkait tugas AUTO ANALYZE di Query Log;
-
Jalankan secara manual
ANALYZE child_table;pada tabel anak dengan statistik yang hilang, atau jalankanANALYZE partition_parent_table;pada tabel induk selama jam sepi untuk membiarkan sistem mengisi dan menggabungkan statistik.
-
Kolom tertentu tidak memiliki statistik di pg_stats
-
Gejala: Tabel memiliki kolom tersebut, tetapi statistik kolom yang sesuai tidak dapat ditemukan di tampilan
pg_stats. -
Poin troubleshooting:
-
Periksa apakah statistik telah dinonaktifkan melalui atribut kolom (
enable_analyze = falseatauenable_auto_analyze = false);
-
SELECT attoptions
FROM pg_attribute
WHERE attrelid = 'tablename'::regclass::oid
AND attname = 'columnname';
-[ RECORD 1 ]----------------------
attoptions | {enable_analyze=false}
-
Konfirmasi apakah kolom telah berpartisipasi dalam ANALYZE (manual atau AUTO ANALYZE). Jika perlu, jalankan
ANALYZE table_name(col_name);tingkat kolom;
SELECT query_id,
application_name,
status,
query_start,
query
FROM hologres.hg_query_log
WHERE query_start >= now() - interval '1 hour'
AND application_name IN ('Hologres SQL Generated BY ANALYZE', 'Hologres SQL Generated BY AUTO ANALYZE')
AND query like '%tablename%'
ORDER BY query_start DESC
LIMIT 2;
-
Apakah kolom tersebut merupakan tipe khusus (
bytea,jsonb). -
Jika tabel telah menjalankan AUTO ANALYZE tetapi tidak ada kolom yang memiliki statistik, pertimbangkan apakah tugas AUTO ANALYZE dijalankan secara abnormal. Misalnya, periksa apakah AUTO ANALYZE mengalami timeout. Karena auto_analyze_work_statement_timeout default-nya 1 jam, jika tugas AUTO ANALYZE di
hologres.hg_query_logmemiliki durasi >= 3600000, dalam kasus ini, hanya informasi jumlah baris yang dikumpulkan tanpa statistik kolom.
-
AUTO ANALYZE telah dijalankan tetapi rencana kueri tidak membaik secara signifikan
-
Gejala: Catatan AUTO ANALYZE untuk tabel tertentu dapat dilihat di
hologres.hg_query_log, tetapi rencana kueri aktual masih menggunakan estimasi jumlah baris yang jelas tidak masuk akal atau urutan Join; -
Poin troubleshooting:
-
Periksa apakah AUTO ANALYZE mengalami timeout. Karena
auto_analyze_work_statement_timeoutdefault-nya 1 jam, jika tugas AUTO ANALYZE dihologres.hg_query_logmemiliki durasi >= 3600s, dalam kasus ini, hanya informasi jumlah baris yang dikumpulkan tanpa statistik kolom. -
Periksa apakah terdapat Hint, urutan Join tetap, atau GUC tingkat sesi lama (seperti
enable_nestloop, dll.) yang mengganggu pilihan pengoptimal; -
Lakukan
ANALYZEmanual pada tabel/kolom kritis dan kemudian jalankan kembali kueri. Jika masih tidak ada perbaikan, disarankan untuk menyelidiki lebih lanjut bersamaan dengan Query Log, log FE, atau dengan melaporkan ke dukungan teknis.
-
-
Masalah OOM / melebihi batas memori yang disebabkan oleh statistik
-
Gejala: Join multi-tabel kompleks melaporkan error
Query executor exceeded total memory limitation ..., atau rencana memilih strategi Join yang sangat tidak masuk akal (seperti Nested Loop tabel besar menggerakkan tabel besar, dll.); -
Poin troubleshooting:
-
Konfirmasi apakah tabel terkait kehilangan statistik atau memiliki statistik yang sangat usang (dengan menggabungkan catatan di
hg_table_statisticdan catatan eksekusi AUTO ANALYZE); -
Lakukan
ANALYZEtingkat kolom pada kolom Join dan kolom filter. Jika perlu, tingkatkan presisi sampling atau aktifkan fitur estimasi jumlah baris cepat; -
Jika masalah hanya terjadi dalam skenario distribusi data ekstrem atau puncak tertentu, konsultasikan dengan dukungan teknis untuk mengevaluasi apakah diperlukan penyesuaian model statistik atau GUC terkait (seperti ambang batas AUTO ANALYZE, batas memori, dll.).
-
Menjalankan ANALYZE dan AUTO ANALYZE dengan Serverless
Mulai dari Hologres V3.1, di instans Serverless atau instans dengan sumber daya komputasi Serverless yang diaktifkan, ANALYZE dan AUTO ANALYZE dapat dijalankan pada sumber daya Serverless untuk mengurangi tekanan CPU/memori pada instans itu sendiri.
Bagian ini menjelaskan perilaku khas dan konfigurasi yang direkomendasikan untuk ANALYZE manual dan AUTO ANALYZE dalam skenario Komputasi Serverless, bersamaan dengan GUC terkait.
ANALYZE manual dan komputasi Serverless
-
hg_serverless_computing_enable_analyze_statement-
Deskripsi: Mengontrol apakah pernyataan
ANALYZEmanual dapat dijalankan melalui tugas Serverless; -
Perilaku:
-
Ketika diatur ke
on(default), sistem mengizinkan pernyataan ANALYZE dialihkan ke sumber daya komputasi Serverless untuk eksekusi, meminimalkan dampak tugas statistik pada instans itu sendiri; -
Ketika diatur ke
off, ANALYZE dijalankan pada sumber daya instans lokal.
-
-
Rekomendasi khas:
-
Di instans Serverless, default-nya adalah
on, hanya mengizinkan sumber daya Serverless menyelesaikan tugas statistik; -
Ketika troubleshooting atau ketika ada persyaratan khusus untuk penggunaan sumber daya, Anda dapat sementara mengaturnya ke
offuntuk secara eksplisit menjalankan ANALYZE pada sumber daya lokal.
-
-
AUTO ANALYZE dan komputasi Serverless
Ketika menghasilkan tugas AUTO ANALYZE, sistem menentukan apakah akan menggunakan sumber daya Serverless dan bagaimana mengontrol perilaku tugas Serverless berdasarkan GUC berikut:
-
hg_auto_analyze_run_with_serverless_computing-
Deskripsi: Apakah tugas AUTO ANALYZE dijalankan melalui sumber daya komputasi Serverless. Default-nya adalah
offuntuk instans reguler danonuntuk instans Serverless. -
Perilaku:
-
Ketika diatur ke
on, tugas AUTO ANALYZE akan mengirim komputasi sampling ke kolam sumber daya Serverless; -
Ketika diatur ke
off, AUTO ANALYZE terus menyelesaikan statistik melalui sumber daya instans lokal.
-
-
-- Atur pada tingkat database
ALTER DATABASE datname SET hg_auto_analyze_run_with_serverless_computing = on;
-
hg_auto_analyze_serverless_computing_query_priority-
Deskripsi: Prioritas tugas AUTO ANALYZE Serverless, berkisar dari
1~5. Nilai lebih tinggi menunjukkan prioritas lebih tinggi. Default-nya adalah2; -
Perilaku:
-
Ketika AUTO ANALYZE Serverless diaktifkan, sistem mengatur prioritas yang sesuai untuk setiap tugas statistik melalui
SET hg_experimental_serverless_tasks_query_priority = <value>;; -
Ini berlaku ketika berbagi kolam sumber daya dengan tugas Serverless lain (seperti ETL dan kueri offline) untuk mengontrol kemampuan preemption tugas statistik dalam antrian keseluruhan;
-
-
Rekomendasi:
-
Di lingkungan produksi, biasanya dipertahankan pada prioritas menengah (seperti default
2atau ditingkatkan secara moderat ke3) untuk menghindari persaingan terlalu banyak sumber daya dengan pekerjaan bisnis inti; -
Untuk skenario dengan persyaratan sangat tinggi untuk ketepatan waktu statistik dan sumber daya Serverless yang cukup, prioritas dapat ditingkatkan secara tepat.
-
-
-
hg_auto_analyze_serverless_computing_enable_persisted_snapshot-
Deskripsi: Apakah akan menggunakan snapshot yang dipertahankan (
persisted snapshot) dalam tugas AUTO ANALYZE Serverless, yaitu mengontrol apakah akan melewati flush tambahan melaluiSET hg_experimental_enable_persisted_snapshot = on/off;; -
Default-nya adalah
offuntuk instans non-Serverless danonuntuk instans Serverless. -
Perilaku:
-
Ketika diatur ke
on, tugas statistik akan mencoba menggunakan kembali snapshot yang dipertahankan, mengurangi kebutuhan untuk memicu flush. Ini lebih cocok untuk statistik frekuensi tinggi atau skenario dengan banyak tabel partisi; -
Ketika diatur ke
off, tugas statistik akan mencoba menggunakan snapshot yang lebih mutakhir, yang cocok untuk skenario dengan persyaratan konsistensi yang lebih tinggi atau isolasi versi tertentu.
-
-
Rekomendasi:
-
Jangan sesuaikan kecuali diperlukan.
-
-
Rekomendasi penggunaan untuk skenario komputasi Serverless
-
Utamakan menggunakan Komputasi Serverless untuk menangani tugas ANALYZE berat
-
Ketika melakukan ANALYZE pada tabel atau tabel eksternal dengan volume data sangat besar, disarankan untuk mengaktifkan:
-
ANALYZE manual:
set hg_computing_resource = 'serverless'; ANALYZE my_table;; -
AUTO ANALYZE:
ALTER DATABASE mydb SET hg_auto_analyze_run_with_serverless_computing = on;;
-
-
Hal ini memindahkan tekanan komputasi statistik ke kolam sumber daya Serverless, mengurangi gangguan terhadap kueri online pada instans.
-
-
Atur prioritas tugas AUTO ANALYZE Serverless berdasarkan pentingnya bisnis
-
Di instans Serverless, untuk database bisnis kritis yang sensitif terhadap ketepatan waktu statistik dan bergantung pada statistik terbaru, Anda dapat secara tepat meningkatkan
hg_auto_analyze_serverless_computing_query_priority; -
Di instans reguler, menggunakan sumber daya lokal untuk AUTO ANALYZE biasanya sudah cukup.
-
-
Ikuti prinsip "percobaan langkah kecil" sebelum menyesuaikan parameter
-
GUC terkait Komputasi Serverless juga merupakan parameter lanjutan. Sebelum melakukan penyesuaian, disarankan untuk terlebih dahulu memverifikasi di lingkungan uji atau staging:
-
Amati antrian dan durasi eksekusi tugas statistik di kolam sumber daya Serverless;
-
Pantau dampak terhadap latensi dan penggunaan sumber daya kueri bisnis inti;
-
-
Setelah memastikan tidak ada efek samping signifikan, terapkan ke lingkungan produksi berdasarkan database atau secara bertahap.
-