MySQL işlemi CPU kullanımının% 100'ünden fazlasını yapıyor


12

LAMP sunucumla ilgili bazı sorunlar yaşıyorum. Son zamanlarda her şey çok yavaşladı, ancak web sitelerimdeki ziyaretçi sayısı çok fazla değişmedi. topKomutu çalıştırdığımda MySQL işleminin% 150-200 CPU aldığını söylüyor. Bu nasıl mümkün, her zaman% 100'ün maksimum olduğunu düşündüm?

1,5 GB RAM ile Ubuntu 9.04 sunucu sürümünü kullanıyorum.

my.cnf ayarları:

key_buffer      = 64M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

myisam-recover         = BACKUP
max_connections        = 200
table_cache            = 512
table_definition_cache = 512
thread_concurrency     = 2

read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M

query_cache_limit   = 1M  # the maximum size of individual query results
query_cache_size    = 128M

MySQLTuner çıktısı :

MySQLTuner çıkışı

topkomut:

üst çıktı

Bu sorunun nedeni ne olabilir? my.cnfSunucunun askıda kalmasını önlemek için üzerinde değişiklik yapabilir miyim ?

Yanıtlar:


15
  1. Anahtar Arabelleğini Artır (sizinki şu anda 64 MB, ancak toplam dizinler 116M'dir, bu nedenle en az 128 MB koyun). Hemen yardım etmeli.
  2. Tablolarınızda mysqloptimize ve mysqlrepair komutlarını çalıştırın
  3. Tablo önbellek isabet oranını artırmak için tablo önbelleğini artırın / toplam tablo sayısını azaltın. Belki de silinebilecek kullanılmayan veya eski bazı tablolarınız var.

Önerilen diğer konfederasyon seçenekleri:

  • log_slow_queries = /var/log/mysql/mysql-slow.log
  • long_query_time = 4
  • log sorguları--dizinleri kullanmayan

Bir süre sonra günlük dosyasını kontrol edin.


Öneriler için teşekkür ederim, deneyeceğim ve yardımcı olup olmadığını size bildireceğim.
Temnovit

söyle bana, toplam endekslerin 116 milyon olduğunu nasıl hesapladın?
Temnovit

kendim var :)
Temnovit

5

Birden fazla çekirdeğe sahip bir işlemciniz veya birden çok işlemciniz var. İki çekirdeğiniz varsa ve bir işlem her iki çekirdeğin% 100'ünü kullanıyorsa, üstte% 200 olarak görünecektir.

Benzer şekilde, bu muhtemelen amaçlandığı gibi çalışıyor - yapılandırmanızda yanlış bir şey yok. Yayınladığınızdan sık sık askıda kalıyorsanız, tablolarınıza uygun dizinler eklemek (veya sorgularınızı optimize etmek) isteyebilirsiniz.


5

Run top -Hçalışan konuları ve sadece genel süreci tüm görmek için. Ayrıca, üstteyken 1tuşa basarsanız, ayrı CPU'lar / çekirdekler için cpu kullanımını gösterecektir.


Teşekkürler, bu gerçekten bana yardımcı oldu - yıllardır üstünü kullanıyor ve bu yeteneğe sahip olduğunu bilmiyordum. Sorgu iş parçacığı gelip bunun üstüne gitmek iken, her zaman% 60 kullanıcı CPU tüketen bir "ebedi" mysql iş parçacığı bulundu. Şimdi bu
konunun

1

Mysql'nin bağımsız çalışan birden çok işlemi (iş parçacığı) vardır, örneğin bir tanesi bellekten diske veri yazmaktan sorumludur. CPU'daki (ve / veya çoklu CPU'ların) birden fazla çekirdeği ile, birden fazla iş parçacığı çalışıyor ve böylece tek bir çekirdeğin% 100'ünden fazlasını çalıştırabiliyor - basit bir düzeyde, belki de her iki çekirdeğin her birinin% 75'i çalışıyor % 150 veriyor.


1

CPU ile ilgili olmayan bir sorun fark ettim. Aynı sunucuda apache ve MySQL kullanıyorsanız , apache etkinliğiniz arttığında kötü koşullara ( RAM ) ulaşabilirsiniz .

MySQLTunner, kullanılabilir 200 bağlantıyı (maksimum bağlantı ayarınız) kullanarak RAM'i dolduracağınızı söyler. Diyelim ki, 150 işlem için sınırlı bir apache'ye sahip olduğunuzu varsayalım, MySQL ve apache 150 bağlantı kullanmaya çalıştığında kesinlikle yeterli RAM'e sahip olmayacaksınız (Apache de iyi bir RAM yiyen olduğu için).

Yani bu RAM ile ilgili ve belki de henüz vurulmadınız :-) Üst komutlar sadece 15 apache işlemini gösteriyor (ancak yük ortalaması 3/6/16, yani fırtınanın 15 dakika önce olduğu ve şimdi ) bırakır.

CPU sorunu hakkında, shakalandy'nin iyi yanıtını tamamlamak için , bunun tek bir sorgudan kaynaklanıyor olabilir. Büyük bir tabloda olabilir veya çok sayıda yeniden dizinleme görevi yapabilir veya çok fazla geçici dosya, bir dizin eksik (kaldırıldı mı?) Vb. Kullanabilir. Bunu algılamanın tek yolu yavaş sorgu günlüğünü etkinleştirmektir (belki yüksek bir üçlü ile, 8s gibi). Sonra bu yavaş sorgu günlüğünü analiz etmek için mysqlsla aracını kullanın ve belirlenen sorgularda bazı açıklama çalıştırın.


Teşekkür ederim, gerçekten, mysql etrafında tek işlem değil :)
Temnovit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.