PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Penyetelan Kinerja Rel untuk Produksi?

Saya telah menghabiskan beberapa waktu untuk menyetel aplikasi saya di heroku, dan telah menghabiskan beberapa waktu untuk bekerja pada penyetelan kinerja aplikasi Rails di berbagai pengaturan.

Ketika saya menjalankan ab -n 300 -c 75 ...myapp.com.... # yang merupakan cadangan ke situs utama saya, dan ada dalam paket cedar gratis dengan unicorn

Requests per second:    132.11 [#/sec] (mean)
Time per request:       567.707 [ms] (mean)
Time per request:       7.569 [ms] (mean, across all concurrent requests)

(ini bertentangan dengan halaman beranda yang tidak melakukan sesuatu yang intens, jadi saya memberikannya hanya sebagai "seberapa cepat heroku dapat berada di paket gratis dengan halaman yang sangat sederhana?" contoh, bukan "aplikasi Anda seharusnya secepat ini")

Ini daftar periksa Rails Performance Tuning 101 saya:

  1. Ukur waktu buka browser/halaman terlebih dahulu (browser membuat banyak permintaan, ab hanya memberi tahu Anda tentang salah satunya, dan biasanya permintaan halaman utama Anda bukan masalahnya), dapatkan nomor dasar pemuatan halaman dari alat seperti www.webpagetest.org atau www.gtmetrix.com untuk halaman publik, atau alat browser Yslow, kecepatan halaman google, atau dynatrace untuk halaman pribadi. Jika Anda melihat diagram air terjun pemuatan halaman (panel 'Bersih' di chrome/firefox), biasanya menunjukkan bahwa html Anda dimuat dengan cepat (di bawah satu detik), tetapi kemudian yang lainnya membutuhkan 1-3 detik untuk dimuat. Ikuti Yslow/rekomendasi kecepatan halaman tentang cara meningkatkan (pastikan Anda menggunakan hal-hal pipa aset Rails 3.1 sepenuhnya)

  2. Baca file log/relik baru Anda untuk menemukan sweet spot dari permintaan 'paling lambat/paling sering terkena', dan buat profil apa yang terjadi untuk permintaan itu (apakah ruby ​​lambat/banyak penggunaan mem, atau banyak pertanyaan?) Anda perlu memiliki cara yang andal untuk mendeteksi dan memantau masalah kinerja, dan tidak hanya mengubah berbagai hal secara acak. Setelah Anda mengidentifikasi beberapa area target, buat skrip pengujian untuk membantu sebelum/sesudah pengujian dan buktikan bahwa perubahan Anda membantu, dan deteksi jika regresi merayap masuk.

  3. Kurangnya Indeks pada kolom db adalah salah satu masalah paling umum, dan paling mudah untuk diatasi. Jalankan jelaskan pada kueri target, atau lihat log kueri lambat Anda, untuk melihat apa yang dilakukan perencana kueri. Tambahkan indeks untuk kunci asing, kolom pencarian, atau data primer (mencakup indeks) yang sesuai. Uji ulang dengan data produksi aktual untuk membuktikan bahwa itu membuat perbedaan. (Anda dapat menjalankan explain di heroku, serta menjalankan kueri untuk indeks yang hilang atau tidak digunakan)

  4. Sebagian besar aplikasi Rails berkinerja buruk menderita kueri N+1 karena sangat mudah untuk menulis order.owner.address.city dan tidak memikirkan apa yang terjadi ketika itu dalam satu lingkaran. Kueri N+1 tidak selalu merupakan kueri yang lambat, jadi kueri tersebut tidak muncul di log kueri yang lambat, hanya saja jumlahnya banyak, dan lebih efisien untuk melakukan semuanya sekaligus. Gunakan :include atau .includes() untuk memuat data tersebut, atau coba lakukan kueri Anda dengan cara lain.

  5. Analisis alur aplikasi Anda dan cari peluang caching. Jika pengguna memantul bolak-balik antara halaman indeks dan halaman detail, dan kembali lagi, mungkin tampilan ajax dari detail, tanpa meninggalkan halaman indeks akan memberi mereka data yang mereka butuhkan dengan cara yang lebih cepat. Saya menulis beberapa lebih banyak pemikiran tentang itu di blog saya

Saya memberikan presentasi tentang teknik-teknik ini dan ide-ide lain di Chicago pada konferensi WindyCityRails tahun ini. Anda dapat melihat video di sini di www.RailsPerformance saya .com blog Yang saya sukai dari heroku adalah Anda harus terukur sejak awal. Saat Anda melihat diskusi di milis, Anda melihat bahwa kebanyakan orang mengetahui praktik terbaik kinerja, dan cara memaksimalkan server. Saya juga suka bagaimana Anda jika Anda ingin tetap murah, Anda belajar bagaimana trik penyetelan kinerja yang akan membuat Anda paling berhasil.

Semoga berhasil!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails tidak memutar kembali transaksi setelah gagal menyimpan ()

  2. UnknownHostException ketika mencoba terhubung ke heroku-postgres dari proyek Springboot lokal dengan Spring JPA

  3. Bagaimana cara merotasi log PgBouncer di Linux/Windows?

  4. Dapatkan array postgresql ke dalam struct dengan StructScan

  5. Kembalikan Nilai Boolean sebagai TRUE atau FALSE di Select (PostgreSQL/pgAdmin)