Praktik terbaik untuk membangun aplikasi dengan Azure Database for MySQL
BERLAKU UNTUK: Azure Database for MySQL - Server Tunggal Azure Database for MySQL - Server Fleksibel
Penting
Server tunggal Azure Database for MySQL berada di jalur penghentian. Kami sangat menyarankan Agar Anda meningkatkan ke server fleksibel Azure Database for MySQL. Untuk informasi selengkapnya tentang migrasi ke server fleksibel Azure Database for MySQL, lihat Apa yang terjadi pada Server Tunggal Azure Database for MySQL?
Berikut adalah beberapa praktik terbaik untuk membantu Anda membangun aplikasi siap cloud menggunakan Azure Database for MySQL. Praktik terbaik ini dapat mengurangi waktu pengembangan untuk aplikasi Anda.
Konfigurasi aplikasi dan sumber daya database
Mempertahankan aplikasi dan database di wilayah yang sama
Pastikan semua dependensi Anda berada di wilayah yang sama saat menyebarkan aplikasi Anda di Azure. Menyebarkan instans di seluruh wilayah atau zona ketersediaan akan menciptakan latensi jaringan, yang dapat memengaruhi performa keseluruhan aplikasi Anda.
Jaga keamanan server MySQL Anda
Konfigurasikan server MySQL Anda agar aman dan tidak dapat diakses secara publik. Gunakan salah satu opsi ini untuk mengamankan server Anda:
Untuk keamanan, Anda harus selalu tersambung ke server MySQL Anda melalui SSL dan mengonfigurasi server MySQL dan aplikasi Anda untuk menggunakan TLS 1.2. Lihat Cara mengonfigurasi SSL/TLS.
Gunakan jaringan canggih dengan AKS
Ketika jaringan yang dipercepat diaktifkan pada VM, ada latensi yang lebih rendah, berkurangnya jitter, dan penurunan pemanfaatan CPU pada VM. Untuk mempelajari lebih lanjut, lihat Praktik terbaik untuk Azure Kubernetes Service dan Azure Database for MySQL.
Menyetel parameter server Anda
Untuk parameter server penyetelan beban kerja sulit dibaca, tmp_table_size
dan max_heap_table_size
dapat membantu mengoptimalkan performa yang lebih baik. Untuk menghitung nilai yang diperlukan untuk variabel ini, lihat nilai total per koneksi dan memori dasar. Jumlah parameter memori per koneksi, tidak termasuk tmp_table_size
, dikombinasikan dengan akun memori dasar untuk total memori server.
Untuk menghitung ukuran terbesar yang mungkin dari tmp_table_size
dan max_heap_table_size
, gunakan rumus berikut:
(total memory - (base memory + (sum of per-connection memory * # of connections)) / # of connections
Catatan
Total memori menunjukkan jumlah total memori yang dimiliki server di seluruh vCores yang disediakan. Misalnya, dalam server General Purpose two-vCore Azure Database for MySQL, total memori akan menjadi 5 GB * 2. Anda dapat menemukan detail lebih lanjut tentang memori untuk setiap tingkatan dalam dokumentasi tingkat harga.
Memori dasar menunjukkan variabel memori, seperti query_cache_size
dan innodb_buffer_pool_size
, bahwa MySQL akan menginisialisasi dan mengalokasikan pada awal server. Memori per koneksi, seperti sort_buffer_size
dan join_buffer_size
, adalah memori yang dialokasikan hanya saat kueri membutuhkannya.
Membuat pengguna nonadmin
Buat pengguna nonadmin untuk setiap database. Biasanya, nama pengguna diidentifikasi sebagai nama database.
Mereset kata sandi Anda
Anda dapat mengatur ulang kata sandi untuk server MySQL Anda menggunakan portal Azure.
Mereset kata sandi server Anda untuk database produksi dapat menurunkan aplikasi Anda. Ini adalah praktik yang baik untuk mereset kata sandi untuk setiap beban kerja produksi pada jam sibuk untuk meminimalkan dampak pada pengguna aplikasi Anda.
Performa dan ketahanan
Berikut adalah beberapa alat dan praktik untuk membantu men-debug masalah performa aplikasi Anda.
Aktifkan log kueri lambat untuk mengidentifikasi masalah performa
Anda bisa mengaktifkanlog kueri lambat dan log audit pada server Anda. Menganalisis log kueri lambat dapat membantu mengidentifikasi hambatan performa untuk pemecahan masalah.
Log audit juga tersedia melalui log Azure Diagnostics di log Azure Monitor, Azure Event Hubs, dan akun penyimpanan. Lihat Cara memecahkan masalah performa kueri.
Gunakan pengumpulan koneksi
Mengelola koneksi database dapat berdampak signifikan pada performa aplikasi secara keseluruhan. Untuk mengoptimalkan performa, Anda harus mengurangi berapa kali koneksi dibuat dan waktu untuk membuat koneksi di jalur kode kunci. Gunakan pengumpulan koneksi untuk menyambungkan ke Azure Database for MySQL untuk meningkatkan ketahanan dan performa.
Anda dapat menggunakan pengumpul koneksi ProxySQL untuk mengelola koneksi secara efisien. Menggunakan pengumpul koneksi dapat mengurangi koneksi diam dan menggunakan kembali koneksi yang ada, yang membantu menghindari masalah. Lihat Cara menyiapkan ProxySQL untuk mempelajari lebih lanjut.
Mencoba ulang logika untuk menangani kesalahan sementara
Aplikasi Anda mungkin mengalami kesalahan sementara saat koneksi ke database hilang atau terputus-putus. Dalam situasi seperti itu, server siap dan berjalan setelah satu hingga dua percobaan kembali dalam 5 hingga 10 detik.
Latihan yang baik adalah menunggu selama 5 detik sebelum percobaan kembali Anda yang pertama. Kemudian ikuti setiap percobaan kembali dengan meningkatkan penantian secara bertahap, hingga 60 detik. Batasi jumlah maksimum percobaan ulang, di mana aplikasi Anda menganggap operasi gagal, sehingga Anda dapat menyelidiki lebih lanjut. Lihat Cara memecahkan masalah kesalahan koneksi untuk mempelajari lebih lanjut.
Aktifkan replikasi baca untuk mengurangi failovers
Untuk skenario failover, Anda dapat menggunakan Replikasi Data-in. Tidak ada failover otomatis antara server sumber dan replika yang terjadi saat menggunakan replika baca.
Anda melihat jeda antara sumber dan replika karena replikasi asinkron. Jeda jaringan dapat dipengaruhi oleh banyak faktor, seperti ukuran beban kerja yang berjalan di server sumber dan latensi antara pusat data. Dalam kebanyakan kasus, jeda replika berkisar dari beberapa detik hingga beberapa menit.
Penyebaran database
Konfigurasikan tugas Azure database for MySQL di saluran penyebaran CI/CD Anda
Terkadang, Anda perlu menyebarkan perubahan pada database Anda. Dalam kasus seperti itu, Anda dapat menggunakan integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD) melalui Azure Pipelines dan menggunakan tugas untuk server MySQL Anda untuk memperbarui database dengan menjalankan skrip kustom terhadapnya.
Gunakan proses yang efektif untuk penyebaran database manual
Selama penyebaran database manual, ikuti langkah-langkah ini untuk meminimalkan waktu henti atau mengurangi risiko penyebaran yang gagal:
- Buat salinan database produksi pada database baru dengan menggunakan mysqldump atau MySQL Workbench.
- Perbarui database baru dengan perubahan atau pembaruan skema baru yang diperlukan untuk database Anda.
- Letakkan database produksi dalam keadaan read-only. Akan lebih baik jika Anda tidak memiliki operasi tulis pada database produksi hingga penyebaran selesai.
- Uji aplikasi Anda dengan database yang baru diperbarui dari langkah 1.
- Sebarkan perubahan aplikasi Anda dan pastikan aplikasi sekarang menggunakan database baru dengan pembaruan terbaru.
- Pertahankan database produksi lama untuk mengembalikan perubahan. Anda kemudian dapat mengevaluasi untuk menghapus database produksi lama atau mengekspornya di Azure Storage jika diperlukan.
Catatan
Jika aplikasi seperti aplikasi e-niaga dan Anda tidak dapat menempatkannya dalam status baca-saja, sebarkan perubahan langsung pada database produksi setelah membuat cadangan. Perubahan ini harus terjadi selama jam sibuk dengan lalu lintas rendah ke aplikasi untuk meminimalkan dampak karena beberapa pengguna mungkin mengalami permintaan yang gagal.
Pastikan kode aplikasi Anda juga menangani permintaan yang gagal.
Gunakan metrik asli MySQL untuk melihat apakah beban kerja Anda melebihi ukuran tabel sementara dalam memori
Dengan beban kerja baca-berat, kueri terhadap server MySQL Anda mungkin melebihi ukuran tabel sementara dalam memori. Beban kerja baca-berat dapat menyebabkan server Anda beralih menulis tabel sementara ke disk, yang memengaruhi performa aplikasi Anda. Untuk menentukan apakah server Anda menulis ke disk sebagai akibat dari melebihi ukuran tabel sementara, lihat metrik berikut:
show global status like 'created_tmp_disk_tables';
show global status like 'created_tmp_tables';
Metrik created_tmp_disk_tables
menunjukkan berapa banyak tabel yang dibuat pada disk. Mengingat beban kerja Anda, created_tmp_table
metrik memberi tahu Anda berapa banyak tabel sementara yang harus dibentuk dalam memori. Untuk menentukan apakah kueri tertentu menggunakan tabel sementara, jalankan pernyataan EXPLAIN pada kueri. Detail dalam extra
kolom menunjukkan Using temporary
apakah kueri berjalan menggunakan tabel sementara.
Untuk menghitung persentase beban kerja Anda dengan kueri yang meluap ke disk, gunakan nilai metrik Anda dalam rumus berikut:
(created_tmp_disk_tables / (created_tmp_disk_tables + created_tmp_tables)) * 100
Idealnya, persentase ini harus kurang dari 25%. Jika persentasenya adalah 25% atau lebih besar, sebaiknya ubah dua parameter server, tmp_table_size, dan max_heap_table_size.
Skema database dan kueri
Berikut adalah beberapa tips yang perlu diingat saat membuat skema dan kueri database Anda.
Gunakan tipe data yang benar untuk kolom tabel Anda
Menggunakan jenis data yang benar berdasarkan jenis data yang ingin Anda simpan dapat mengoptimalkan penyimpanan dan mengurangi kesalahan karena jenis data yang salah.
Menggunakan indeks
Untuk menghindari kueri lambat, Anda bisa menggunakan indeks. Indeks dapat membantu menemukan baris dengan kolom tertentu dengan cepat. Lihat Cara menggunakan indeks di MySQL.
Gunakan JELASKAN untuk kueri PILIH Anda
Gunakan pernyataan EXPLAIN
untuk mendapatkan insight tentang apa yang dilakukan MySQL untuk menjalankan kueri Anda. Ini dapat membantu Anda mendeteksi hambatan atau masalah dengan kueri Anda. Lihat Cara menggunakan JELASKAN untuk performa kueri profil.