全部产品
Search
文档中心

Data Transmission Service:Makalah Putih Kinerja

更新时间:Jul 06, 2025

Topik ini menjelaskan lingkungan pengujian, alat pengujian, metode pengujian, dan hasil pengujian dari pengujian kinerja Data Transmission Service (DTS). Tugas sinkronisasi data satu arah antara instance ApsaraDB RDS for MySQL digunakan sebagai contoh.

Lingkungan pengujian

Informasi tentang database sumber dan tujuan

Catatan

Fitur ekspansi penyimpanan otomatis diaktifkan untuk instance ApsaraDB RDS for MySQL yang digunakan dalam pengujian.

Database

Wilayah

Tipe

Versi

Spesifikasi

CPU

Memori

Database sumber

Cina (Hangzhou)

Instance Standar ApsaraDB RDS for MySQL yang menjalankan Edisi Ketersediaan Tinggi RDS

8.0

mysql.x4.xlarge.2c (dedicated)

8

32 GB

Database tujuan

Klien

Catatan

Tambahkan alamat IP dari instance ECS yang akan digunakan sebagai klien ke daftar putih alamat IP dari instance ApsaraDB RDS for MySQL. Untuk informasi lebih lanjut, lihat Konfigurasikan Daftar Putih Alamat IP.

Tipe

Wilayah

Tipe jaringan

Sistem Operasi

Spesifikasi

vCPU

Memori

IP Publik dialokasikan atau tidak

Instance ECS

Cina (Hangzhou)

VPC

Catatan

VPC dan vSwitch dari instance ECS sama dengan yang dimiliki oleh instance ApsaraDB RDS for MySQL.

CentOS 7.9 64-bit

ecs.c7.8xlarge (tipe komputasi teroptimalkan c7)

32

64

Ya

Alat Pengujian

Pengenalan

Alat

Versi

Deskripsi

SysBench

1.0.20

Alat benchmark modular yang dapat menggunakan beberapa thread untuk menguji kinerja sistem database yang berat di berbagai platform. Data metrik inti membantu Anda dengan cepat mempelajari tentang kinerja sistem database.

BenchmarkSQL

5.0 (berbasis Java 8)

Alat pengujian kinerja database open-source yang dapat mensimulasikan beban kerja Pemrosesan Transaksi Online (OLTP) untuk evaluasi kinerja dan pengujian stres sistem database.

Instal Alat

Instal Sysbench

  1. Unduh dan instal Sysbench pada instance ECS.

    # Instal pustaka dependensi Sysbench.
    yum -y install make automake libtool pkgconfig libaio-devel
    yum -y install mariadb-devel openssl-devel
    
    # Unduh kode sumber Sysbench.
    wget "https://codeload.github.com/akopytov/sysbench/zip/refs/tags/1.0.20" -O sysbench-1.0.20.zip
    
    # Instal utilitas Unzip.
    yum -y install unzip
    
    # Ekstrak kode sumber.
    unzip sysbench-1.0.20.zip
    
    # Kompilasi kode sumber.
    cd sysbench-1.0.20
    ./autogen.sh
    ./configure
    sed -i 's/MYSQL_OPT_COMPRESSION_ALGORITHMS/MYSQL_OPT_COMPRESS/g' ./src/drivers/mysql/drv_mysql.c
    make -j
    
    # Instal Sysbench.
    make install
  2. Siapkan skrip Lua untuk skenario berikut: tabel besar (dm_large_table_write_only.lua), pembaruan data panas (dm_hot_update_only.lua), dan sinkronisasi DDL (dm_ddl_only.lua).

    Skrip Lua

    dm_large_table_write_only.lua

    #!/usr/bin/env sysbench
    -- Copyright (C) 2006-2017 Alexey Kopytov <akopytov@gmail.com>
    
    -- Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikannya kembali dan/atau memodifikasinya
    -- di bawah ketentuan GNU General Public License sebagaimana diterbitkan oleh
    -- Free Software Foundation; baik versi 2 dari Lisensi tersebut, atau
    -- (atas pilihan Anda) versi lainnya.
    
    -- Program ini didistribusikan dengan harapan bahwa itu akan berguna,
    -- tetapi TANPA JAMINAN APA PUN; tanpa bahkan jaminan tersirat dari
    -- KELAYAKAN UNTUK DIPERJUALBELIKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat
    -- GNU General Public License untuk detail lebih lanjut.
    
    -- Anda seharusnya telah menerima salinan GNU General Public License
    -- bersama dengan program ini; jika tidak, tulis ke Free Software
    -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    
    -- ----------------------------------------------------------------------
    -- Benchmark tabel besar untuk migrasi data
    -- ----------------------------------------------------------------------
    require("oltp_common")
    
    local function get_table_num()
       return sysbench.rand.uniform(1, sysbench.opt.tables)
    end
    
    local function get_id()
       return sysbench.rand.default(1, sysbench.opt.table_size)
    end
    
    -- Hasilkan template string besar, ukuran 1024 * 50
    local function get_large_templete()
       local large_temp = ""
       for i=1,1024 do
          large_temp = large_temp .. "#########-#########-#########-#########-#########-"
       end
       return large_temp
    end
    
    -- Hasilkan template string besar, ukuran 1024 * 50
    local large_template = get_large_templete()
    
    -- Hasilkan nilai besar, ukuran 1024 * 50
    local function get_large_value()
       return sysbench.rand.string(large_template)
    end
    
    function large_create_table(drv, con, table_num)
       if drv:name() == "mysql"
       then
          print(string.format("Membuat tabel mysql 'sbtest%d'...", table_num))
       else
          error("Driver database tidak didukung:" .. drv:name())
       end
    
       query = string.format([[
    CREATE TABLE sbtest%d(
      id int not null auto_increment,
      k INTEGER DEFAULT '0' NOT NULL,
      c longtext,
      pad longtext,
      primary key (id)
    ) ]],table_num)
    
       con:query(query)
    
       if (sysbench.opt.table_size > 0) then
          print(string.format("Menyisipkan %d catatan ke 'sbtest%d'",
                              sysbench.opt.table_size, table_num))
       end
       query = "INSERT INTO sbtest" .. table_num .. "(k, c, pad) VALUES"
       con:bulk_insert_init(query)
    
       for i = 1, sysbench.opt.table_size do
    
          local large_value = get_large_value()
          query = string.format("(%d, '%s', '%s')",
                                   sysbench.rand.default(1, sysbench.opt.table_size),
                                   large_value, large_value)
          con:bulk_insert_next(query)
       end
    
       con:bulk_insert_done()
    
       if sysbench.opt.create_secondary then
          print(string.format("Membuat indeks sekunder pada 'sbtest%d'...",
                              table_num))
          con:query(string.format("CREATE INDEX k_%d ON sbtest%d(k)",
                                  table_num, table_num))
       end
    end
    
    
    function execute_delete_inserts_large()
       local tnum = get_table_num()
    
       for i = 1, sysbench.opt.delete_inserts do
          local id = get_id()
          local k = get_id()
    
          param[tnum].deletes[1]:set(id)
    
          param[tnum].inserts[1]:set(id)
          param[tnum].inserts[2]:set(k)
          param[tnum].inserts[3]:set_rand_str(large_template)
          param[tnum].inserts[4]:set_rand_str(large_template)
    
          stmt[tnum].deletes:execute()
          stmt[tnum].inserts:execute()
       end
    end
    
    function execute_non_index_updates_large()
       local tnum = get_table_num()
    
       for i = 1, sysbench.opt.non_index_updates do
          param[tnum].non_index_updates[1]:set_rand_str(large_template)
          param[tnum].non_index_updates[2]:set(get_id())
    
          stmt[tnum].non_index_updates:execute()
       end
    end
    
    local t = sysbench.sql.type
    local stmt_defs = {
       point_selects = {
          "SELECT c FROM sbtest%u WHERE id=?",
          t.INT},
       simple_ranges = {
          "SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ?",
          t.INT, t.INT},
       sum_ranges = {
          "SELECT SUM(k) FROM sbtest%u WHERE id BETWEEN ? AND ?",
           t.INT, t.INT},
       order_ranges = {
          "SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c",
           t.INT, t.INT},
       distinct_ranges = {
          "SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c",
          t.INT, t.INT},
       index_updates = {
          "UPDATE sbtest%u SET k=k+1 WHERE id=?",
          t.INT},
       non_index_updates = {
          "UPDATE sbtest%u SET c=? WHERE id=?",
          {t.CHAR, 51200}, t.INT},
       deletes = {
          "DELETE FROM sbtest%u WHERE id=?",
          t.INT},
       inserts = {
          "INSERT INTO sbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)",
          t.INT, t.INT, {t.CHAR, 51200}, {t.CHAR, 51200}},
    }
    
    function prepare_for_each_large_table(key)
       for t = 1, sysbench.opt.tables do
          stmt[t][key] = con:prepare(string.format(stmt_defs[key][1], t))
    
          local nparam = #stmt_defs[key] - 1
    
          if nparam > 0 then
             param[t][key] = {}
          end
    
          for p = 1, nparam do
             local btype = stmt_defs[key][p+1]
             local len
    
             if type(btype) == "table" then
                len = btype[2]
                btype = btype[1]
             end
             if btype == sysbench.sql.type.VARCHAR or
                btype == sysbench.sql.type.CHAR then
                   param[t][key][p] = stmt[t][key]:bind_create(btype, len)
             else
                param[t][key][p] = stmt[t][key]:bind_create(btype)
             end
          end
    
          if nparam > 0 then
             stmt[t][key]:bind_param(unpack(param[t][key]))
          end
       end
    end
    
    -- Timpa fungsi create_table oltp_common  
    create_table = large_create_table
    
    -- Timpa fungsi prepare_for_each_table oltp_common  
    prepare_for_each_table = prepare_for_each_large_table
    
    -- Timpa fungsi execute_delete_inserts oltp_common  
    execute_delete_inserts = execute_delete_inserts_large
    
    -- Timpa fungsi execute_non_index_updates oltp_common  
    execute_non_index_updates = execute_non_index_updates_large
    
    function prepare_statements()
       if not sysbench.opt.skip_trx then
          prepare_begin()
          prepare_commit()
       end
    
       prepare_index_updates()
       prepare_non_index_updates()
       prepare_delete_inserts()
    end
    
    function event()
       if not sysbench.opt.skip_trx then
          begin()
       end
    
       execute_index_updates()
       execute_non_index_updates()
       execute_delete_inserts()
    
       if not sysbench.opt.skip_trx then
          commit()
       end
    end

    dm_hot_update_only.lua

    #!/usr/bin/env sysbench
    -- Copyright (C) 2006-2017 Alexey Kopytov <akopytov@gmail.com>
    
    -- Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikannya kembali dan/atau memodifikasinya
    -- di bawah ketentuan GNU General Public License sebagaimana diterbitkan oleh
    -- Free Software Foundation; baik versi 2 dari Lisensi tersebut, atau
    -- (atas pilihan Anda) versi lainnya.
    
    -- Program ini didistribusikan dengan harapan bahwa itu akan berguna,
    -- tetapi TANPA JAMINAN APA PUN; tanpa bahkan jaminan tersirat dari
    -- KELAYAKAN UNTUK DIPERJUALBELIKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat
    -- GNU General Public License untuk detail lebih lanjut.
    
    -- Anda seharusnya telah menerima salinan GNU General Public License
    -- bersama dengan program ini; jika tidak, tulis ke Free Software
    -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    
    -- ----------------------------------------------------------------------
    -- Benchmark pembaruan panas untuk migrasi data
    -- ----------------------------------------------------------------------
    require("oltp_common")
    
    function create_hot_update_table(drv, con, table_num)
       local query
       if table_num < 3
       then
          query = string.format([[
             CREATE TABLE IF NOT EXISTS sbtest%d(
               id int not null auto_increment,
               k INTEGER DEFAULT '0' NOT NULL,
               primary key (id)
             )]], table_num)
                con:query(query)
          query = string.format([[
             CREATE PROCEDURE generate_hot_update_sbtest%d (IN id_val int(11), IN update_count int(11) )
             BEGIN
               DECLARE i int default 1;
               INSERT IGNORE INTO sbtest%d (id,k) values(id_val,id_val); 
               WHILE i<=update_count DO
                   UPDATE sbtest%d SET k=k+1 where id=id_val; 
                   SET i = i + 1;
               END WHILE;
             END]], table_num, table_num, table_num)
                con:query(query)
       else
          print(string.format("Abaikan pembuatan tabel sbtest%d",table_num))
       end
    end
    
    -- Timpa fungsi create_table oltp_common  
    create_table = create_hot_update_table
    
    function prepare_statements()
    end
    
    local function get_table_num()
       return sysbench.rand.uniform(1, 2)
    end
    
    local function get_id()
       return sysbench.rand.default(1, 10)
    end
    
    function event()
       local table_id
       local query
       local id_val
    
       id_val = get_id()
    
       table_id = get_table_num()
       query = string.format("CALL generate_hot_update_sbtest%d(%d,10)",table_id, id_val)
       con:query(query)
    end
    

    dm_ddl_only.lua

    #!/usr/bin/env sysbench
    -- Copyright (C) 2006-2017 Alexey Kopytov <akopytov@gmail.com>
    
    -- Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikannya kembali dan/atau memodifikasinya
    -- di bawah ketentuan GNU General Public License sebagaimana diterbitkan oleh
    -- Free Software Foundation; baik versi 2 dari Lisensi tersebut, atau
    -- (atas pilihan Anda) versi lainnya.
    
    -- Program ini didistribusikan dengan harapan bahwa itu akan berguna,
    -- tetapi TANPA JAMINAN APA PUN; tanpa bahkan jaminan tersirat dari
    -- KELAYAKAN UNTUK DIPERJUALBELIKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat
    -- GNU General Public License untuk detail lebih lanjut.
    
    -- Anda seharusnya telah menerima salinan GNU General Public License
    -- bersama dengan program ini; jika tidak, tulis ke Free Software
    -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    
    -- ----------------------------------------------------------------------
    -- Benchmark DDL untuk migrasi data
    -- ----------------------------------------------------------------------
    require("oltp_common")
    
    function empty_create_table(drv, con, table_num)
       print(string.format("Abaikan pembuatan tabel sbtest%d",table_num))
    end
    
    create_table = empty_create_table
    
    function prepare_statements()
    end
    
    local function get_table_num()
       return sysbench.rand.uniform(1, sysbench.opt.tables)
    end
    
    function event()
       local table_id
       local create_query
       local drop_query
    
       table_id = get_table_num()
       create_query = string.format([[
    CREATE TABLE IF NOT EXISTS sbtest%d(
      id int not null auto_increment,
      k INTEGER DEFAULT '0' NOT NULL,
      c CHAR(120) DEFAULT '' NOT NULL,
      pad CHAR(60) DEFAULT '' NOT NULL,
      primary key (id)
    )]],table_id)
       con:query(create_query)
    
       drop_query = string.format("DROP TABLE IF EXISTS sbtest%d",table_id)
       con:query(drop_query)
    end
    
  3. Unggah tiga skrip Lua ke instance ECS dan salin ke direktori skrip Sysbench /usr/local/share/sysbench/.

    # Salin skrip untuk skenario di mana tabel besar digunakan.
    cp dm_large_table_write_only.lua /usr/local/share/sysbench/
    # Salin skrip untuk skenario pembaruan data panas.
    cp dm_hot_update_only.lua /usr/local/share/sysbench/
    # Salin skrip untuk skenario sinkronisasi DDL.
    cp dm_ddl_only.lua /usr/local/share/sysbench/

Instal BenchmarkSQL

# Instal Apache Ant.
yum -y install ant

# Unduh kode sumber BenchmarkSQL.
wget "https://github.com/jackysp/benchmarksql/archive/refs/heads/5.0-mysql-support-opt-2.1.zip" -O benchmarksql-5.0-mysql-support-opt-2.1.zip

# Ekstrak kode sumber.
unzip benchmarksql-5.0-mysql-support-opt-2.1.zip

# Bangun kode sumber.
cd benchmarksql-5.0-mysql-support-opt-2.1
ant

Metode Pengujian

Pengenalan

Gunakan metode berikut untuk menguji kinerja tugas sinkronisasi data dari berbagai dimensi.

Alat Pengujian

Model atau skrip pengujian

Fitur yang diuji

Sysbench

oltp_write_only

Sinkronisasi data penuh dan sinkronisasi data tambahan

dm_large_table_write_only

Sinkronisasi data penuh dan sinkronisasi data tambahan

dm_hot_update_only

Sinkronisasi data tambahan

dm_ddl_only

Sinkronisasi data tambahan

BenchmarkSQL

TPC-C

Sinkronisasi data penuh dan sinkronisasi data tambahan

Prosedur

oltp_write_only

  1. Siapkan data dasar.

    Buat 10 tabel di instance ApsaraDB RDS for MySQL sumber menggunakan Sysbench, dan impor 10 juta entri data ke setiap tabel.

    Catatan

    Jalankan perintah berikut di direktori /usr/local/share/sysbench/:

    sysbench --db-driver=mysql \
    --mysql-host={HOST} \
    --mysql-port={PORT} \
    --mysql-user= \
    --mysql-password= \
    --mysql-db={DATABASE} \
    --threads=64 --table_size=10000000 --tables=10  oltp_write_only.lua \
    prepare

    Parameter

    Deskripsi

    Catatan

    Referensi

    --mysql-host

    Tentukan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Ganti {HOST} dengan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Lihat dan kelola titik akhir dan port instance

    --mysql-port

    Tentukan nomor port internal dari instance ApsaraDB RDS for MySQL.

    Ganti {PORT} dengan nomor port internal dari instance ApsaraDB RDS for MySQL.

    --mysql-user

    Nama pengguna akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    Pastikan akun database memiliki izin yang diperlukan.

    Buat akun

    --mysql-password

    Kata sandi akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    --mysql-db

    Nama database tempat pengujian stres dilakukan.

    Buat database terlebih dahulu dan ganti {DATABASE} dengan nama database.

    Kelola database

    --tables

    Jumlah tabel.

    Dalam contoh ini, parameter ini disetel ke 10.

    Tidak tersedia

    --table_size

    Jumlah entri data dalam setiap tabel.

    Dalam contoh ini, parameter ini disetel ke 10000000.

  2. Buat tugas sinkronisasi data DTS.

    Pilih Schema Synchronization dan Full Data Synchronization untuk parameter Synchronization Types. Untuk informasi lebih lanjut, lihat Konfigurasikan Sinkronisasi Data Satu Arah Antar Instance ApsaraDB RDS for MySQL.

  3. Tunggu hingga sinkronisasi data penuh selesai.

  4. Lakukan pengujian stres pada sinkronisasi data tambahan.

    Gunakan model oltp_write_only di instance ECS untuk melakukan pengujian stres pada database sumber tugas sinkronisasi data dan menghasilkan log biner.

    Catatan

    Proporsi operasi DML: INSERT:UPDATE:DELETE = 1:2:1.

    sysbench --db-driver=mysql \
    --mysql-host={HOST} \
    --mysql-port={PORT} \
    --mysql-user= \
    --mysql-password= \
    --mysql-db={DATABASE} \
    --threads=64 --table_size=1000000 --tables=10 --time=600 oltp_write_only.lua \
    run

    Parameter

    Deskripsi

    Catatan

    --time

    Durasi pengujian stres. Satuan: detik.

    Dalam contoh ini, parameter ini disetel ke 600.

    --threads

    Jumlah thread untuk pengujian stres.

    Dalam contoh ini, parameter ini disetel ke 64.

  5. Pada halaman Performance Monitoring dari tugas sinkronisasi data DTS, lihat kinerja tugas tersebut.

    Untuk informasi lebih lanjut, lihat Pantau Kinerja Tugas.

dm_large_table_write_only

  1. Siapkan data dasar.

    Buat 10 tabel di instance ApsaraDB RDS for MySQL sumber menggunakan Sysbench. Impor 10.000 entri data ke setiap tabel.

    Catatan

    Jalankan perintah berikut di direktori /usr/local/share/sysbench/:

    sysbench --db-driver=mysql \
    --mysql-host={HOST} \
    --mysql-port={PORT} \
    --mysql-user= \
    --mysql-password= \
    --mysql-db={DATABASE} \
    --threads=64 --table_size=10000 --tables=10 dm_large_table_write_only.lua \
    prepare

    Parameter

    Deskripsi

    Catatan

    Referensi

    --mysql-host

    Tentukan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Ganti {HOST} dengan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Lihat dan kelola titik akhir dan port instance

    --mysql-port

    Tentukan nomor port internal dari instance ApsaraDB RDS for MySQL.

    Ganti {PORT} dengan nomor port internal dari instance ApsaraDB RDS for MySQL.

    --mysql-user

    Nama pengguna akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    Pastikan akun database memiliki izin yang diperlukan.

    Buat akun

    --mysql-password

    Kata sandi akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    --mysql-db

    Nama database tempat pengujian stres dilakukan.

    Buat database terlebih dahulu dan ganti {DATABASE} dengan nama database.

    Kelola database

    --tables

    Jumlah tabel.

    Dalam contoh ini, parameter ini disetel ke 10.

    Tidak tersedia

    --table_size

    Jumlah entri data dalam setiap tabel.

    Dalam contoh ini, parameter ini disetel ke 10000.

  2. Buat tugas sinkronisasi data DTS.

    Pilih Schema Synchronization dan Full Data Synchronization untuk parameter Synchronization Types. Untuk informasi lebih lanjut, lihat Konfigurasikan Sinkronisasi Data Satu Arah Antar Instance ApsaraDB RDS for MySQL.

  3. Tunggu hingga sinkronisasi data penuh selesai.

  4. Lakukan pengujian stres pada sinkronisasi data tambahan.

    Gunakan model dm_large_table_write_only di instance ECS untuk melakukan pengujian stres pada database sumber tugas sinkronisasi data dan menghasilkan log biner.

    sysbench --db-driver=mysql \
    --mysql-host={HOST} \
    --mysql-port={PORT} \
    --mysql-user= \
    --mysql-password= \
    --mysql-db={DATABASE} \
    --threads=64 --table_size=10000 --tables=10 --time=600 dm_large_table_write_only.lua \
    run

    Parameter

    Deskripsi

    Catatan

    --time

    Durasi pengujian stres. Satuan: detik.

    Dalam contoh ini, parameter ini disetel ke 600.

    --threads

    Jumlah thread untuk pengujian stres.

    Dalam contoh ini, parameter ini disetel ke 64.

  5. Pada halaman Performance Monitoring dari tugas sinkronisasi data DTS, lihat kinerja tugas tersebut.

    Untuk informasi lebih lanjut, lihat Pantau Kinerja Tugas.

dm_hot_update_only

  1. Buat tugas sinkronisasi data DTS.

    Jangan pilih Full Data Synchronization untuk parameter Synchronization Types. Jika database dan tabel yang sesuai belum dibuat di instance ApsaraDB RDS for MySQL tujuan, Anda harus memilih Schema Synchronization. Untuk informasi lebih lanjut, lihat Konfigurasikan Sinkronisasi Data Satu Arah Antar Instance ApsaraDB RDS for MySQL.

  2. Inisialisasi data di tabel tempat pengujian stres akan dilakukan.

    sysbench --db-driver=mysql \
    --mysql-host={HOST} \
    --mysql-port={PORT} \
    --mysql-user= \
    --mysql-password= \
    --mysql-db={DATABASE} \
    --threads=64 --tables=2 dm_hot_update_only.lua \
    prepare

    Parameter

    Deskripsi

    Catatan

    Referensi

    --mysql-host

    Tentukan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Ganti {HOST} dengan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Lihat dan kelola titik akhir dan port instance

    --mysql-port

    Tentukan nomor port internal dari instance ApsaraDB RDS for MySQL.

    Ganti {PORT} dengan nomor port internal dari instance ApsaraDB RDS for MySQL.

    --mysql-user

    Nama pengguna akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    Pastikan akun database memiliki izin yang diperlukan.

    Buat akun

    --mysql-password

    Kata sandi akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    --mysql-db

    Nama database tempat pengujian stres dilakukan.

    Buat database terlebih dahulu dan ganti {DATABASE} dengan nama database.

    Kelola database

    --tables

    Jumlah tabel.

    Dalam contoh ini, parameter ini disetel ke 2.

    Tidak tersedia

  3. Lakukan pengujian stres pada sinkronisasi data tambahan.

    Gunakan model dm_hot_update_only di instance ECS untuk melakukan pengujian stres pada database sumber tugas sinkronisasi data dan menghasilkan log biner.

    sysbench --db-driver=mysql \
    --mysql-host={HOST} \
    --mysql-port={PORT} \
    --mysql-user= \
    --mysql-password= \
    --mysql-db={DATABASE} \
    --threads=64 --tables=2 --time=600 dm_hot_update_only.lua \
    run

    Parameter

    Deskripsi

    Catatan

    --time

    Durasi pengujian stres. Satuan: detik.

    Dalam contoh ini, parameter ini disetel ke 600.

    --threads

    Jumlah thread untuk pengujian stres.

    Dalam contoh ini, parameter ini disetel ke 64.

  4. Pada halaman Performance Monitoring dari tugas sinkronisasi data DTS, lihat kinerja tugas tersebut.

    Untuk informasi lebih lanjut, lihat Pantau Kinerja Tugas.

dm_ddl_only

  1. Buat tugas sinkronisasi data DTS.

    Jangan pilih Full Data Synchronization untuk parameter Synchronization Types. Jika database dan tabel yang sesuai belum dibuat di instance ApsaraDB RDS for MySQL tujuan, Anda harus memilih Schema Synchronization. Untuk informasi lebih lanjut, lihat Konfigurasikan Sinkronisasi Data Satu Arah Antar Instance ApsaraDB RDS for MySQL.

  2. Lakukan pengujian stres pada sinkronisasi data tambahan.

    Gunakan model dm_ddl_only di instance ECS untuk melakukan pengujian stres pada database sumber tugas sinkronisasi data dan menghasilkan log biner.

    sysbench --db-driver=mysql \
    --mysql-host={HOST} \
    --mysql-port={PORT} \
    --mysql-user= \
    --mysql-password= \
    --mysql-db={DATABASE} \
    --threads=64 --tables=2 --time=600 dm_ddl_only.lua \
    run

    Parameter

    Deskripsi

    Catatan

    Referensi

    --mysql-host

    Tentukan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Ganti {HOST} dengan titik akhir internal dari instance ApsaraDB RDS for MySQL.

    Lihat dan Kelola Titik Akhir dan Port Instance

    --mysql-port

    Tentukan nomor port internal dari instance ApsaraDB RDS for MySQL.

    Ganti {PORT} dengan nomor port internal dari instance ApsaraDB RDS for MySQL.

    --mysql-user

    Nama pengguna akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    Pastikan akun database memiliki izin yang diperlukan.

    Buat Akun

    --mysql-password

    Kata sandi akun database yang dibuat di instance ApsaraDB RDS for MySQL.

    --mysql-db

    Nama database tempat pengujian stres dilakukan.

    Buat database terlebih dahulu dan ganti {DATABASE} dengan nama database.

    Kelola Database

    --threads

    Jumlah thread untuk pengujian stres.

    Dalam contoh ini, parameter ini disetel ke 64.

    Tidak tersedia

    --tables

    Jumlah tabel.

    Dalam contoh ini, parameter ini disetel ke 2.

    --time

    Durasi pengujian stres. Satuan: detik.

    Dalam contoh ini, parameter ini disetel ke 600. Ini berarti operasi DDL dilakukan selama 600 detik.

  3. Pada halaman Performance Monitoring dari tugas sinkronisasi data DTS, lihat kinerja tugas tersebut.

    Untuk informasi lebih lanjut, lihat Pantau Kinerja Tugas.

TPC-C

  1. Siapkan data dasar.

    1. Pergi ke direktori kerja BenchmarkSQL di instance ECS.

      cd benchmarksql-5.0-mysql-support-opt-2.1/run/
    2. Tentukan informasi koneksi tentang instance sumber dalam file konfigurasi props.mysql.

      vim props.mysql

      Blok kode berikut menunjukkan contoh file konfigurasi. Ganti {HOST}, {PORT}, {USER}, {PASSWORD}, dan {DATABASE} dengan informasi yang sesuai tentang instance ApsaraDB RDS for MySQL sumber.

      db=mysql
      driver=com.mysql.jdbc.Driver
      conn=jdbc:mysql://{HOST}:{PORT}/{DATABASE}?readOnlyPropagatesToServer=false&rewriteBatchedStatements=true&failOverReadOnly=false&connectTimeout=3000&allowMultiQueries=true&clobberStreamingResults=true&characterEncoding=utf8&netTimeoutForStreamingResults=0&autoReconnect=true
      user={USER}
      password={PASSWORD}
      
      warehouses=1000
      loadWorkers=100
      
      terminals=128
      //Untuk menjalankan transaksi tertentu per terminal - runMins harus sama dengan nol
      runTxnsPerTerminal=0
      //Untuk menjalankan selama menit tertentu - runTxnsPerTerminal harus sama dengan nol
      runMins=10
      //Jumlah total transaksi per menit
      limitTxnsPerMin=0
      
      //Setel ke true untuk menjalankan dalam mode kompatibel 4.x. Setel ke false untuk menggunakan seluruh database yang dikonfigurasi secara merata.
      terminalWarehouseFixed=true
      
      //Lima nilai berikut ini harus berjumlah 100
      //Persentase default 45, 43, 4, 4 & 4 sesuai dengan spesifikasi TPC-C
      newOrderWeight=45
      paymentWeight=43
      orderStatusWeight=4
      deliveryWeight=4
      stockLevelWeight=4
      
      //Nama direktori untuk mengumpulkan data hasil rinci.
      //Komentari ini untuk menekan.
      resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
      
      // osCollectorScript=./misc/os_collector_linux.py
      // osCollectorInterval=1
      // osCollectorSSHAddr=user@dbhost
      // osCollectorDevices=net_eth0 blk_sda

      Parameter

      Deskripsi

      Catatan

      conn

      Konfigurasi koneksi instance. Ganti {HOST} dan {PORT} dengan informasi berikut:

      • HOST: titik akhir internal dari instance ApsaraDB RDS for MySQL.

      • PORT: nomor port internal dari instance ApsaraDB RDS for MySQL.

      • DATABASE: nama database yang dibuat untuk pengujian di instance ApsaraDB RDS for MySQL.

      Ganti {HOST}, {PORT}, dan {DATABASE} dengan informasi yang sesuai.

      user

      Nama pengguna akun database yang dibuat di instance ApsaraDB RDS for MySQL.

      Ganti {USER} dengan informasi yang sesuai.

      password

      Kata sandi akun database yang dibuat di instance ApsaraDB RDS for MySQL.

      Ganti {PASSWORD} dengan informasi yang sesuai.

      runMins

      Durasi pengujian stres. Satuan: menit.

      Dalam contoh ini, parameter ini disetel ke 10.

    3. Inisialisasi data dasar untuk pengujian TPC-C.

      ./runDatabaseBuild.sh props.mysql

      Buat 10 tabel. Impor sekitar 500 juta entri data ke tabel-tabel tersebut.

  2. Buat tugas sinkronisasi data DTS.

    Pilih Schema Synchronization dan Full Data Synchronization untuk parameter Synchronization Types. Untuk informasi lebih lanjut, lihat Konfigurasikan Sinkronisasi Data Satu Arah Antar Instance ApsaraDB RDS for MySQL.

  3. Tunggu hingga sinkronisasi data penuh selesai.

  4. Lakukan pengujian stres pada sinkronisasi data tambahan.

    Gunakan model TPC-C di instance ECS untuk melakukan pengujian stres pada database sumber tugas sinkronisasi data dan menghasilkan log biner.

    ./runBenchmark.sh props.mysql

    Parameter

    Deskripsi

    Catatan

    --time

    Durasi pengujian stres. Satuan: detik.

    Dalam contoh ini, parameter ini disetel ke 600.

    --threads

    Jumlah thread untuk pengujian stres.

    Dalam contoh ini, parameter ini disetel ke 64.

  5. Pada halaman Performance Monitoring dari tugas sinkronisasi data DTS, lihat kinerja tugas tersebut.

    Untuk informasi lebih lanjut, lihat Pantau Kinerja Tugas.

Hasil Pengujian

Catatan

Untuk informasi lebih lanjut tentang kinerja maksimum tugas sinkronisasi data tambahan, lihat Data Kinerja Sinkronisasi Data. Kinerja tugas diukur oleh baris yang disinkronkan per detik (RPS).

oltp_write_only

Sinkronisasi data penuh

Tipe Instance

RPS (baris/d)

BPS (MB/s)

Durasi (d)

micro

17.95W

34.19

557

small

18.18W

34.63

550

medium

19.64W

37.42

509

large

19.96W

38.02

501

Sinkronisasi data tambahan

Tipe Instance

RPS (baris/d)

BPS (KB/s)

Apakah performa maksimum telah tercapai atau belum

micro

200

86

Ya

small

2000

982

Ya

medium

5000

2605

Ya

large

11000

5489

Ya

dm_large_table_write_only

Sinkronisasi data penuh

Tipe Instance

RPS (baris/d)

BPS (MB/s)

Durasi (d)

micro

469.48

35.09MB

213

small

480.77

35.94MB

208

medium

552.49

41.30MB

181

large

584.80

43.71

171

Sinkronisasi data tambahan

Tipe Instance

RPS (baris/d)

BPS (KB/s)

Kinerja maksimum tercapai atau tidak

micro

200

9086.3

Ya

small

683

31741.51

Tidak

medium

1033

56676.41

Tidak

large

1537

84344.32

Tidak

dm_hot_update_only

Catatan

Secara default, parameter trans.hot.merge.enable disetel ke false. Untuk informasi lebih lanjut tentang cara memodifikasi parameter ini, lihat Modifikasi Parameter Instance DTS.

Parameter trans.hot.merge.enable disetel ke false.

Sinkronisasi data tambahan

Tipe Instance

RPS (baris/d)

Kinerja maksimum tercapai atau tidak

micro

200

Ya

small

1200

Tidak

medium

1200

Tidak

large

1200

Tidak

Parameter trans.hot.merge.enable disetel ke true.

Sinkronisasi data tambahan

Tipe Instance

RPS (baris/d)

Kinerja maksimum tercapai atau tidak

micro

200

Ya

small

2000

Ya

medium

5000

Ya

large

11000

Ya

dm_ddl_only

Sinkronisasi data tambahan

Tipe Instance

RPS (baris/d)

Kinerja maksimum tercapai atau tidak

micro

68

Tidak

small

68

Tidak

medium

68

Tidak

large

68

Tidak

TPC-C

Sinkronisasi data penuh

Tipe Instance

RPS (baris/d)

BPS (MB/s)

Duration (s)

micro

12.04W

17.52

4143

small

12.09W

17.59

4127

medium

12.73W

18.52

3921

large

13.50W

19.64

3696

Sinkronisasi data tambahan

Tipe Instance

RPS (baris/d)

BPS (KB/s)

Kinerja maksimum tercapai atau tidak

micro

200

138

Ya

small

2000

1920

Ya

medium

5000

3847

Ya

large

11000

7542

Ya