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

Alat penyetelan kinerja MySQL terbaik?

Berita buruknya:ada alat GUI untuk membantu dengan ini, tetapi ini adalah pekerjaan yang terampil dan luas. Jadi mereka tidak mencakup semuanya, kemungkinan Anda perlu menggunakan hal-hal baris perintah/pernyataan sql dll untuk membantu. Saya hanya benar-benar menggunakan alat baris perintah. Saya akan memberikan sedikit gambaran tentang hal-hal yang saya ketahui/telah digunakan:

Pertama, Anda memerlukan desain database yang baik. Jika desainnya buruk, Anda hanya bisa sejauh ini. Ini termasuk normalisasi, serta menggunakan jenis yang sesuai untuk bidang. Saya akan meninggalkan poin ini di sini, karena menurut saya ini sedikit berlebihan, dan bukan apa yang Anda cari.

Pastikan MySQL Query Cache sudah diatur dan berfungsi dan berikan sedikit lebih banyak RAM jika Anda bisa, dan pastikan kueri penting Anda tidak melakukan apa pun yang mencegah mysql melakukan caching. Misalnya, menggunakan fungsi SEKARANG () dalam kueri melakukan ini - untuk alasan yang jelas - SEKARANG berubah setiap detik! Sebagai gantinya Anda dapat memasukkan cap waktu ke dalam sql, dan menggunakan waktu ke menit/jam/hari terdekat (periode terbesar yang dapat Anda lewati) untuk memungkinkan mysql mendapatkan beberapa manfaat caching.

Untuk mulai mengoptimalkan hal-hal:Menempel "JELASKAN" di depan pilih adalah cara untuk melihat bagaimana kueri dijalankan dan mengidentifikasi cara memperbaikinya. Pelajari cara menginterpretasikan output:http://dev.mysql .com/doc/refman/5.0/en/using-explain.html Anda akan sering dapat menambahkan indeks baru/menambahkan kolom ke yang sudah ada untuk memperbaiki keadaan. Namun Anda juga akan menghadapi saat kueri perlu direstrukturisasi.

Memulai peningkatan kinerja dengan MySQL (dengan asumsi Anda belum mengetahui apa masalah kuerinya) adalah dengan memeriksa log kueri yang lambat - log ke file semua kueri membutuhkan waktu lebih lama dari x detik.

Ikhtisar, termasuk konfigurasi jika belum mencatat ini, ada di sini:http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - Saya juga menemukan bahwa menyetel long_query_time ke 0 selama sekitar satu hari, sehingga semua kueri dicatat di sini dengan waktu yang dibutuhkan, adalah cara yang berguna untuk mendapatkan gambaran persis ke mana arah kinerja. Tapi aku tidak akan pergi ke sana segera! Dan jangan biarkan, log bisa menjadi besar.

Setelah Anda masuk beberapa hari, saya menemukan mysqlsla (penganalisis log lambat mysql) dari sini:http://hackmysql.com/mysqlsla adalah alat yang baik.

Itu dapat melakukan lebih dari sekadar analisis log kueri yang lambat - baca manualnya. Tetapi untuk menjelaskan fungsinya untuk log yang lambat:log kueri yang lambat dapat berisi banyak data, sehingga sulit untuk mengetahui kueri mana yang paling mahal secara keseluruhan - misalnya:faktor berapa kali kueri dijalankan dan kapan dua kueri sebenarnya sama dengan id yang berbeda dalam klausa where.

MySQL sla melakukan ini semua untuk Anda. Ini berjalan melalui log, dan dapat mengelompokkan kueri yang sama/memiliki nilai berbeda dalam klausa where. Ini kemudian memberi Anda (secara default) 10 kueri teratas dalam hal total waktu eksekusi - yang sering kali memiliki beberapa kejutan, tetapi biasanya merupakan titik awal yang paling produktif - ambil kueri paling mahal dan gunakan EXPLAIN di atasnya dan lihat apakah Anda dapat meningkatkan itu.

Beberapa kueri membutuhkan waktu lama, dan tidak dapat diperbaiki dengan mudah. Dalam hal ini, bisakah Anda mendapatkan data dengan cara lain atau setidaknya menyimpannya di cache? Anda bahkan mungkin menemukan bahwa mengubah skema DB diperlukan. Demikian pula, beberapa kueri mungkin berada di bagian atas keluaran mysqlsla karena Anda sering menjalankannya (terutama benar jika long_query_time disetel ke 0), meskipun berjalan cukup cepat. Mungkin sudah waktunya menambahkan cache ke aplikasi Anda?

http://www.maatkit.org/ juga terlihat menjanjikan - tidak pernah menggunakannya, tetapi alat mk-query-profiler akan berguna untuk melihat lebih jauh mengapa kueri lambat.

Hal yang benar-benar terpisah untuk dilihat juga:halaman "status" di PHPMYADMIN (atau Anda dapat menjalankan semua kueri untuk menghasilkan info ini ....) - ini menyoroti hal-hal yang dianggap buruk dengan warna merah, dan dapat membantu Anda lihat di mana Anda bisa mendapatkan manfaat dari pengalokasian sumber daya sistem. Saya tidak tahu banyak tentang ini - pendekatan saya selalu bahwa jika ada sesuatu yang merah dan terlihat buruk, untuk pergi dan membacanya dan memutuskan apakah itu penting dan apakah saya harus melakukan sesuatu (biasanya berarti mengalokasikan lebih banyak sumber daya ke MySQL dengan mengubah konfigurasi).

Baru-baru ini saya menemukan bahwa menjalankan SHOW PROCESSLIST juga dapat berguna di server yang sedang bermasalah. Meskipun hanya memberi Anda info langsung (yah, cuplikan langsung), ini dapat membantu Anda merasakan apa yang terjadi pada waktu tertentu, terutama jika Anda menyegarkan beberapa kali dan mengamati perubahannya. Saya baru-baru ini melihat server menggunakan setiap koneksi mysql yang tersedia untuk menjalankan kueri yang identik menggunakan metode ini. Tentu, itu akan berada di log kueri yang lambat, tetapi ini sebagai cara yang sangat cepat dan jelas untuk melihat apa yang terjadi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. REGEXP Dengan PDO Mysql

  2. Hasil database sebagai objek atau array?

  3. Paginasi dalam PDO PHP

  4. kesalahan pemasangan mysql-python:Tidak dapat membuka sertakan file 'config-win.h'

  5. Bagaimana cara mengembalikan NULL ketika hasilnya kosong?