Episode ini membahas optimasi performa end-to-end: tuning query dengan indexing dan vindexes, VTGate connection pooling, resource tuning VTTablet, serta pengaturan buffer, innodb, dan storage MySQL.

Setelah cluster berjalan aman dan tersebar di beberapa region, pertanyaannya bergeser: seberapa cepat bisa? Episode 15 membahas optimasi performa Vitess dari tiga lapisan: query dan skema, layer VTGate dan VTTablet, lalu MySQL dan storage. Performa adalah kombinasi ketiganya — mengoptimasi satu lapisan saja hasilnya terbatas.
Roadmap episode 15: tuning query dengan indexing dan vindexes, VTGate connection pooling, resource tuning VTTablet, lalu pengaturan innodb dan storage MySQL.
Optimasi query dimulai dari dua hal: indeks MySQL untuk mempercepat eksekusi di dalam shard, dan vindex untuk mempercepat routing antar shard. Keduanya berbeda dan saling melengkapi.
Indeks MySQL standar tetap relevan: kolom yang sering dipakai dalam WHERE dan JOIN di dalam satu shard butuh indeks biasa. Tapi di Vitess ada satu aturan tambahan: query sebaiknya selalu menyertakan kolom sharding key agar tidak scatter. Ini optimasi paling berdampak yang tidak ada di MySQL vanilla.
EXPLAIN SELECT name FROM users WHERE user_id = 42EXPLAIN menampilkan rencana eksekusi — di VTGate, pastikan query hanya menyentuh satu shard. Gunakan perintah EXPLAIN VITESS untuk melihat rencana VTGate:
EXPLAIN VITESS SELECT name FROM users WHERE user_id = 42Outputnya menunjukkan apakah query dirutekan ke satu shard (fast path) atau ke semua shard (scatter). Target kalian: query hot path selalu fast path.
Info
Urutan prioritas optimasi query di Vitess: pertama pastikan tidak scatter (vindex), kedua pastikan memakai indeks yang tepat (MySQL index), ketiga baru tuning parameter eksekusi. Langkah pertama memberi dampak terbesar.
Setiap koneksi aplikasi ke VTGate memakan resource. VTGate memakai connection pooling: sekumpulan koneksi ke VTTablet yang dipakai ulang untuk banyak query, mengurangi overhead pembuatan koneksi MySQL. Konfigurasi yang perlu disetel:
PoolSize, StreamPoolSize) — seberapa banyak koneksi ke VTTablet.QueryTimeout — batas waktu query.MaxPayloadSize — ukuran maksimum payload query.vtgate:
extraFlags:
mysql_server_pool_size: 128
query_timeout: 30s
max_payload_size: 16777216mysql_server_pool_size: 128 memberi VTGate 128 koneksi pooled per target. Aturan praktis: terlalu kecil membuat antrian, terlalu besar membuat VTTablet kewalahan. Ukur dengan metrik dari episode 7 lalu setel berdasarkan beban nyata.
VTTablet punya dua sisi resource: menjalankan query MySQL dan menjalankan background work (replikasi, backup, VReplication). Tuning yang penting:
PoolSize VTTablet — jumlah query bersamaan yang bisa dijalankan ke MySQL.TransactionPoolSize — jumlah transaksi bersamaan.vttablet:
resources:
requests:
cpu: "2"
memory: 4Gi
limits:
cpu: "4"
memory: 8Giresources.requests dan limits di atas menentukan berapa banyak resource yang dijamin dan dibatasi untuk setiap tablet. Jangan beri memory limit terlalu kecil untuk MySQL — tabel besar dan buffer pool butuh ruang.
Perhatikan juga tabel _vt di dalam MySQL tablet: tabel ini menyimpan state Vitess seperti posisi replikasi. Pantau pertumbuhannya karena VReplication bisa membuat tabel vreplication yang membutuhkan maintenance rutin.
Di lapisan paling bawah, MySQL perlu disetel sesuai peran. Pengaturan yang paling berdampak:
innodb_buffer_pool_size — cache data dan indeks di memory. Aturan umum: 70-80% memory yang dialokasikan ke MySQL.innodb_flush_log_at_trx_commit — keseimbangan antara durability dan kecepatan tulis.max_connections — batas koneksi; terlalu rendah membuat query gagal.innodb_buffer_pool_size = 6G
innodb_flush_log_at_trx_commit = 1
innodb_log_file_size = 1G
max_connections = 1000Baris innodb_buffer_pool_size = 6G memberi MySQL buffer pool 6GB untuk cache. Konfigurasi MySQL di Vitess diletakkan lewat custom my.cnf yang di-mount ke tablet.
Warning
Setiap pengaturan MySQL punya trade-off. innodb_flush_log_at_trx_commit = 1 memberi durability maksimal dengan biaya latensi tulis. Nilai lain mempercepat tulis tapi bisa kehilangan data saat crash. Pilih sesuai kebutuhan bisnis, bukan asal cepat.
Untuk mengukur dampak optimasi, bandingkan metrik sebelum dan sesudah:
curl -s http://localhost:15100/metrics | grep vttablet_querycurl -s http://localhost:15100/metrics di port tablet menampilkan metrik query — baseline yang harus kalian pantau setiap kali mengubah konfigurasi.
Pada episode 15 ini kalian sudah memahami optimasi performa Vitess end-to-end: memastikan query tidak scatter dengan vindex lalu memakai indeks yang tepat, mengatur VTGate connection pooling, tuning resource VTTablet, dan menyetel MySQL innodb serta storage.
Inti yang harus dibawa pulang:
EXPLAIN VITESS untuk melihat rencana routing query.innodb_buffer_pool_size adalah pengaturan MySQL yang paling berdampak.Di episode 16 berikutnya kita skala: resharding dan scaling workflows — online resharding dengan VReplication, perbedaan splitting dan moving shards, scaling replica, serta vertical vs horizontal scaling. Sampai jumpa!