All Products
Search
Document Center

PolarDB:Kueri paralel untuk data dingin

Last Updated:Mar 29, 2026

Elastic Parallel Query (ePQ) mempercepat kueri terhadap data dingin yang disimpan dalam tabel OSS dengan mendistribusikan beban kerja ke beberapa thread pekerja—baik pada satu node maupun secara simultan di beberapa node.

Cara kerja

ePQ menetapkan tugas pemindaian independen kepada Parallel Worker. Setiap pekerja membaca sebagian data CSV dalam tabel OSS secara konkuren, lalu hasilnya diagregasi. Tingkat paralelisme dikendalikan oleh jumlah pekerja dan jumlah node yang terlibat.

image
Kueri paralel pada data dingin hanya mendukung format CSV.

Versi yang didukung

Semua mode memerlukan Enterprise Edition.

ModeMesin databaseVersi revisi minimum
Kueri paralel node tunggal (MySQL 8.0.1)MySQL 8.0.18.0.1.1.34
Kueri paralel node tunggal (MySQL 8.0.2)MySQL 8.0.28.0.2.2.24
Kueri paralel multi-nodeMySQL 8.0.28.0.2.2.24

Prasyarat

Sebelum memulai, pastikan Anda telah:

image
loose_csv_max_oss_threads mengontrol jumlah maksimum thread OSS yang berjalan secara paralel pada satu node. Nilai yang valid: 1–100. Default: 1. Pada nilai default 1, kueri paralel dinonaktifkan. Setiap thread OSS mengonsumsi memori sebesar 128 MB, jadi atur parameter ini berdasarkan memori kluster yang tersedia.

Jalankan kueri paralel pada data dingin

Contoh di bawah menggunakan set data TPC-H tetapi tidak memenuhi semua persyaratan pengujian benchmark TPC-H resmi. Hasilnya tidak dapat dibandingkan dengan hasil benchmark TPC-H yang dipublikasikan. Untuk detailnya, lihat TPC-H dataset.

Contoh-contoh berikut menggunakan tabel bernama lineitem yang diarsipkan ke OSS dalam format CSV:

mysql> show create table lineitem;
*************************** 1. row ***************************
       Table: lineitem
Create Table: CREATE TABLE `lineitem` (
  `l_orderkey` int(11) NOT NULL,
  `l_partkey` int(11) NOT NULL,
  `l_suppkey` int(11) NOT NULL,
  `l_linenumber` int(11) NOT NULL,
  `l_quantity` decimal(10,2) NOT NULL,
  `l_extendedprice` decimal(10,2) NOT NULL,
  `l_discount` decimal(10,2) NOT NULL,
  `l_tax` decimal(10,2) NOT NULL,
  `l_returnflag` char(1) NOT NULL,
  `l_linestatus` char(1) NOT NULL,
  `l_shipDATE` date NOT NULL,
  `l_commitDATE` date NOT NULL,
  `l_receiptDATE` date NOT NULL,
  `l_shipinstruct` char(25) NOT NULL,
  `l_shipmode` char(10) NOT NULL,
  `l_comment` varchar(44) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 /*!99990 800020204 NULL_MARKER='NULL' */ CONNECTION='default_oss_server'

1 row in set (0.00 sec)

Untuk mengaktifkan kueri paralel, tambahkan petunjuk /*+ PARALLEL(N) */ ke kueri Anda, di mana N adalah jumlah pekerja per node. Untuk memverifikasi apakah kueri paralel aktif, jalankan EXPLAIN dan periksa kolom Extra:

Extra nilai kolomMakna
Parallel scan (N workers)Kueri paralel aktif; N adalah jumlah total thread pekerja di semua node yang berpartisipasi
MPP (N nodes)Kueri paralel multi-node aktif; N adalah jumlah node yang berpartisipasi

Total paralelisme = pekerja per node × jumlah node.

Kueri serial

Tanpa petunjuk tersebut, kueri dijalankan dalam satu thread. Kolom Extra menampilkan Using where tanpa Parallel scan:

mysql> explain SELECT
    ->     sum(l_extendedprice * l_discount) AS revenue
    -> FROM
    ->     lineitem
    -> WHERE
    ->     l_shipdate >= date '1994-01-01'
    ->     AND l_shipdate < date '1994-01-01' + interval '1' year
    ->     AND l_discount between 0.05 - 0.01 AND 0.05 + 0.01
    ->     AND l_quantity < 24;

+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows     | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------------+
|  1 | SIMPLE      | lineitem | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 61560489 |     0.41 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------------+

1 row in set, 1 warning (1.23 sec)

Tabel dipindai dan diagregasi secara berurutan dalam satu thread.

Kueri paralel node tunggal

Tambahkan /*+ PARALLEL(4) */ untuk mendistribusikan pemindaian ke 4 pekerja pada node saat ini. Parallel scan (4 workers) pada kolom Extra mengonfirmasi bahwa kueri paralel aktif:

mysql> explain SELECT /*+ PARALLEL(4) */
    ->     sum(l_extendedprice * l_discount) AS revenue
    -> FROM
    ->     lineitem
    -> WHERE
    ->     l_shipdate >= date '1994-01-01'
    ->     AND l_shipdate < date '1994-01-01' + interval '1' year
    ->     AND l_discount between 0.05 - 0.01 AND 0.05 + 0.01
    ->     AND l_quantity < 24;
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+----------------------------------------+
| id | select_type | table       | partitions | type | possible_keys | key  | key_len | ref  | rows     | filtered | Extra                                  |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+----------------------------------------+
|  1 | SIMPLE      | <gather1.1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |        4 |   100.00 | NULL                                   |
|  1 | SIMPLE      | lineitem    | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 15390122 |     0.41 | Parallel scan (4 workers); Using where |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+----------------------------------------+

2 rows in set, 1 warning (2.17 sec)

Empat pekerja berjalan secara paralel pada node saat ini, memberikan throughput sekitar 4 kali lipat dibandingkan kueri single-thread.

Kueri paralel multi-node

Ketika beberapa node berpartisipasi, kolom Extra menampilkan Parallel scan (N workers) dan MPP (N nodes). Di sini, Parallel scan (8 workers) berarti total 8 pekerja aktif di semua node, dan MPP (2 nodes) berarti 2 node berpartisipasi—masing-masing menjalankan 4 pekerja:

mysql> explain SELECT /*+ PARALLEL(4) */
    ->     sum(l_extendedprice * l_discount) AS revenue
    -> FROM
    ->     lineitem
    -> WHERE
    ->     l_shipdate >= date '1994-01-01'
    ->     AND l_shipdate < date '1994-01-01' + interval '1' year
    ->     AND l_discount between 0.05 - 0.01 AND 0.05 + 0.01
    ->     AND l_quantity < 24;
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------------------------------------------------------+
| id | select_type | table       | partitions | type | possible_keys | key  | key_len | ref  | rows     | filtered | Extra                                                 |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------------------------------------------------------+
|  1 | SIMPLE      | <gather1.1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |        1 |   100.00 | NULL                                                  |
|  1 | SIMPLE      | lineitem    | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 59986051 |     0.41 | Parallel scan (8 workers); MPP (2 nodes); Using where |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------------------------------------------------------+

2 rows in set, 1 warning (0.00 sec)

Dengan 2 node dan total 8 pekerja, throughput kueri sekitar 8 kali lipat dibandingkan kueri single-thread.

Pemecahan masalah

Jika EXPLAIN tidak menampilkan Parallel scan pada kolom Extra, kueri paralel tidak diaktifkan. Periksa hal-hal berikut:

KondisiPerbaikan
loose_csv_max_oss_threads bernilai 1 (default)Atur ke 2 atau lebih tinggi
Data dingin tidak dalam format CSVKonversi data ke format CSV sebelum mengarsipkan
Versi kluster tidak memenuhi persyaratan minimumTingkatkan ke versi revisi yang didukung (lihat Supported versions)
ePQ tidak diaktifkanAktifkan ePQ (lihat Enable elastic parallel query)