Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Optimalkan kinerja tulis untuk instans AWS Aurora

Dari pengalaman saya, Amazon Aurora tidak cocok untuk menjalankan database dengan lalu lintas tulis yang padat. Setidaknya dalam implementasinya sekitar tahun 2017. Mungkin akan meningkat seiring waktu.

Saya mengerjakan beberapa tolok ukur untuk aplikasi yang banyak menulis di awal tahun 2017, dan kami menemukan bahwa RDS (non-Aurora) jauh lebih unggul daripada Aurora dalam kinerja penulisan, mengingat aplikasi dan database kami. Pada dasarnya, Aurora dua kali lipat lebih lambat dari RDS. Klaim Amazon tentang kinerja tinggi untuk Aurora tampaknya sepenuhnya omong kosong yang didorong oleh pemasaran.

Pada November 2016, saya menghadiri konferensi Amazon re:Invent di Las Vegas. Saya mencoba mencari insinyur Aurora yang berpengetahuan luas untuk menjawab pertanyaan saya tentang kinerja. Yang bisa saya temukan hanyalah insinyur junior yang telah diperintahkan untuk mengulangi klaim bahwa Aurora secara ajaib 5-10x lebih cepat daripada MySQL.

Pada bulan April 2017, saya menghadiri konferensi Percona Live dan melihat presentasi tentang cara mengembangkan arsitektur penyimpanan terdistribusi seperti Aurora menggunakan MySQL standar dengan CEPH untuk lapisan penyimpanan terdistribusi sumber terbuka. Ada webinar dengan topik yang sama di sini:https://www.percona. com/resources/webinars/mysql-and-ceph , dipresentasikan bersama oleh Yves Trudeau, insinyur yang saya lihat berbicara di konferensi.

Apa yang menjadi jelas tentang menggunakan MySQL dengan CEPH adalah bahwa para insinyur harus menonaktifkan MySQL ubah buffer karena tidak ada cara untuk men-cache perubahan ke indeks sekunder, sementara penyimpanan juga didistribusikan. Hal ini menyebabkan masalah kinerja yang besar untuk penulisan ke tabel yang memiliki indeks sekunder (non-unik).

Ini konsisten dengan masalah kinerja yang kami lihat dalam membandingkan aplikasi kami dengan Aurora. Basis data kami memiliki banyak indeks sekunder.

Jadi, jika Anda benar-benar harus menggunakan Aurora untuk database yang memiliki lalu lintas tulis tinggi, saya sarankan hal pertama yang harus Anda lakukan adalah lepaskan semua indeks sekunder Anda.

Jelas, ini adalah masalah jika indeks diperlukan untuk mengoptimalkan beberapa kueri Anda. Kedua kueri SELECT tentu saja, tetapi juga beberapa kueri UPDATE dan DELETE mungkin menggunakan indeks sekunder.

Salah satu strategi mungkin adalah membuat replika baca non-Aurora dari klaster Aurora Anda, dan membuat indeks sekunder hanya di replika baca untuk mendukung kueri SELECT Anda. Saya belum pernah melakukan ini, tetapi tampaknya itu mungkin, menurut https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/

Tetapi ini masih tidak membantu kasus di mana pernyataan UPDATE/DELETE Anda memerlukan indeks sekunder. Saya tidak punya saran untuk skenario itu. Anda mungkin kurang beruntung.

Kesimpulan saya adalah saya tidak akan memilih untuk menggunakan Aurora untuk aplikasi yang banyak menulis. Mungkin itu akan berubah di masa depan.

Pembaruan April 2021:

Sejak menulis di atas, saya telah menjalankan benchmark sysbench terhadap Aurora versi 2. Saya tidak dapat membagikan angka spesifiknya, tetapi saya menyimpulkan bahwa peningkatan Aurora saat ini lebih baik untuk beban kerja tulis-berat. Saya menjalankan tes dengan banyak indeks sekunder untuk memastikan. Tapi saya mendorong siapa pun yang serius mengadopsi Aurora untuk menjalankan benchmark mereka sendiri.

Setidaknya, Aurora jauh lebih baik daripada Amazon RDS konvensional untuk MySQL menggunakan penyimpanan EBS. Di situlah mereka mengklaim Aurora 5x lebih cepat dari MySQL. Tetapi Aurora tidak lebih cepat dari beberapa alternatif lain yang saya uji, dan pada kenyataannya tidak dapat menandingi:

  • Server MySQL menginstal sendiri pada instans EC2 menggunakan penyimpanan lokal, terutama instans i3 dengan NVMe yang terpasang secara lokal. Saya mengerti penyimpanan instans tidak dapat diandalkan, jadi seseorang perlu menjalankan node yang berlebihan.

  • Server MySQL menginstal sendiri pada host fisik di pusat data kami, menggunakan penyimpanan SSD yang terpasang langsung.

Nilai menggunakan Aurora sebagai database cloud terkelola bukan hanya tentang kinerja. Ini juga memiliki pemantauan otomatis, pencadangan, failover, peningkatan, dll.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kesalahan mysql:Tabel mysql.innodb_table_stats tidak ditemukan

  2. SQL Query Untuk Menghapus Tabel Di MySQL

  3. Memilih kombinasi 2 kolom yang berbeda di mysql

  4. Bagaimana cara menggunakan regex di MySQL?

  5. perlu mengembalikan dua set data dengan dua klausa where yang berbeda