Tema ini menjelaskan cara menguji kinerja Pemrosesan Transaksi Online (OLTP) dari kluster PolarDB for MySQL menggunakan SysBench.
Alat Uji
SysBench adalah alat pengujian kinerja open source dan lintas platform yang digunakan untuk benchmarking database (seperti MySQL) serta evaluasi kinerja sistem (seperti CPU, memori, I/O, dan thread). Alat ini mendukung pengujian multi-threaded dan dapat secara fleksibel mengontrol logika pengujian melalui skrip Lua, sehingga cocok untuk evaluasi kinerja database dan uji stres.
Lingkungan Pengujian
Instance Elastic Compute Service (ECS) dan kluster PolarDB for MySQL berada di wilayah, zona, dan Virtual Private Cloud (VPC) yang sama.
CatatanInstance ECS dan kluster PolarDB for MySQL harus berada dalam VPC yang sama. Latensi ping instance ECS harus kurang dari 0,2 ms untuk memastikan validitas evaluasi kinerja.
Kluster PolarDB for MySQL yang digunakan dalam teks:
Kluster dua node (satu node utama dan satu node baca-saja) digunakan untuk pengujian kinerja baca-saja, tulis-saja, dan baca-tulis.
Titik akhir yang digunakan mencakup titik akhir utama, titik akhir kluster, dan titik akhir kustom. Selama pengujian sebenarnya, kombinasi string koneksi disesuaikan secara fleksibel sesuai kebutuhan untuk memastikan pemanfaatan maksimal sumber daya kluster.
Instance ECS yang digunakan dalam pengujian:
Tipe instansinya adalah ecs.c5.4xlarge (16 core, 32 GB memori).
Gambar instansinya adalah CentOS 7.0 64-bit.
Jumlah instansinya bergantung pada kluster PolarDB. Jika node komputasi memiliki 8 core, satu instance ECS digunakan. Jika node komputasi memiliki 16 core, dua instance ECS digunakan, dan seterusnya.
Konfigurasi parameter kluster PolarDB for MySQL:
Dalam skenario pengujian konkurensi tinggi, pesan kesalahan "
can't create more than max_prepared_stmt_count statements" mungkin muncul dan pengujian mungkin gagal. Untuk mengatasi masalah ini, Anda dapat meningkatkan nilai parametermax_prepared_stmt_countuntuk mengizinkan lebih banyak pernyataan yang disiapkan. Untuk informasi lebih lanjut, lihat Konfigurasikan parameter kluster dan node.Dalam skenario berskala besar dengan konkurensi tinggi, bahkan menetapkan parameter
max_prepared_stmt_countke nilai maksimum mungkin tidak memenuhi persyaratan. Untuk memastikan pengujian kinerja yang lancar, Anda dapat menonaktifkan fitur Prepared Statement dengan menambahkan parameter--db-ps-mode=disableke perintah pengujian Anda.Untuk kluster berskala besar (88 core atau lebih), penyesuaian parameter tambahan diperlukan untuk sepenuhnya memanfaatkan sumber daya kluster. Parameter penyesuaian spesifik tergantung pada tipe instansi dan skenario bisnis pada halaman pengujian. Kami merekomendasikan Anda melakukan evaluasi kinerja menyeluruh sebelum menerapkan optimasi dan menyesuaikan parameter berdasarkan hasil aktual.
Catatan Penggunaan
Pengujian ini secara konsisten menggunakan dataset dengan 250 tabel, masing-masing berisi 25.000 baris. Jumlah thread ditingkatkan secara bertahap dari nilai rendah ke nilai lebih tinggi. Hanya hasil kinerja puncak yang ditampilkan pada halaman detail pengujian kinerja.
Skenario Pengujian
Lakukan pengujian performa OLTP untuk mengevaluasi performa hanya-baca, hanya-tulis, dan baca-tulis dari kluster dengan spesifikasi khusus yang berbeda. Setiap kluster terdiri dari satu node utama dan satu node hanya-baca.
Metrik
Transaksi per detik (TPS): jumlah transaksi yang dilakukan per detik di database. Hanya transaksi yang telah dikomit yang dihitung.
Kueri per detik (QPS): jumlah pernyataan SQL yang dieksekusi per detik di database, termasuk pernyataan INSERT, SELECT, UPDATE, dan DELETE.
Instal Sysbench
Anda harus menjalankan perintah dalam topik ini sebagai pengguna root.
Jalankan perintah berikut pada instance ECS untuk menginstal SysBench.
git clone https://github.com/akopytov/sysbench.git ## Unduh SysBench dari Git. cd sysbench ## Navigasi ke direktori Sysbench. ./autogen.sh ## Jalankan autogen.sh. ./configure make -j ## Kompilasi kode sumber. make installJalankan perintah berikut untuk mengonfigurasi klien SysBench sehingga kernel dapat menggunakan semua core CPU untuk memproses paket (pengaturan default adalah 2 core) dan mengurangi pergantian konteks antar core CPU.
sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffff>$x/rps_cpus; done'Catatanffff menunjukkan penggunaan 16 core. Ubah nilai ini berdasarkan konfigurasi aktual Anda. Misalnya, jika instance ECS Anda memiliki 8 core, masukkan
ff. Untuk 16 core, masukkanffff, dan sesuaikan untuk jumlah core lainnya.sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"
Prosedur Pengujian
Prosedur pengujian berikut menggunakan kluster PolarDB for MySQL kluster sebagai contoh.
Dapatkan titik akhir dan port dari kluster PolarDB for MySQL. Untuk informasi lebih lanjut, lihat Kelola titik akhir.
Setel parameter Primary Node Accepts Read Requests dari kluster PolarDB for MySQL ke Yes. Untuk informasi lebih lanjut, lihat Konfigurasikan PolarProxy.
Sambungkan ke database.
Jalankan perintah berikut pada instance ECS untuk membuat database bernama PolarDB for MySQL
testdbdi kluster.mysql -h XXX -P XXX -u XXX -p XXX -e 'create database testdb'CatatanGanti
XXXdalam perintah ini dan perintah selanjutnya dengan titik akhir kluster, nomor port, nama pengguna, dan kata sandi dari kluster PolarDB for MySQL Anda. Tabel berikut menjelaskan parameter-parameter tersebut.Parameter
Deskripsi
-hTitik akhir kluster dari kluster PolarDB for MySQL.
-PNomor port dari kluster PolarDB for MySQL.
-uNama pengguna dari kluster PolarDB for MySQL.
-pKata sandi untuk nama pengguna.
Lakukan pengujian untuk skenario tertentu.
Skenario Baca-Saja (OLTP Baca-Saja)
CatatanDalam skenario baca-saja, parameter
--range-selects=0digunakan. Konfigurasi ini menonaktifkan kueri rentang dan secara efektif menguji skenariooltp_point_selects, yang berfokus pada kueri seleksi titik.Siapkan data.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only prepareJalankan pengujian baca-saja.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only runBersihkan data teks.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only cleanup
Parameter Utama:
Parameter
Konten yang Ditampilkan
Deskripsi
tables
Jumlah tabel
Jumlah total tabel yang terlibat dalam pengujian.
table_size
Jumlah baris per tabel
Jumlah baris di setiap tabel.
Volume data
Volume data total tabel, dinyatakan dalam unit penyimpanan seperti MB atau GB.
threads
Jumlah thread konkuren
Jumlah thread yang saat ini dikonfigurasi.
Status thread
Status operasi thread.
Skema Baca-Tulis (OLTP Baca-Tulis)
CatatanPengujian mensimulasikan beban kerja bisnis tipikal dengan campuran operasi baca dan tulis.
Parameter inti seperti tables, table_size, dan threads ditampilkan secara individual untuk setiap kasus pengujian pada halaman data pengujian.
Siapkan data.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write prepareJalankan pengujian baca-tulis.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write runBersihkan data pengujian.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write cleanup
Parameter Utama:
Parameter
Konten yang Ditampilkan
Deskripsi
tables
Jumlah tabel
Jumlah total tabel yang terlibat dalam pengujian.
table_size
Jumlah baris per tabel
Jumlah baris di setiap tabel.
Volume data
Volume data total tabel, dinyatakan dalam unit penyimpanan seperti MB atau GB.
threads
Jumlah thread konkuren
Jumlah thread yang saat ini dikonfigurasi.
Status thread
Status operasi thread.
Pengujian Tulis-Saja (OLTP Tulis-Saja)
CatatanParameter inti seperti tables, table_size, dan threads ditampilkan secara individual untuk setiap kasus pengujian pada halaman data pengujian.
Siapkan data.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only prepareJalankan pengujian tulis-saja.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only runBersihkan data.
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only cleanup
Parameter Utama:
Parameter
Konten yang Ditampilkan
Deskripsi
tables
Jumlah tabel
Jumlah total tabel yang terlibat dalam pengujian.
table_size
Jumlah baris per tabel
Jumlah baris di setiap tabel.
Volume data
Volume data total tabel, dinyatakan dalam unit penyimpanan seperti MB atau GB.
threads
Jumlah thread konkuren
Jumlah thread yang saat ini dikonfigurasi.
Status thread
Status operasi thread.
Referensi
Untuk informasi tentang hasil pengujian PolarDB for MySQL 8.0.2, lihat Hasil pengujian kinerja PolarDB for MySQL 8.0.2 (Edisi Kluster).
Untuk informasi tentang hasil pengujian PolarDB for MySQL 8.0.1, lihat Hasil pengujian kinerja PolarDB for MySQL 8.0.1 Edisi Kluster.
Untuk informasi tentang hasil pengujian PolarDB for MySQL 5.7, lihat Hasil pengujian kinerja PolarDB for MySQL 5.7 (Edisi Kluster).
Untuk informasi tentang hasil pengujian PolarDB for MySQL 5.6, lihat Hasil pengujian kinerja PolarDB for MySQL 5.6 (Edisi Kluster).
Untuk informasi tentang perbandingan antara hasil pengujian PolarDB for MySQL dan hasil pengujian RDS MySQL, lihat Perbandingan kinerja antara PolarDB for MySQL dan ApsaraDB RDS for MySQL.