MySQL ikili yüklenmesinin önüne

4 Cevap php

Doğru adamlar,

Ben tablolar InnoDB kullanarak, bir MySQL veritabanı var, sık sık ben sorguları ve ekler büyük bir parti yok büyük bir cron işi yapmak zorunda. Ben bu cron işi çalıştırdığınızda, 5minutes ya da öyle çalışıyorsa bunun için, başka hiçbir sayfa yüklemek mümkün değildir. En kısa sürede yapıldığı gibi, sorguları sayfa yükler ve yürütülür.

Aslında tüm bu verileri sahip olduğu tablo buna eklenen, hatta ana sitesi tarafından sorgulanan varlık değildir. Bu sadece MySQL iş çok altında olduğu zaman, sitenin kalanı dokunulmaz olmasıdır. Bu kesinlikle bunun neden ne olabilir, doğru olmamalıdır? % 120 gibi büyük rakamlara MySQLD roketler (!!) Ve tüm MySQL sorguları için CPU kullanımı kilitlenir.

Sebep ne olabilir / düzeltebilirim?

4 Cevap

Hayır, tabii ki yanlış. Bu muhtemelen kötü yapılandırmasıyla ilgilidir. InnoDB ara bellek havuzu boyutu bir göz atın ve artabilir eğer bakın. Bu ram sıkıntısı tipik bir durum gibi geliyor. Sağlıklı kurulumları hemen hemen hiç bağlı cpu, ve kesinlikle toplu ekler değil yaparken.

InnoDB ile, diğer şeyler hala veritabanına erişmek gerekir. Eğer şema (veya ilgili kısmını) ve uygulamanın ilgili bölümlerini göstermek için hazır mısınız?

Belki donanım çekişme var.

Lütfen "cron" iş kullanıyor işlemlerin ne kadar büyük? Küçücük işlemleri kullanarak gereksiz IO büyük bir miktar oluşturacaktır.

Veritabanı sunucuları (sizin sunucular sabit diskler değil SSD kullanmak varsayarak) pil destekli raid denetleyicileri var mı? Değilse, commits oldukça yavaş olacaktır.

Ne kadar ram veritabanı sunucusu var? Mümkünse, biraz sizin veritabanı daha büyük ve veri boyutu> için innodb_buffer_pool ayarlanmış olduğundan emin olun - bu, salt iş yükleri onları hızlı yapmak gerekir, hangi zaten ram çıkıp anlamına gelecektir.

Eğer üretim-sınıf donanım üzerinde bir test sistemi sorunu yeniden miyim?

Ben size sorguları kadar bina nasıl yeniden düşünmek gerekebilir düşünüyorum. InnoDB sayfa düzeyinde kilitleri var, ama büyük güncellemeleri ile hala sorguları biraz aşağı kilitleyebilir.

Gerçek sorguları gönderebilir, ve .. ben bu gibi genel bir soru için genel bir çözüm olduğunu sanmıyorum tekrar deneyin, bu yüzden bugün ne yaptığınızı optimize içine bakmak.

Her sorgu arasında 1/10 saniye ya da öylesine için komut gecikme olabilir. Bu arka planda aktivitesini daha uzun sürer ama sağlayacaktır.

sleep( 0.1 );

Muhtemelen sadece yazma için bunu yapmak gerekir, çok ucuz okur.