Topik ini menjelaskan desain, prosedur, dan hasil pengujian benchmark TPC-H untuk PolarDB-X clustered columnar index (CCI).
Latar Belakang
TPC-H adalah benchmark decision support yang ditetapkan oleh Transaction Processing Performance Council (TPC) untuk mengevaluasi kemampuan database dalam menjalankan kueri analitis. Beban kerja TPC-H terdiri dari delapan tabel dan 22 kueri SQL kompleks, yang sebagian besar mencakup penggabungan tabel, subkueri, dan agregasi GROUP BY.
Implementasi TPC-H yang dijelaskan dalam topik ini didasarkan pada benchmark TPC-H resmi. Namun, pengujian ini tidak memenuhi semua persyaratan resmi, sehingga hasilnya tidak dapat dibandingkan dengan hasil benchmark TPC-H yang telah dipublikasikan.
Desain Pengujian
Ukuran Dataset
Pengujian ini menggunakan dataset berukuran 100 GB (Scale Factor = 100). Tabel utama meliputi:
LINEITEM: sekitar 600 juta baris
ORDERS: 150 juta baris
PART_SUPP: 80 juta baris
Spesifikasi instans uji
Spesifikasi node | Jumlah node | Ukuran dataset |
8c32g | 2/4 | 100 GB |
16c64g | 2/3/4/6 | 100 GB |
Spesifikasi Instans Uji Stres
ecs.g7.4xlarge (16 vCPU, 64 GB memory)
Prosedur
Langkah 1: Siapkan ECS untuk uji stres
Siapkan satu instans ECS. Anda akan menggunakan instans ini untuk semua operasi selanjutnya, seperti impor data dan menjalankan uji stres.
Deploy instans ECS dalam VPC. Catat nama dan ID VPC tersebut, karena semua instans berikutnya harus dideploy dalam VPC yang sama.
Kami merekomendasikan menggunakan sistem operasi CentOS untuk instans ECS dan memberikan alamat IP publik kepadanya.
Langkah 2: Siapkan instans PolarDB-X
Buat instans PolarDB-X. Untuk petunjuk lengkap, lihat Create an instance.
Pastikan instans PolarDB-X dan instans ECS untuk uji stres berada dalam VPC yang sama.
Tambahkan alamat IP internal instans ECS untuk uji stres ke daftar putih instans PolarDB-X.
Langkah 3: Sesuaikan parameter instans
Untuk mencapai performa optimal dalam uji stres, sesuaikan parameter compute node PolarDB-X.
Atur parameter XPROTO_MAX_DN_CONCURRENT menjadi 4000. Untuk petunjuk lengkap, lihat Parameter settings.
Hubungkan ke instans PolarDB-X menggunakan command-line interface (CLI). Dalam sesi yang sama, jalankan pernyataan SQL berikut untuk menonaktifkan pencatatan SQL, pengambilan sampel CPU, dan pengumpulan statistik otomatis.
set global RECORD_SQL = false; set global MPP_METRIC_LEVEL = 0; set global ENABLE_CPU_PROFILE = false; set global ENABLE_BACKGROUND_STATISTIC_COLLECTION=false; set global ENABLE_STATISTIC_FEEDBACK=false;
Langkah 4: Instal tool Benchmark Boot
Buka port 4121 di security group instans ECS untuk uji stres. Untuk informasi lebih lanjut, lihat Add a security group rule.
Login ke instans ECS untuk uji stres dan jalankan perintah
bash -c "$(curl -fsSL https://benchmark-boot.oss-cn-hangzhou.aliyuncs.com/setup.sh)"untuk menginstal Benchmark Boot. Untuk informasi lebih lanjut, lihat Download and install Benchmark Boot.Buka browser Anda dan akses http://{alamat IP publik instans uji stres}:4121. Halaman utama Benchmark Boot akan muncul, yang menandakan instalasi berhasil.
Langkah 5: Persiapkan data
Di konsol Benchmark Boot, navigasi ke Stress Test > Database Connection > Configure Database Connection. Konfigurasikan string koneksi PolarDB-X (alamat IP host, port, username, dan password). Masukkan nama database TPC-H, pilih AUTO untuk Database Creation Mode, lalu klik Submit.
Navigasi ke Stress Test > TPCH > Import TPC-H. Atur nilai Submit pertama ke 100 dan nilai Submit kedua ke 16. Klik Submit untuk mengimpor set data TPC-H 100 GB ke instans utama PolarDB-X.
CatatanSetelah data diimpor, Benchmark Boot secara otomatis menjalankan pernyataan
ANALYZE TABLEuntuk mengumpulkan statistik.Setelah dataset TPC-H 100 GB diimpor, jalankan pernyataan SQL berikut pada instans primary PolarDB-X untuk membuat clustered columnar index (CCI). Untuk informasi lebih lanjut, lihat Create and use CCIs.
create clustered columnar index `nation_col_index` on nation(`n_nationkey`) partition by hash(`n_nationkey`) partitions 1; create clustered columnar index `region_col_index` on region(`r_regionkey`) partition by hash(`r_regionkey`) partitions 1; create clustered columnar index `customer_col_index` on customer(`c_custkey`) partition by hash(`c_custkey`) partitions 64; create clustered columnar index `part_col_index` on part(`p_size`) partition by hash(`p_partkey`) partitions 64; create clustered columnar index `partsupp_col_index` on partsupp(`ps_partkey`) partition by hash(`ps_partkey`) partitions 64; create clustered columnar index `supplier_col_index` on supplier(`s_suppkey`) partition by hash(`s_suppkey`) partitions 64; create clustered columnar index `orders_col_index` on orders(`o_orderdate`,`o_orderkey`) partition by hash(`o_orderkey`) partitions 64; create clustered columnar index `lineitem_col_index` on lineitem(`l_shipdate`,`l_orderkey`) partition by hash(`l_orderkey`) partitions 64;CatatanAnda dapat menjalankan pernyataan
SHOW COLUMNAR INDEXuntuk melihat status CCI saat ini. Untuk informasi lebih lanjut, lihat SHOW COLUMNAR INDEX.Pembuatan CCI memerlukan waktu sekitar 45 menit.
Langkah 6: Tambahkan instans column store read-only
Tambahkan instans column store read-only ke instans primary PolarDB-X. Untuk petunjuk lengkap, lihat Add a read-only column store instance.
Tambahkan alamat IP internal instans ECS untuk uji stres ke daftar putih instans column store read-only PolarDB-X.
Langkah 7: Jalankan uji TPC-H
Di konsol Benchmark Boot, navigasi ke . Konfigurasikan string koneksi untuk instans column store read-only, masukkan nama database TPC-H, pilih AUTO untuk Database Creation Mode, lalu klik Submit.
Navigasi ke Stress Test > TPCH > Run TPCH. Pilih Submit, masukkan deskripsi tugas, lalu klik Submit untuk menjalankan 22 kueri benchmark TPC-H.
Navigasi ke untuk melihat hasil akhir pengujian.
CatatanEksekusi benchmark pertama memerlukan warm-up. Untuk hasil yang stabil, kami merekomendasikan menjalankan pengujian beberapa kali.
Hasil Pengujian
Semua waktu eksekusi dalam satuan detik (s).
Kueri | 8c32g * 2 | 8c32g * 4 | 16c64g * 2 | 16c64g * 3 | 16c64g * 4 | 16c64g * 6 |
Q1 | 5,9 | 3,99 | 4,37 | 1,6 | 1,22 | 0,86 |
Q2 | 2,41 | 1,68 | 1,63 | 1,15 | 1,04 | 0,86 |
Q3 | 4,18 | 2,13 | 2,43 | 1,77 | 1,20 | 0,88 |
Q4 | 3,72 | 1,02 | 0,94 | 0,78 | 0,48 | 0,44 |
Q5 | 5,63 | 3,12 | 3,27 | 2,05 | 1,68 | 1,4 |
Q6 | 0,41 | 0,38 | 0,42 | 0,18 | 0,15 | 0,13 |
Q7 | 5,47 | 2,94 | 2,93 | 2,08 | 1,72 | 1,34 |
Q8 | 3,61 | 2,31 | 1,98 | 1,81 | 1,68 | 1,51 |
Q9 | 13,6 | 6,91 | 7,46 | 4,93 | 3,85 | 3.11 |
Q10 | 6,36 | 3,12 | 3,5 | 2,31 | 1,73 | 1,26 |
Q11 | 1,51 | 0,64 | 0,74 | 0,53 | 0,49 | 0,35 |
Q12 | 1,86 | 0,82 | 0,78 | 0,57 | 0,40 | 0,35 |
Q13 | 8,85 | 4,29 | 4,44 | 2,6 | 1,64 | 1,2 |
Q14 | 0,94 | 0,58 | 0,7 | 0,51 | 0,38 | 0,31 |
Q15 | 1,26 | 0,76 | 0,88 | 0,59 | 0,47 | 0,37 |
Q16 | 2,3 | 1 | 1,19 | 0,75 | 0,61 | 0,46 |
Q17 | 1,86 | 0,75 | 0,69 | 0,47 | 0,43 | 0,49 |
Q18 | 8,43 | 4,18 | 4,43 | 3,16 | 2,19 | 1,6 |
Q19 | 4,92 | 2,16 | 1,86 | 1,07 | 1,02 | 0,73 |
Q20 | 1,88 | 1,34 | 1,17 | 0,73 | 0,78 | 0,73 |
Q21 | 12,05 | 3,18 | 3.11 | 2,38 | 1,72 | 1,57 |
Q22 | 2,67 | 1,25 | 1,39 | 0,98 | 0,66 | 0,61 |
Total time | 99,82 | 48,55 | 50,31 | 33,00 | 25,54 | 20,56 |