

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menyetel beban kerja tulis
<a name="tune-write-workloads"></a>

Menerapkan load-balancing dan membebaskan instance penulis akan membantu beban kerja tulis Anda berkinerja lebih baik selama lonjakan tinggi. Untuk mencapai kinerja penulisan yang lebih baik pada konkurensi tinggi, ikuti langkah-langkah tambahan ini.

## Pindahkan integritas referensial ke lapisan aplikasi
<a name="referential-integrity"></a>

Meskipun pemeriksaan integritas referensial penting, dengan hyperscaling, mereka dapat merusak beban Anda. Untuk setiap penulisan, pemindaian tambahan harus dilakukan sebelum penulisan itu sendiri dijalankan, dan ini menghasilkan kinerja yang buruk. Jika aplikasi Anda memerlukan pemeriksaan integritas yang ketat, buat mereka ke dalam lapisan aplikasi untuk mencegahnya membatasi penulisan Anda.

## Hindari menggunakan kunci primer yang berat
<a name="primary-keys"></a>

Jaga agar kunci utama Anda tetap terang. Mesin penyimpanan InnoDB menambahkan kunci utama ke setiap indeks lain yang Anda buat di tabel Anda. Ketika kunci utama Anda besar, itu mempengaruhi ukuran indeks. Penyimpanan dan pengambilan halaman data akan melambat jika kunci utama cukup besar. Contoh umum adalah penggunaan pengidentifikasi unik universal sebagai kunci utama. Ini bukan pendekatan yang baik jika Anda menargetkan kinerja pada lingkungan hyperscaled.

## Gunakan pertukaran partisi untuk memuat data ke dalam tabel yang dipartisi
<a name="partition-exchange"></a>

Jika Anda menulis kumpulan besar data ke dalam tabel yang dipartisi, kombinasi [LOAD DATA FROM S3](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html) dan [pertukaran partisi](https://dev.mysql.com/doc/refman/5.7/en/partitioning-management-exchange.html) dapat meningkatkan kinerja, karena tabel utama tidak diakses untuk sisipan. Pertukaran partisi melibatkan bahasa definisi data (DDL), dan menempatkan kunci metadata di meja Anda. Pastikan bahwa ini dilakukan ketika ada permintaan minimal atau tidak ada yang berjalan di atas meja sehingga pertukaran partisi DDL dapat memperoleh kunci metadata tanpa menunggu. Pertukaran itu sendiri hanya membutuhkan milidetik untuk menyelesaikannya.

## Hapus indeks yang tidak digunakan
<a name="unused-indexes"></a>

[InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) mengoptimalkan rencana kueri berdasarkan pertumbuhan data Anda, dan sebaiknya periksa indeks yang tidak digunakan di Database Anda dan menghapusnya. Indeks yang tidak digunakan menggunakan IO saat aplikasi menulis data ke dalam tabel. Periksa daftar indeks yang tidak digunakan, dan verifikasi bahwa itu bukan indeks yang digunakan dalam situasi yang jarang terjadi, seperti laporan triwulanan. Juga, perhatikan bahwa beberapa indeks digunakan untuk menegakkan keunikan atau pemesanan dan juga harus dipertimbangkan.

## Pastikan versi baris lama dibersihkan secara efisien
<a name="old-row-versions"></a>

Dalam implementasi InnoDB dari kontrol konkurensi multiversi (MVCC), ketika catatan dimodifikasi, versi (lama) saat ini dari data yang dimodifikasi pertama kali dicatat sebagai catatan undo dalam log *undo*. Nilai panjang daftar riwayat (HLL) yang berkembang menunjukkan bahwa utas pengumpulan sampah InnoDB (utas pembersihan) tidak mengikuti beban kerja penulisan, atau pembersihan diblokir oleh kueri atau transaksi yang berjalan lama. Ketika pengumpulan sampah diblokir atau ditunda, database dapat mengembangkan lag pembersihan substansional yang dapat berdampak negatif pada kinerja kueri. Anda dapat menggunakan rekomendasi berikut untuk mengoptimalkan proses pembersihan.
+ Jaga transaksi tetap kecil.
+ Untuk kueri baca, gunakan tingkat isolasi READ COMMITTED.
+ [Tingkatkan jumlah thread pembersihan ([innodb\_purge\_threads dan innodb\_purge\_batch\_size](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_purge_threads)).](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_purge_batch_size) Perhatikan bahwa menyetel parameter ini memerlukan reboot.
+ Pantau HLL secara teratur, dan selesaikan masalah beban kerja apa pun yang mencegah pengumpulan sampah berkembang.

## Pastikan pencatatan tidak menyebabkan pertengkaran tambahan
<a name="logging"></a>

Log kueri umum mencatat koneksi klien dan pemutusan juga sebagai tambahan untuk semua pernyataan yang diterima oleh server dalam urutan mereka diterima. Saat diaktifkan, logging sinkron, yang dapat menyebabkan penalti kinerja yang substansif pada sistem yang sibuk. Kecuali diperlukan, kami sarankan untuk menonaktifkan log umum.

Log kueri lambat mencatat pernyataan yang membutuhkan waktu lebih lama dari jumlah detik [long\_query\_time](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_long_query_time) untuk dijalankan, dengan pengaturan default 10 detik. Ketika pengaturan diatur ke 0, semua pernyataan dicatat secara sinkron, yang dapat menyebabkan penalti kinerja pada database sibuk.