Sayfada yürütülen MySQL sorguları sayısını

6 Cevap php

nasıl bir sayfa yük üzerinde yürütülen sql sorgu sayısı saymak olacaktır?

Ben elde edilecek sayfa için alınan zaman benzer bir komut dosyası var, ama idam edilmiştir kaç sorguları için.

Sen böyle SMF forumlarında gibi, demek istediğimi biliyorum, altbilgi, bunlar var:

Page 7 sorgu ile 0.136 saniyede oluşturuldu.

altbilgi?

Ben ihtiyacı olabilir eğer bunu yaparken bir gün geçirmiş olabilir ancak mysql_query (ler) tüm değiştirme, değiştirmek için yol çok mysql_queries var, gerçekten bir seçenek değildir.

Teşekkürler

6 Cevap

SMF kendi özel sorgu işlevi alarak, sorgu sayma yapar:

function db_query($db_string, $file, $line)
{
    global $db_cache, $db_count, $db_connection, $db_show_debug, $modSettings;

    // One more query....
    $db_count = !isset($db_count) ? 1 : $db_count + 1;

    ...

Yapmanız çalıştığınız şeyi elde etmek için basit yolu aynı yapmak olacaktır; mysql_query için bir sarıcı yapmak yerine mysql_query bu kullanın.

Sen arayarak Hiç yürütülen sorguların sayısını alabilirsiniz.

show session status like "Queries";

Başında ve sayfa oluşturma sonunda bu diyoruz, ve sonra orada kaç sorguları görebilirsiniz. Bu komut, kendisi de biri olarak sayılır unutmayın.

Ben aşağıdaki komut bir seans başına sayısı olduğunu düşünüyorum:

SHOW STATUS LIKE 'com_select%'

Sorguların sayısını saymak için, sorguları saymak gerekir. Maalesef gereksiz gelebilir, ama gerçekten bu basittir.

(mysql_query_counted?) Bir sayma fonksiyonu yapmak, sonra da mysql_query( için kod temeli arama grep kullanmak, ve bir ya da iki saat daha fazla almamalıdır. Hatta işlev çağrıları yerine sed veya benzer kullanarak düşünüyorum.

SMF ve benzeri o üzerine bir not Bu yerleşik olarak. Onlar DB soyutlama katmanları kullanmak, bu yüzden zaten kendi query işlevini kullanarak, ve daha sonraki bir tarihte sorgu sayma ekleyerek bu işlev için bir sayaç artan bir satır eklemek kadar basit olurdu. Soyutlama ve kapsülleme için 1 sanırım.

İşte SMF olandan takip etmek kolay olabilir bir örnek.

class QueryLogger
{
    public $queries = array();

    public function query($sql)
    {
    	$start = microtime(true);

    	$query = mysql_query($sql);

    	$queries[] = microtime(true) - $start;

    	return $query;
    }

    public function getCount()
    {
    	return sizeof($this->queries);
    }

    public function getTime()
    {
    	return array_sum($this->queries);
    }
}

$queryLogger = new QueryLogger;
$query1 = $queryLogger->query('...');
$query2 = $queryLogger->query('...');
echo 'Ran '.$queryLogger->getCount().' queries in '.$queryLogger->getTime().' seconds.';

Quassnoi comment sonra ben senaryonun başlangıcında bu koymak:

$res = mysql_query("SHOW SESSION STATUS LIKE 'Questions'");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
define("START_QUERIES",$row['Value']);

ve bu:

$res = mysql_query("SHOW SESSION STATUS LIKE 'Questions'");
$row = mysql_fetch_array($res, MYSQL_ASSOC);
define("STOP_QUERIES",$row['Value']);

Sizinle sorgularının toplam num görebilirsiniz:

echo "No of queries: ".(STOP_QUERIES-START_QUERIES-1);

-1 Kullanmak neden belki de mysql_select_db deyimi (veya ettirmek) sayar, bilmiyorum, ama benim localhost oldukça iyi çalışıyor