Kami mencoba melakukan debugging kinerja server dan saya ingin menangkap snapshot dari kueri yang dijalankan di server MySQL kami selama beberapa menit.
Saya kenal dengan MySQL SHOW FULL PROCESSLIST
, namun saya ingin dapat menjalankan ini melalui baris perintah sehingga saya dapat membuangnya ke file dan memposting prosesnya.
Apakah ada cara untuk menampilkan kueri ini ke file dan menjalankannya setiap detik?
Apakah ada cara yang lebih baik untuk menangkap semua pertanyaan yang sedang dijalankan?
Perhatikan bahwa saya tidak tertarik hanya pada kueri lambat (Saya kenal dengan log kueri lambat).
echo show full processlist | mysql
atau lebih baikSELECT info FROM information_schema.processlist WHERE Command="Query" AND User!="root"
dalam satu loop dalam bash. Tambahkan beberapa baris dan Anda akan mendapatkan fungsionalitas permintaan yang sama dariinnotop
ataupt-kill
Jawaban:
Saya akan menggunakan log permintaan lambat. Itu menangkap semua pertanyaan, bukan hanya yang lambat, jika Anda menetapkan long_query_time = 0.
Itu juga menangkap SEMUA pertanyaan, yang tidak benar dari teknik sniffing TCP yang disebutkan di sini; mereka tidak akan menangkap permintaan yang dieksekusi melalui soket. Ditto untuk menonton SHOW PROCESSLIST; Anda akan melewatkan pertanyaan yang berjalan cepat.
Jika Anda ingin menangkap kueri melalui daftar proses atau melalui lalu lintas TCP, saya sarankan menggunakan pt-query-digest Percona Toolkit. Ini dapat polling daftar proses untuk Anda (dan masuk akal dari hasilnya, yang sangat sulit dilakukan jika Anda mengambil banyak sampel itu sendiri), dan itu dapat menafsirkan protokol TCP MySQL, sehingga Anda dapat mengambil beberapa TCP lalu lintas dan menganalisisnya. Tentu saja, ini juga agregator / profiler / reporter kueri terbaik yang pernah ditulis, tetapi Anda tidak mengatakan apa yang ingin Anda lakukan dengan kueri setelah Anda menangkapnya.
sumber
Cara yang paling kuat adalah dengan menggunakan "log kueri umum", yang akan menangkap semua pertanyaan: http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Anda tidak menentukan versi server MySQL, tetapi jika Anda memiliki 5.1.12 atau yang lebih baru, Anda dapat mengaktifkan dan menonaktifkannya dengan variabel global melalui SQL; lihat dokumentasi untuk detailnya.
sumber
Coba perintah ini sebagai root (atau gunakan
sudo
):Ditemukan http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/
sumber
Tentu:
Bersulang
sumber
Ini mungkin tempat untuk Proksi Mysql . Ini pada dasarnya memungkinkan Anda untuk menangkap (dan memanipulasi) kueri yang dikirim. Pengaturan dasar untuk mencegat cukup mudah. Kemudian cukup ubah konfigurasi klien Anda untuk menunjuk pada proxy sehingga Anda dapat menangkap semua permintaan.
sumber
Program Wireshark berbasis terminal tshark dapat membantu:
sudo yum install wireshark
akan memberi Anda tshark di Amazon Linux dansudo apt-get install tshark
akan memberi Anda tshark di Ubuntu 14+sumber
Saya menggunakan solusi 'Rui Pedro Bernardino. Bekerja bagus kecuali saya mengubah beberapa hal di baris pertama seperti yang dijelaskan di bawah ini ...
sumber
Abadikan sesi mysql tcp menggunakan tcpdump, baik pertanyaan maupun balasan. Anda dapat menganalisis dump misalnya menggunakan alat maatkit:
http://www.maatkit.org/doc/mk-tcp-model.html
http://www.maatkit.org/doc/mk-query-digest.html
sumber
Saya sedang mencari dan mencari dan akhirnya saya mendarat di MONyog untuk memantau semua pertanyaan secara real-time yang dieksekusi di server mysql. Satu-satunya hal yang perlu dicatat adalah "Performance_schema" dan tabel "statement_digest" harus diaktifkan dan Performance_schema diaktifkan tersedia dengan MySQL 5.6.14 ke atas.
sumber