KCacheGrind yorumlanması karışıklık

2 Cevap php

Ben sol panelde KCacheGrind gösterilen değerleri anlamaya çalışıyorum

Ben Incl var. (Ki ben kılavuzda okunan dahil olduğu), Benlik, bir Fonksiyonu olarak adlandırılan

Şimdi bu cachegrind dosyayı analiz ediyorum ve ben

Incl. ---- Self ---- Called ---- Function

100.05 ---- 0.04 ---- (0) ---- {main}

83.38 ---- 0.07 ---- 250 --- item->close

78.85 ---- 78.85 ---- 10 067 ---- php::mysql_query

ve liste devam ediyor ..

Ama burada benim sorunum.

Ben madde-> yakın benim darboğaz olduğunu düşünüyorum ama ne ben anlamıyorum bu Inclusive 83,38 ve daha sonra Öz 0,07 vardır ve mysql_query komutu hem de aynı sahiptir nasıl.

'Self' burada ne anlama geliyor?

Ayrıca nasıl bu yüzdeler birbirine ilgisi var? Ben madde-> yakın 83% alır nasıl alamadım ve mysql_query% 78 alır

Teşekkürler

2 Cevap

"Öz" değil, o çağıran herhangi fonksiyonlardan, bu fonksiyonu tarafından alınan zaman anlamına gelir. "Öz" düşük ve ise "dahil." , daha sonra optimize etmek için en iyi yer (örn. işlevler denir) çocuklardan biri muhtemelen yüksek. Mysql sorgu çoğu zaman alır, bu nedenle muhtemelen (Mümkünse) sorgu optimize etmek istediğimiz gibi, bu durumda görünüyor. mysql_qeury "benlik" == sahip olmasının nedeni "dahil." profiler o (mysql istemci kütüphanesi örn.) php-zamanının dışında çalışmalarını yapıyor beri, işlevi göremiyorum ki

Ben 10067 aramalar mysql_query kudretli şüpheli gözüküyor ekleyebilirsiniz. Bir veritabanı sorgusu çok pahalı bir işlemdir. Eğer bir şekilde sorgu sayısını azaltmak değil emin misin?

Edit:

Ben deneyebilirsiniz. Ama ne Incl hakkında.? Nasıl nasıl% 100 olmalıdır toplam yüzdesi bağdaştırılabilir mysql sorguda kapatın ve 70 de 80

Numaralar eklemek gerekmez. Size aradığınızı, bu işlevler alması, bütünün zaman sıralı bir liste. (Genellikle bir şekilde taklit eder ne olacak olsa) Bir çağrı grafik değil.

Aşağıdaki kodu varsayalım:

function fn1() {
  sleep(1);
  fn2();
}
function fn2() {
  sleep(98);
}
function fn3() {
  sleep(1);
}
fn1();
fn3();

Hangi aşağıdaki çıktıyı üretebilir:

name | incl. | self
main | 100%  | 0%
fn1  | 99%   | 1%
fn2  | 98%   | 98%
fn3  | 1%    | 1%

Eğer "dahil." Listeyi sıralamak zaman, yavaş fonksiyonları bakıyoruz in aggregate. Diğer bir deyişle, yüksek puan burada olanlar, mutlaka yavaş değil, ancak diğer işlevleri çağırır. Yüksek bir fonksiyon skorları ise "dahil." and birçok aramaları vardır, bu işleve aramaların sayısını azaltmak, ya da fonksiyon önbellek onun sonucu (daha çok bir eylem daha sorgu ise sadece çalışır) izin çalışırken içine bakıyor olmalıdır.

Eğer "benlik" göre sıralamak zaman, çoğu zaman sürebilir gerçek aramaları göreceksiniz. Bunlar üzerinde ince ayar isterdim işlevleri vardır. Çoğu PHP, sen mysql_query Bu alanda hakim olduğunu göreceksiniz. Birçok çağrı varsa, onları yeniden veya önbellek azaltmaya çalışın. Eğer birkaç çağrı varsa, o zaman muhtemelen sql-sorgu optimize etmek gerekir. PHP-hata, bu size yardımcı olamaz. Bunun yerine, gerçek sorgu bulmak ve mysql-konsolunda üzerinde bir explain çalıştırın. Bu kendi içinde bir bütün bölüm bulunuyor.

Kendini çağıran tüm işlevleri hariç işlevi harcanan zaman anlamına gelir.

Örneğin:

function foo()
{
    bar();
}

function bar
{
    sleep(1);
}

foo();

Bu size vermek istiyorum:

Incl    Self   Func
1       0      foo
1       0      bar
1       1      sleep <- Here's the bottleneck!