Count number of MySQL queries executed on page

后端 未结 7 777
慢半拍i
慢半拍i 2020-12-30 07:05

how would I count the number of sql queries executed on one page load?

I have a similar script to time taken for page to be generated, but not for how many queries h

相关标签:
7条回答
  • 2020-12-30 07:38
    SHOW SESSION STATUS LIKE 'Questions'
    
    0 讨论(0)
  • 2020-12-30 07:39

    You can get the number of queries ever executed by calling.

    show session status like "Queries";
    

    Call this at the beginning and at the end of page creation, and then you can see how many queries there have been. Don't forget that this command itself is also counted as one.

    0 讨论(0)
  • 2020-12-30 07:43

    After Quassnoi comment i put this in the start of script:

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

    and this:

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

    you can see total num of queries with:

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

    I don't know why use -1, maybe it counts mysql_select_db statement (or smth) also, but it works pretty good on my localhost

    0 讨论(0)
  • 2020-12-30 07:44

    Here's an example which might be easier to follow than the SMF one.

    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.';
    
    0 讨论(0)
  • 2020-12-30 07:48

    I think the following command is a per session count:

    SHOW STATUS LIKE 'com_select%'
    
    0 讨论(0)
  • 2020-12-30 07:49

    To count the number of queries, you need to count the number of queries. Sorry to sound redundant, but it really is that simple.

    Make a counting function (mysql_query_counted?), then use grep to search through your codebase for mysql_query(, and it shouldn't take more than an hour or two. Possibly even think about using sed or similar to replace the function calls.

    A note on SMF and similar that have this built-in. They use DB abstraction layers, so they are already using their own query function, and adding query counting at a later date would have been as simple as adding a line incrementing a counter to to that function. +1 for abstraction and encapsulation I suppose.

    0 讨论(0)
提交回复
热议问题