Bagaimana Anda melakukan pengujian beban dan perencanaan kapasitas untuk basis data?

34

Ini adalah pertanyaan kanonik tentang perencanaan kapasitas untuk basis data.

Terkait:

Saya ingin membuat pertanyaan kanonik tentang alat dan metode perencanaan kapasitas untuk basis data. Ini dimaksudkan sebagai pertanyaan kanonik.

Jelas, alur kerja umum adalah:

  • Taruh skenario Anda di tempat
  • Tambahkan pemantauan
  • Tambahkan lalu lintas
  • Evaluasi hasil
  • Remediasi berdasarkan hasil
  • Bilas, ulangi sampai cukup bahagia

Jangan ragu untuk menggambarkan berbagai alat dan teknik untuk berbagai server web, kerangka kerja, dll., Serta praktik terbaik.

gWaldo
sumber
Database hampir tidak pernah merupakan sistem yang berdiri sendiri. Itu harus dilihat dalam konteks utama, seringkali besar, server aplikasi di depan mereka. DB adalah perangkat data backend. Jadi saat menguji beban, Anda harus mempertimbangkan itu.
Nils

Jawaban:

24

Perencanaan Kapasitas Disk & RAM

Merencanakan kapasitas disk dan memori untuk server basis data adalah seni hitam. Lebih banyak lebih baik. Lebih cepat lebih baik.

Sebagai pedoman umum saya menawarkan yang berikut:

  • Anda ingin ruang disk lebih dari yang Anda akan pernah butuhkan.
    Ambil perkiraan terbaik Anda tentang berapa banyak ruang disk yang Anda perlukan untuk 3-5 tahun ke depan, lalu gandakan.
  • Anda akan membutuhkan cukup RAM untuk menyimpan indeks basis data Anda dalam memori, menangani permintaan terbesar Anda setidaknya dua kali lipat, dan masih memiliki cukup ruang tersisa untuk cache disk OS yang sehat.
    Ukuran indeks akan tergantung pada database Anda, dan segala sesuatu yang lain sangat bergantung pada kumpulan data Anda dan struktur permintaan / database. Saya akan menawarkan "Setidaknya 2x ukuran tabel terbesar Anda" sebagai saran, tetapi perhatikan bahwa saran ini rusak pada operasi pergudangan data yang sangat besar di mana tabel terbesar bisa mencapai puluhan atau ratusan gigabyte.

Setiap vendor basis data memiliki beberapa petunjuk tentang penyetelan kinerja cakram / memori / kernel OS Anda - Luangkan waktu dengan dokumentasi ini sebelum penyebaran. Itu akan membantu.


Benchmarking Beban Kerja dan Perencanaan Kapasitas

Dengan asumsi Anda belum dikerahkan ...

Banyak sistem basis data dikirimkan dengan Alat Benchmarking - Sebagai contoh, PostgreSQL dikirimkan dengan pgBench .
Alat-alat ini harus menjadi perhentian pertama Anda dalam membandingkan kinerja basis data. Jika memungkinkan Anda harus menjalankannya di semua server database baru untuk merasakan "berapa banyak pekerjaan" yang bisa dilakukan oleh server database.

Dipersenjatai sekarang dengan patokan mentah yang ABSOLUTELY MEANINGLESSmari kita pertimbangkan pendekatan yang lebih realistis untuk pembandingan: Muat skema database Anda dan tulis sebuah program yang mengisinya dengan data dummy, kemudian jalankan permintaan aplikasi Anda terhadap data itu.
Tolok ukur ini tiga hal penting: 1. Server basis data (perangkat keras) 2. Server basis data (perangkat lunak) 3. Desain basis data Anda, dan bagaimana ia berinteraksi dengan (1) dan (2) di atas.

Perhatikan bahwa ini membutuhkan lebih banyak upaya daripada tolok ukur sederhana yang sudah dibuat sebelumnya seperti pgBench: Anda perlu menulis beberapa kode untuk mengisi, dan Anda mungkin perlu menulis beberapa kode untuk melakukan kueri & melaporkan waktu pelaksanaan laporan.
Pengujian semacam ini juga secara substansial lebih akurat: Karena Anda bekerja dengan skema dan kueri, Anda dapat melihat bagaimana kinerjanya, dan menawarkan Anda peluang untuk membuat profil dan meningkatkan basis data / kueri Anda.

Hasil dari tolok ukur ini adalah tampilan ideal dari database Anda. Untuk amannya anggaplah bahwa Anda hanya akan mencapai 50-70% dari kinerja ini di lingkungan produksi Anda (sisanya menjadi bantal yang akan memungkinkan Anda untuk menangani pertumbuhan yang tidak terduga, kegagalan perangkat keras, perubahan beban kerja, dll.).


Sudah terlambat! Itu dalam produksi!

Setelah sistem Anda dalam produksi, sudah sangat terlambat untuk "benchmark" - Anda dapat mengaktifkan pencatatan kueri / waktu secara singkat dan melihat berapa lama hal yang harus dilakukan, dan Anda dapat menjalankan beberapa "stress test" kueri terhadap set data besar selama off jam. Anda juga dapat melihat penggunaan CPU, RAM, dan pemanfaatan I / O (bandwidth disk) untuk mengetahui seberapa banyak muatannya.
Sayangnya semua hal ini akan lakukan adalah memberi Anda gambaran tentang apa yang dilakukan sistem, dan konsep samar tentang seberapa dekat kejenuhan itu.
Itu membawa kita ke ...


Pemantauan yang sedang berlangsung

Semua tolok ukur di dunia tidak akan membantu Anda jika sistem Anda tiba-tiba melihat pola penggunaan baru / berbeda.
Untuk penyebaran basis data yang lebih baik atau lebih buruk tidak statis: Pengembang Anda akan mengubah banyak hal, kumpulan data Anda akan bertambah (sepertinya tidak pernah menyusut), dan pengguna Anda entah bagaimana akan membuat kombinasi gila dari peristiwa yang tidak pernah Anda prediksi dalam pengujian.

Untuk melakukan perencanaan kapasitas yang tepat untuk basis data Anda, Anda perlu menerapkan semacam pemantauan kinerja untuk mengingatkan Anda ketika kinerja basis data tidak lagi memenuhi harapan Anda. Pada titik itu Anda dapat mempertimbangkan tindakan perbaikan (perangkat keras baru, skema DB atau perubahan kueri untuk mengoptimalkan penggunaan sumber daya, dll.).


Catatan: Ini adalah panduan tingkat tinggi dan umum untuk mengukur ukuran perangkat keras basis data Anda dan mencari tahu berapa banyak penyalahgunaan yang dapat dilakukan. Jika Anda masih tidak yakin tentang cara menentukan apakah suatu sistem tertentu memenuhi kebutuhan Anda, Anda harus berbicara dengan pakar basis data.
Ada juga situs Stack Exchange yang didedikasikan khusus untuk manajemen basis data: dba.stackexchange.com . Cari arsip pertanyaan mereka atau telusuri tag khusus untuk mesin basis data Anda untuk saran lebih lanjut tentang penyempurnaan kinerja.

voretaq7
sumber
1
Selain itu, saat ini, Anda dapat menggunakan SSD untuk swap / operasi disk. Itu akan mempercepat permintaan yang menggunakan tabel sementara besar pada disk. Jadi, menambahkan lebih banyak SSD umumnya adalah ide yang sangat bagus.
Peter
2
@ Peter Saya tidak akan merekomendasikan SSD untuk ruang swap (jika Anda secara aktif bertukar ada tingkat churn yang sangat tinggi), meskipun dengan SSD yang cukup besar dan perataan keausan yang baik, disk dapat bertahan seumur hidup mesin. Saya telah melihat SSD digunakan untuk ruang tabel temp dengan hasil yang baik.
voretaq7
1
Harap perhatikan bahwa saran ini dalam komentar tentang SSD kini berusia 7 tahun. Setiap penyimpanan yang menyimpan database di server database Anda harus SSD pada 2019 atau lebih baru.
Mark Henderson
1

Secara umum Anda membutuhkan kasus penggunaan yang realistis untuk menguji kinerja. Praktik terbaik adalah melibatkan pengembang aplikasi dan pengguna akhir.

Catat apa yang biasanya mereka lakukan, parametrize (konten, jumlah tindakan bersamaan) untuk setiap kasus penggunaan.

Kemudian bangun sisi klien. Mesin fisik tunggal seringkali tidak cukup untuk membangun beban produksi.

Kemudian jalankan, evaluasi, tingkatkan, dan uji lagi.

Anda akan terkejut ketika kemacetan meningkat.

Nils
sumber