Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 15232|Yanıt: 3

[Kaynak] MySQL CPU %100 yüksek çözüm

[Bağlantıyı kopyala]
Yayınlandı 11.10.2018 11:20:31 | | | |
Sunucu görev yöneticisini açın ve CPU sürecinin her zaman %99 olduğunu ve görünümün yüksek olan mysql süreci tarafından dagir edildiğini gör.


Processlist komutunun çıktısı hangi iş parçacıklarının çalıştığını gösterir ve veritabanının mevcut çalışma durumunu kontrol edebilirsiniz.

1. mysql/bin dizinine gidin ve mysqladmin processlist'e girin;
2. Mysql'i başlatın ve gösteri süreç listesini girin.
SUPER izniniz varsa, tüm başlıkları görebilirsiniz, aksi takdirde sadece hesabınızın başlıklarını görebilirsiniz.





Her sütunun anlamı ve amacı

id: Bir tanımlayıcı
kullanıcı: mevcut kullanıcıyı gösterir, eğer root değilse, bu komut yalnızca izinleriniz içindeki SQL ifadelerini gösterir.
sunucu: bu ifadenin hangi porttan geldiğini gösterir
db: Sürecin şu anda bağlı olduğu veritabanını gösterir.
komut: Mevcut bağlantı tarafından yürütülen komutları gösterir, genellikle uyku, sorgulama ve bağ.
zaman: Bu durumun saniyeler içinde süren süre.
durum: Mevcut bağlantıyı kullanan sql ifadesinin durumunu gösterir, ancak ifadenin yürütülmesinde yalnızca belirli bir durum, yani bir sql ifadesi, sorgulanmıştır, örneğin, tmp tablosuna kopyalama, sonuç sıralaması, veri gönderme vb. gibi bölümlerden geçmesi gerekebilir
bilgi: Bu SQL ifadesini gösterir, çünkü uzunluğu sınırlıdır, bu yüzden uzun SQL ifadesi tam olarak gösterilmez, ancak problem ifadesini değerlendirmek için önemli bir temeldir.


En uzun süreyi alan ve 1000 saniyeden fazla yürütülmeyen iki SQL sorgu ifadesi olduğu ve bilgi alanından kopyaladığımız SQL ifadelerinin aşağıdaki gibi ortak bir sorgu olduğu tespit edilmiştir:

'RatedPassenger' ratedpasse0_'dan cast(count(*) as SIGNED olarak col_0_0_ seçin, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ baseinfoco1_. CompanyId=ratedpasse0_. Şirket Id ve ordermatch2_. OrderId=ratedpasse0_. OrderId

Bu iki sorgu ifadesinin sürecini öldürüyoruz

10 saniye bekledikten sonra CPU'nun çok düştüğünü ama hâlâ çok yüksek olduğunu gördüm ve nedenini sorgulamaya devam edeceğim!



Join ortak sorgu ifadesi için, ilgili alana bir indeks ekleyin veya program sorgu kodunu değiştirin.
Bir indeks SQL ifadesi oluşturun

Son





Önceki:C# Wordpress'e giriş yapın
Önümüzdeki:Docker konteynerleri için port eşleme yöntemini değiştirin
 Ev sahibi| Yayınlandı 11.10.2018 13:03:02 |
Bu komutun en kritik olanı durum sütunudur ve mysql'de listelenen durumlar esas olarak şunlardır:

Kontrol tablosu  
  Veri sayfasını kontrol ediyorum (bu otomatik).  
  Kapatma masaları  
  Tabloda değiştirilen veriler diske atılır ve tükenmiş tablo kapatılır. Bu hızlı bir işlemdir, eğer değilse disk alanının dolu olup olmadığını veya diskin yük altında olup olmadığını kontrol etmelisiniz.  
  Connect Out  
  Çoğaltma köle sunucusu ana sunucuya bağlanıyor.  
  Diskteki tmp tablosuna kopyalama  
  Geçici sonuç kümesi tmp_table_size'den büyük olduğundan, geçici tablo bellek içi depolamadan disk depolamaya dönüştürülerek bellek tasarrufu sağlanır.  
  TMP tablosu oluşturma  
  Bazı sorgu sonuçlarını saklamak için geçici bir tablo oluşturuluyor.  
  Ana tablodan silinme  
  Sunucu, çoklu tablo silme işleminin ilk bölümünü gerçekleştiriyor ve ilk tabloyu yeni silmiş.  
  Referans tablolarından silme  
  Sunucu, çoklu tablo silme işleminin ikinci kısmını gerçekleştiriyor; bu da diğer tablolardan kayıtları silmek.  
  Dökme masaları  
  FLUSH TABLOLARINI yapıyorum, diğer iş parçacıklarının veri tablosunu kapatmasını bekliyorum.  
  Öldürüldü  
  Bir öldürme isteği bir iş parçacığına gönderilirse, iş başlığı öldürme bayrağını kontrol eder ve sonraki öldürme isteğini bırakır. MySQL, her ana döngüde öldürme bayraklarını kontrol eder, ancak bazı durumlarda iş parçacığı kısa bir süre için ölebilir. Eğer iş parçacığı başka bir iş parçacığı tarafından kilitlenmişse, kilit açıldığı anda öldürme talebi hemen devreye girer.  
  Kilitli  
  Diğer sorularla kilitlendi.  
  Veri gönderme  
  SELECT sorgusunun kaydı, sonuçlar istemciye gönderilirken işlenir.  
  Grup için sıralama  
  GRUP GRUP için Sıralama.  
  Sırayla sıralama  
  Sıralama ORDER BY için yapılıyor.  
  Açılış masaları  
  Bu süreç, başka faktörler engellenmedikçe hızlı olmalıdır. Örneğin, bir veri tablosu başka bir iş parçacığı tarafından ALTER TABLE veya LOCK TABLE ifadesi çalıştırılmadıkça açılamaz. Bir masa açmaya çalışıyorum.  
  Kopyaların kaldırılması  
  SELECT DISTINCT sorgusu yürütülüyor, ancak MySQL önceki aşamadaki tekrarlanan kayıtları optimize edemiyor. Bu nedenle, MySQL sonuçları istemciye göndermeden önce tekrarlanan kayıtları tekrar kaldırmalıdır.  
  Yeniden açma masası  
  Bir masada bir kilit elde edilir, ancak tablo yapısı değiştirildikten sonra bu kilitin değiştirilmesi gerekir. Kilidi zaten açtım, veri sayfasını kapattım ve veri tablosunu yeniden açmaya çalışıyorum.  
  Sıralamayla onarım  
  Düzeltme talimatı, bir indeks oluşturmak için sıralamadır.  
  Keycache ile onarım  
  Düzeltme direktifi, indeks önbelleğini kullanarak yeni indeksleri teker teker oluşturmaktır. Tamir yoluyla sıralamadan daha yavaş olur.  
  Güncelleme için satırlarda arama  
  Uygun kayıtlar güncellenmek üzere belirleniyor. GÜNCELLEME ilgili kaydı değiştirmeden önce yapılmalıdır.  
  Uyumak  
  Müşterinin yeni bir talep göndermesini bekliyorum.  
  Sistem kilidi  
  Harici bir sistem kilidi almak için bekliyorum. Aynı anda çalışan mysqld sunucuları aynı tabloyu talep etmiyorsa, harici sistem kilitleri –skip-external-locking parametresi eklenerek engellenebilir.  
  Kilidi yükseltme  
  INSERT DELAYED, yeni bir kayıt eklemek için bir kilit tablosu almaya çalışıyor.  
  Güncelleme  
  Eşleşen kayıtları arıyor ve değiştiriyor.  
  Kullanıcı Kilidi  
  GET_LOCK() bekliyor.  
  Masa beklemek  
  Başlık, veri sayfası yapısının değiştirildiği ve yeni yapıyı almak için yeniden açılması gerektiği bildirildi. Sonra, veri tablosunu yeniden açmak için, diğer tüm iş parçacıklarının tabloyu kapatmasını beklemeniz gerekir. Bu bildirim aşağıdaki durumlarda gerçekleşir: TABLOLARI FLUSH tbl_name, TABLOYU DEĞIŞTIR, TABLOYU YENİŞTİR, TAMIR TABLOSU, ANALIZ TABLOSU veya TABLOYU OPTIMIZE ET.  
  Handler Insert'i bekliyor  
  INSERT DELAYED tüm bekleyen eklemeleri işledi ve yeni bir talep bekliyor.  
  Çoğu durum hızlı işlemlere karşılık gelir; bir iş parçacığı birkaç saniye aynı durumda kalırsa, kontrol edilmesi gereken bir sorun olabilir.
 Ev sahibi| Yayınlandı 1.03.2019 10:26:49 |
 Ev sahibi| Yayınlandı 1.03.2019 10:34:13 |


Bir veriyi sorgulamak 10 saniye sürer.
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com