Dengan memiliki indeks yang sesuai pada tabel MySQL Anda, Anda dapat sangat meningkatkan kinerja kueri SELECT. Tapi, tahukah Anda bahwa menambahkan indeks ke tabel Anda sendiri adalah operasi yang mahal, dan mungkin membutuhkan waktu lama untuk menyelesaikannya tergantung pada ukuran tabel Anda? Selama waktu ini, Anda juga mungkin mengalami penurunan kinerja kueri karena sumber daya sistem Anda juga sibuk dalam pekerjaan pembuatan indeks. Dalam posting blog ini, kami membahas pendekatan untuk mengoptimalkan proses pembuatan indeks MySQL sedemikian rupa sehingga beban kerja reguler Anda tidak terpengaruh.
Pembuatan Indeks Bergulir MySQL
Kami menyebut pendekatan ini sebagai 'Pembuatan Indeks Bergulir' - jika Anda memiliki kumpulan replika master-slave MySQL, Anda dapat membuat indeks satu node pada satu waktu secara bergulir. Anda harus membuat indeks hanya pada node slave sehingga kinerja master tidak terpengaruh. Ketika pembuatan indeks selesai pada budak, kami menurunkan master saat ini dan mempromosikan salah satu budak yang up-to-date sebagai master baru. Pada saat ini, pembangunan indeks berlanjut pada node master asli (yang sekarang menjadi slave). Akan ada durasi singkat (puluhan detik) selama Anda akan kehilangan konektivitas ke database karena failover, tetapi ini dapat diatasi dengan melakukan percobaan ulang tingkat aplikasi.
Manfaat Kinerja Pembuatan Indeks Bergulir
Kami melakukan eksperimen kecil untuk memahami manfaat kinerja Pembuatan Indeks Bergulir.
Pengujian menggunakan dataset MySQL yang dibuat menggunakan Sysbench yang memiliki 3 tabel dengan masing-masing 50 juta baris. Kami membuat beban pada master MySQL dengan 30 klien yang menjalankan beban kerja seimbang (50% membaca dan 50% menulis) selama 10 menit, dan pada saat yang sama, membuat indeks sekunder sederhana di salah satu tabel dalam dua skenario:
- Membuat indeks langsung di master
- Membuat indeks pada slave
Konfigurasi Test Bed MySQL
Jenis Instance MySQL | Instance EC2 m4.large dengan RAM 8GB |
---|---|
Jenis Penerapan | 2 Set Master-Slave Node dengan Replikasi Semisinkron |
Versi MySQL | 5.7.25 |
Hasil Performa
Skenario | Throughput Beban Kerja (Kueri Per Detik) | Latensi Persentil ke-95 |
---|---|---|
Pembuatan Indeks pada Master | 453.63 | 670 md |
Pembuatan Indeks Bergulir | 790.03 | 390 md |
Bawa pulang
Dengan menjalankan pembuatan indeks langsung di master MySQL, kami hanya dapat mengalami 60% throughput yang dicapai dengan menjalankan pembuatan indeks pada slave MySQL melalui operasi bergulir. Latensi kueri persentil ke-95 juga 1,8 kali lebih tinggi saat pembuatan indeks terjadi di server master.
Praktik Terbaik untuk Membuat Indeks di Tabel #MySQL AndaKlik Untuk TweetMengotomatiskan Pembuatan Indeks Bergulir
ScaleGrid mengotomatiskan Pembuatan Rolling Index untuk penerapan MySQL Anda dengan antarmuka pengguna yang sederhana untuk memulainya.
Di UI di atas, Anda dapat memilih nama Database dan Tabel, dan 'Tambah Indeks' sebagai Operasi Ubah Tabel. Kemudian, tentukan Nama Kolom dan Nama Indeks, dan Perintah Ubah Tabel akan dibuat dan ditampilkan untuk Anda. Setelah Anda mengeklik Buat, pembuatan indeks akan dilakukan satu per satu secara terus-menerus.
Selain itu, ScaleGrid juga mendukung operasi Alter Table sederhana lainnya seperti menambahkan kolom baru ke tabel Anda secara bergulir. Nantikan postingan blog saya selanjutnya dengan detail lebih lanjut!