View a markdown version of this page

Menyetel beban kerja tulis - AWS Bimbingan Preskriptif

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

Menyetel beban kerja tulis

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

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

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

Jika Anda menulis kumpulan besar data ke dalam tabel yang dipartisi, kombinasi LOAD DATA FROM S3 dan pertukaran partisi 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

InnoDB 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

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.

Pastikan pencatatan tidak menyebabkan pertengkaran tambahan

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 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.