Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 15232|Jawab: 3

[Sumber] Solusi tinggi 100% CPU MySQL

[Salin tautan]
Diposting pada 11/10/2018 11.20.31 | | | |
Buka pengelola tugas server dan temukan bahwa proses CPU selalu 99%, dan tampilan ditempati oleh proses mysql, yang tinggi.


Output perintah daftar proses menunjukkan utas mana yang sedang berjalan, dan Anda dapat memeriksa status database yang sedang berjalan saat ini.

1. Buka direktori mysql/bin dan masuk ke daftar proses mysqladmin;
2. Mulai mysql dan masuk ke show processlist.
Jika Anda memiliki izin SUPER, Anda dapat melihat semua utas, jika tidak, Anda hanya dapat melihat utas akun Anda.





Arti dan tujuan dari setiap kolom

id: Pengidentifikasi
user: menampilkan pengguna saat ini, jika bukan root, perintah ini hanya akan menampilkan pernyataan SQL dalam izin Anda.
host: menunjukkan IP mana pernyataan ini berasal dari port mana
db: Menampilkan database yang saat ini terhubung dengan proses.
perintah: Menampilkan perintah yang dijalankan oleh koneksi saat ini, biasanya tidur, kueri, dan sambungkan.
waktu: Waktu status ini berlangsung, dalam hitungan detik.
state: Menampilkan status pernyataan sql yang menggunakan koneksi saat ini, tetapi hanya status tertentu dalam eksekusi pernyataan, pernyataan sql, yang telah dikueri, misalnya, mungkin perlu melalui penyalinan ke tabel tmp, Hasil pengurutan, Mengirim data, dll
info: Menampilkan pernyataan SQL ini, karena panjangnya terbatas, sehingga pernyataan SQL yang panjang tidak ditampilkan sepenuhnya, tetapi merupakan dasar penting untuk menilai pernyataan masalah.


Ditemukan bahwa ada dua pernyataan kueri SQL yang memakan waktu terlama dan belum dieksekusi selama lebih dari 1000 detik, dan pernyataan SQL yang kami salin dari bidang info adalah kueri bersama, sebagai berikut:

pilih cast(count(*) sebagai SIGNED) sebagai col_0_0_ dari ratedpasse0_ 'RatedPassenger', 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ di mana baseinfoco1_. Id Perusahaan=ratedpasse0_. CompanyId dan ordermatch2_. OrderId=ratedpasse0_. ID Pesanan

Kami mematikan proses dua pernyataan kueri ini

Setelah menunggu selama 10 detik, saya menemukan bahwa CPU telah turun banyak, tetapi masih sangat tinggi, dan saya akan terus menanyakan alasannya!



Untuk pernyataan kueri gabungan gabungan, tambahkan indeks ke bidang terkait atau ubah kode kueri program.
Membuat pernyataan SQL indeks

Akhir





Mantan:C# masuk ke Wordpress
Depan:Mengubah metode pemetaan port untuk kontainer buruh pelabuhan
 Tuan tanah| Diposting pada 11/10/2018 13.03.02 |
Yang paling kritis dari perintah ini adalah kolom status, dan status yang tercantum di mysql terutama sebagai berikut:

Tabel pemeriksaan  
  Memeriksa lembar data (ini otomatis).  
  Menutup tabel  
  Data yang dimodifikasi dalam tabel sedang dibuang ke disk, dan tabel yang telah habis sedang ditutup. Ini adalah operasi yang cepat, jika tidak, Anda harus memeriksa apakah ruang disk penuh atau apakah disk sedang dibeban.  
  Terhubung Keluar  
  Server slave replikasi terhubung ke server utama.  
  Menyalin ke tabel tmp pada disk  
  Karena kumpulan hasil sementara lebih besar dari tmp_table_size, tabel sementara sedang dikonversi dari dalam memori ke penyimpanan disk untuk menghemat memori.  
  Membuat tabel tmp  
  Tabel sementara sedang dibuat untuk menyimpan beberapa hasil kueri.  
  Menghapus dari tabel utama  
  Server sedang melakukan bagian pertama dari penghapusan multi-tabel dan baru saja menghapus tabel pertama.  
  Menghapus dari tabel referensi  
  Server melakukan bagian kedua penghapusan multi-tabel, yaitu menghapus rekaman dari tabel lain.  
  Meja pembilasan  
  Melakukan FLUSH TABLES, menunggu utas lain menutup tabel data.  
  Terbunuh  
  Jika permintaan kill dikirim ke utas, utas akan memeriksa bendera pemunahan dan mengabaikan permintaan pembunuhan berikutnya. MySQL memeriksa bendera pembunuhan di setiap loop utama, meskipun dalam beberapa kasus utas mungkin mati untuk waktu yang singkat. Jika utas dikunci oleh utas lain, permintaan pemunahan akan segera diterapkan saat kunci dilepaskan.  
  Terkunci  
  Dikunci oleh kueri lain.  
  Mengirim data  
  Rekaman kueri SELECT sedang diproses saat hasilnya dikirim ke klien.  
  Penyortiran untuk grup  
  Mengurutkan untuk GROUP BY.  
  Menyortir untuk pesanan  
  Penyortiran sedang dilakukan untuk ORDER BY.  
  Membuka meja  
  Proses ini harus cepat kecuali terganggu oleh faktor lain. Misalnya, tabel data tidak dapat dibuka oleh utas lain sampai pernyataan ALTER TABLE atau LOCK TABLE dieksekusi. Mencoba membuka meja.  
  Menghapus duplikat  
  Kueri SELECT DISTINCT sedang dijalankan, tetapi MySQL tidak dapat mengoptimalkan catatan duplikat pada tahap sebelumnya. Oleh karena itu, MySQL perlu menghapus catatan duplikat lagi sebelum mengirimkan hasilnya ke klien.  
  Buka kembali tabel  
  Kunci pada tabel diperoleh, tetapi harus dimodifikasi setelah struktur tabel dimodifikasi. Sudah melepaskan kunci, menutup lembar data, dan mencoba membuka kembali tabel data.  
  Perbaiki dengan menyortir  
  Instruksi perbaikan adalah mengurutkan untuk membuat indeks.  
  Perbaiki dengan keycache  
  Direktif perbaikan menggunakan cache indeks untuk membuat indeks baru satu per satu. Ini akan lebih lambat daripada Perbaiki dengan menyortir.  
  Mencari baris untuk pembaruan  
  Catatan yang memenuhi syarat sedang diidentifikasi untuk pembaruan. Ini harus dilakukan sebelum UPDATE memodifikasi catatan yang relevan.  
  Tidur  
  Menunggu klien mengirim permintaan baru.  
  Kunci sistem  
  Menunggu untuk mendapatkan kunci sistem eksternal. Jika tidak ada server mysqld yang berjalan pada saat yang sama meminta tabel yang sama, kunci sistem eksternal dapat dilarang dengan menambahkan parameter –skip-external-locking.  
  Mengurungkan kunci  
  INSERT DELAYED mencoba mendapatkan tabel kunci untuk menyisipkan catatan baru.  
  Memperbarui  
  Mencari catatan yang cocok dan memodifikasinya.  
  Kunci Pengguna  
  sedang menunggu GET_LOCK().  
  Menunggu meja  
  Utas diberitahu bahwa struktur lembar data telah dimodifikasi dan perlu dibuka kembali untuk mendapatkan struktur baru. Kemudian, untuk membuka kembali tabel data, Anda harus menunggu hingga semua utas lain menutup tabel. Pemberitahuan ini terjadi dalam kasus berikut: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, atau OPTIMIZE TABLE.  
  Menunggu sisipan handler  
  INSERT DELAYED telah memproses semua sisipan yang tertunda dan sedang menunggu permintaan baru.  
  Sebagian besar status sesuai dengan operasi cepat, selama utas tetap dalam keadaan yang sama selama beberapa detik, maka mungkin ada masalah yang perlu diperiksa.
 Tuan tanah| Diposting pada 01/03/2019 10.26.49 |
 Tuan tanah| Diposting pada 01/03/2019 10.34.13 |


Dibutuhkan 10 detik untuk mengkueri sepotong data.
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com