Az tutarsızlıklar ile, MySQL sorgu hızını test etmek için nasıl?

4 Cevap php

Ben hız için SQL sorguları test etmek için basit bir yol gerekir. Ben donanım farklılıkları hakkında endişeli, ben temelde göreli bir sayı gerekir değilim.

Bu PHP (onun bulanık, ama işleri) ile yapıyorum budur:

// CONNECT TO DB HERE

$sub = new YomoSubscription(95,783);

$t = microtime(TRUE);

// contains the SQL db call i'm testing
$fp = $sub->generateFingerprint(); 

echo microtime(TRUE)-$t;

PROBLEM yaşıyorum bazen ilk on connect / benim test örneğin 1.25 sn sürer çalıştırın olmasıdır. Ancak sonraki it üzerine 0.004 sn sürer bağlanır ... Why is this?

Ben MySQL sorgu önbellek my.ini kapalı eminim:

query_cache_size=0

4 Cevap

MySQL aslında saniye ilk sorguda diski vurmak değil, çünkü ilk sorgu yavaş olabilir.

Okunduğu gibi işletim sistemi bellekteki dosyaları önbelleğe; Bir sonuç olarak, daha sonraki okuma aslında diski vurmak gerekmeyebilir, ve çok daha hızlı döner.

Genel bir kural olarak, genellikle bir sorgu birkaç kez çalıştırın ve tutarlılık arayın. 2., 3. ve 4. zamanın yaklaşık aynı miktarda alırken daha sık değil, ilk çalıştırma, birkaç kez daha uzun sürer. Bunlar sonraki çalışır muhtemelen gerçek bir üretim sisteminde görürsünüz performans tür daha fazla temsilcisi vardır - sizin üretim veritabanı OS önbellek bu verileri tutmak gerekir, çünkü senin dev sistem nadiren erişilir iken.

Sorgu performansı söz konusu olduğunda sonunda, çoğunlukla, sadece bu gelişme hızlı bir geçiş vermek gerektiğini, ve really çalışması gerek sorguları görmek için üretim yavaş sorgu günlüğünü izlemek.

Bildiğim kadarıyla programlama performans verileri için çalışan sorgu gider - birkaç numune almak ve medyan kullanın. Fakat pratikte, bu üretim içine kaçıyorum gerçek performans sorunları korkunç temsilcisi olacak değildir.

SEÇ Benchmark kullanmayı deneyin (kez, sorgu)

Daha fazla bilgi: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark

En varsayalım:

  1. Eğer persistan bağlantı kullanmak yok
  2. istatistikler yapılır sunucusu (ağ bağlantısı) yüklü veritabanı
  3. kimse (satır / tablo kilitleri) veritabanını kullanıyor
  4. Hiçbir diğer ağır işlem çalışıyorsa
  5. vs ...

Eğer gerçekten kriter sorgu istiyorsanız, aşağıdakileri yapmanız gerekir:

$database->query('SET SESSION query_cache_type = OFF');

Sonra (sunucu "ısınmak" için) bir döngü içinde sorgu 2-3 kez çalıştırın.

Ve ancak o zaman:

$database->query('FLUSH STATUS'); #If you use the stats to profile your query

$t = microtime(TRUE);
$fp = $sub->generateFingerprint();
echo microtime(TRUE)-$t;

$database->query('SHOW STATUS');

Et işte! :)))

BTW, sorgu hızı okumak için parametre biridir. SHOW STATUS ve EXPLAIN ... tarafından döndürülen çok değerli bilgileri okumak için öğrenin. Bu çok daha iyi olacaktır.

Here is a link you will love: http://www.xaprb.com/blog/2006/10/12/how-to-profile-a-query-in-mysql/

Keyfini çıkarın. :)

Eğer sınıfında ısrarlı bağlantılarını kullanıyor olabilirsiniz. Bir pconnect bağlantıyı yeniden ve gecikme bu tip hesap olacaktır.