Lima cara tanpa biaya untuk meningkatkan kinerja MySQL – Labs – Perangkat Lunak
Labs

Lima cara tanpa biaya untuk meningkatkan kinerja MySQL – Labs – Perangkat Lunak

CIO dan kepala departemen TI terbiasa dengan gagasan untuk melakukan lebih banyak dengan lebih sedikit, tetapi jika bisnis Anda sangat bergantung pada sistem manajemen basis data relasional (RDBMS), ada kemungkinan besar Anda dapat melakukan lebih banyak tanpa investasi tambahan .

Meningkatkan kinerja database adalah sesuatu dari ‘seni gelap’, jadi kami telah menguji lima peningkatan kinerja tanpa biaya iTnews Lab. Hasilnya mungkin mengejutkan Anda.

Bagaimana kami menguji

Kami menjalankan server HP ProLiant DL380p Gen8 kami, didukung oleh CPU delapan inti Intel Xeon E5-2650 ganda dan RAM 32GB, menjalankan dua mesin virtual (VM) terpisah yang kami buat menggunakan hypervisor vSphere VMware, dengan masing-masing mengimplementasikan Ubuntu Server 14.04.1 Sistem operasi LTS dan MySQL 5.5.38.

VM pertama adalah build dengan spesifikasi terbatas yang hanya menyediakan tiga CPU virtual (vCPU) dan 1GB RAM; yang kedua, delapan vCPU dan RAM 8GB. Kami membuat database yang identik untuk kedua VM, masing-masing dengan delapan tabel dan satu juta catatan per tabel, memberikan ukuran total masing-masing 2GB.

Kami menggunakan mesin virtual untuk melakukan serangkaian tes transaksi read-only (RO) dan read-write (RW) dengan Sysbench 0.5, dari satu hingga 128 utas bersamaan dalam loncatan biner. Kami sengaja memilih ukuran basis data 2GB untuk memastikannya terlalu besar untuk sepenuhnya di-cache di VM RAM 1GB kami tetapi cukup kecil untuk melakukan hal itu di VM 8GB.

Untuk memaksimalkan keakuratan hasil kami, vCPU dari setiap VM dibagi menggunakan Linux kumpulan tugas perintah untuk menangani tugas benchmark dan database secara terpisah. VM 1GB memiliki satu vCPU yang mengawasi Sysbench, dua sisanya diserahkan ke MySQL, sedangkan VM 8GB memiliki dua vCPU di Sysbench dan enam terakhir menjalankan DBMS. (Ini adalah teknik yang direkomendasikan oleh MariaDB Foundation/SkySQL.)

Kinerja basis data adalah hal yang sangat licin untuk dipatuhi – ia terus berubah, tergantung pada pengaturan perangkat keras Anda dan basis data itu sendiri. Meski begitu, hasil pengujian kami menunjukkan lima teknik sederhana ini layak untuk diselidiki lebih lanjut untuk penyiapan Anda dan mungkin memberikan peningkatan kinerja tanpa biaya tertinggi.

Konfigurasi awal

Meskipun tidak ada dua database yang sama, satu fitur umum yang mempengaruhi kinerja adalah my.cnf berkas konfigurasi. MySQL menyediakan apa yang tampak seperti sejuta variabel global yang berbeda untuk menyempurnakan throughput transaksi dalam satu file ini dan semua distribusi MySQL menampilkannya dalam pengaturan awal, termasuk MySQL 5.5.38 ketika diinstal dari Ubuntu Server 14.04.1 LTS atau Debian 7.6. 0.

Untuk sebagian besar, MySQL hanya mengimplementasikan opsi default dan menyertakan tambahan apa pun yang ditentukan di awal my.cnf file sebagai menimpa. Pengaturan utama yang disediakan di file konfigurasi MySQL Ubuntu Server 14.04.1 LTS meliputi:

key_buffer = 16M

max_allowed_packets = 16 jt

thread_stack = 192K

thread_cache_size = 128

query_cache_limit = 1 jt

query_cache_size = 16M

Mulai dari tingkat dasar ini, kami menguji lima opsi konfigurasi yang berbeda pada kedua VM untuk melihat seberapa jauh kecepatan transaksi dapat ditingkatkan dan bagaimana modifikasi memengaruhi kinerja baca-saja dan baca-tulis di pengaturan perangkat keras yang berbeda.

Performance Tweak #1 – Meningkatkan ukuran buffer pool InnoDB

Sejak MySQL 5.5, InnoDB telah menjadi mesin penyimpanan basis data default dan merupakan pilihan cerdas, jika tidak ada alasan lain selain penguncian tingkat barisnya, yang memungkinkan potensi konkurensi yang lebih besar daripada penguncian tabel MyISAM pendahulunya. Ini juga dikatakan membantu InnoDB memberikan tindakan penulisan yang lebih cepat, meskipun MyISAM masih dianggap oleh banyak orang sebagai pilihan pertama untuk kinerja di sebagian besar aplikasi hanya-baca.

Salah satu manfaat InnoDB adalah mengimplementasikan area penyimpanan memori tunggalnya sendiri atau ‘buffer pool’ untuk menyimpan data dan indeks. Jika Anda tidak menentukannya di my.cnf, MySQL 5.5 mengimplementasikan ukuran buffer default 128MB, namun Oracle merekomendasikan kumpulan harus ‘sebesar nilai praktis’. Ini adalah indikasi yang jelas bahwa tidak ada nilai yang sempurna dan itu harus bervariasi dengan pengaturan perangkat keras Anda. (Oracle mengatakan bahwa kumpulan buffer yang besar dapat membuat InnoDB bertindak seperti database dalam memori.)

Tetapi pada server build dengan hanya 1GB RAM yang tersedia, ada batasan seberapa jauh Anda dapat atau harus melakukannya, jadi untuk memastikan kami tidak membuat kesalahan sendiri karena overcommitting, kami meningkatkan ukuran buffer 128MB default ke a 512MB konservatif untuk pengujian pada VM 1GB kami.

Ini penting karena penggunaan RAM total MySQL tidak hanya mencakup kumpulan buffer, tetapi juga sekitar 2,7 MB RAM untuk setiap utas bersamaan yang diminta untuk dibuat dengan caching utas diimplementasikan. Jadi dalam mengatur ukuran buffer pool Inno3B, Anda tidak hanya harus memperhitungkan total RAM Anda, tetapi juga memperkirakan kebutuhan buffer dan cache yang mungkin dibutuhkan di tempat lain.

Tetapi dengan 8GB RAM pada VM kedua kami, kami dapat membuang 3GB ke buffer pool dengan impunitas.

HASIL KINERJA

Melihat hasil VM 1GB, peningkatan kinerja read-only tidak benar-benar meningkat secara signifikan sampai jumlah thread naik di atas empat, dengan tingkat peningkatan 4-6 persen. Namun, kinerja baca-tulis hampir kebalikannya – peningkatan signifikan hingga 11,5 persen pada jumlah utas rendah, menurun tetapi masih signifikan hingga tingkat 128-hitungan teratas. Jika Anda melihat hasil mentahnya, transaksi hanya-baca memuncak pada hitungan delapan utas sedangkan kinerja baca-tulis tidak maksimal hingga 32 utas.

Tentu saja pada pembuatan server ini, meningkatkan ukuran kumpulan buffer InnoDB telah membuat peningkatan yang bermanfaat, terlepas dari apa pun yang terjadi di dalam my.cnf mengajukan.

MySQL 5.5.38 Ukuran kumpulan buffer InnoDB

Sebagai perbandingan, dan selain buffer pooling InnoDB, VM 8GB kami memberikan hasil yang sama sekali berbeda, yang paling jelas adalah tingkat transaksi read-only yang datar pada jumlah thread delapan dan lebih tinggi, yang sangat kontras dengan kinerja baca-tulis yang jelas meningkat dengan jumlah utas.

Adapun perubahan yang disebabkan oleh ukuran kumpulan buffer InnoDB, ada keuntungan pada jumlah utas yang lebih rendah untuk kecepatan baca-saja dan baca-tulis, tetapi tampaknya sedikit menurunkan tingkat transaksi dalam mode baca-tulis pada jumlah utas yang lebih tinggi. Namun, dengan kendala lain yang terlihat dalam my.cnf file, terlalu dini untuk menghapus kumpulan buffer dalam situasi ini dulu.

Menyesuaikan kumpulan buffer InnoDB

Secara keseluruhan, tampaknya mengubah kumpulan buffer InnoDB membuat lebih banyak perbedaan pada VM 1GB daripada VM 8GB yang lebih banyak sumber daya. Tapi itu mungkin tergantung pada bagaimana MySQL mengimplementasikan buffer pool – dan cara Anda menggunakannya.

Ingat bahwa jika Anda tidak memilih ukuran, MySQL memilih 128MB untuk Anda, yang berarti hanya ada satu buffer cahaya yang mudah ditangani. Pada VM 8GB, kumpulan itu sekarang menjadi gunung manusia 3GB.

Tapi inilah fitur yang sangat keren dari buffer InnoDB – meskipun Anda dapat membuat buffer pool juga sebesar yang Anda inginkan, MySQL 5.5 memungkinkan Anda membagi pool menjadi beberapa bagian atau ‘instance’ setelah Anda melampaui 1GB. Idenya adalah bahwa banyak buffer membantu mengurangi konflik selama operasi baca-tulis bersamaan dan membuat penggunaan semua ruang yang indah itu lebih efisien. Rekomendasi Oracle untuk efisiensi terbaik adalah Anda secara efektif mengatur contoh beralih ke jumlah gigabyte RAM yang Anda sisihkan untuk buffer pool. Misalnya, jika Anda menyisihkan 3GB RAM, contoh switch diatur ke 3, sehingga setiap instance mendapat potongan 1GB untuk dimainkan.

Anda melakukan ini dengan menerapkan yang berikut: my.cnf perintah:

innodb_buffer_pool_size = 3G

innodb_buffer_pool_instances = 3

Tapi mengatur contoh switch sepenuhnya opsional dan kami tidak menggunakannya dalam pengujian khusus ini. Sebagai gantinya, kami menjalankan tes tambahan menggunakan contoh beralih di akhir yang lebih baik menunjukkan apa yang dilakukannya untuk kinerja secara keseluruhan, terutama kecepatan baca-tulis pada server yang lengkap.

Satu hal lagi – jika Anda menjalankan server database khusus, Oracle menunjukkan bahwa dalam pengaturan tertentu, Anda dapat mengalokasikan sebanyak 80 persen RAM ke kumpulan buffer InnoDB, menunjukkan betapa efektifnya hal itu.

Baca terus untuk empat cara gratis dan mudah lainnya untuk menyempurnakan database MySQL Anda…

Posted By : totobet hk