Количество запросов и время выполнения функции

При работе над высоко нагруженном проекте каждый запрос на счету. И есть необходимость видеть сколько, запросов выполняет определенный кусок кода или метод обвертки.

Оригинал лежит по адресу /bitrix/modules/main/classes/general/main.php

Класс оригинал CDebugInfo, я его чуть упростил, и выложу как есть, редактируйте под себя как вам нужно.

<?php
class RemDebug
{
private  $inc_time;
private    $cnt_query;
private    $query_time;
private  $arQueryDebugSave;

/**
* Начинаем считать запросы
*
*/
public function Start()
{
global $DB;

$this->inc_time = getmicrotime();
if($DB->ShowSqlStat)
{
$this->cnt_query = $DB->cntQuery;
$this->query_time = $DB->timeQuery;
$this->arQueryDebugSave = $DB->arQueryDebug;
$DB->arQueryDebug = array();
}
}

/**
* Заканчиваем считать запросы и выводим результат
*
* @param {bool} $bTrac - выводить трасировку
* @return {array}
*/
public function Output($bTrac = false)
{
global $DB, $APPLICATION, $USER;

if ($USER->IsAdmin())
{
$this->inc_time = round(getmicrotime()-$this->inc_time, 4);

if(($DB->cntQuery - $this->cnt_query)>0)
{
return array(
"PATH"        => $_SERVER["SCRIPT_NAME"],
"QUERY_COUNT" => $DB->cntQuery - $this->cnt_query,
"QUERY_TIME"  => round($DB->timeQuery - $this->query_time, 4),
"ALL_TIME"    => $this->inc_time,
"TRAC"        => ($bTrac == true) ? $DB->arQueryDebug : '',
);
}
}
}
}
$REM_DEBUG = new RemDebug();
?>

Использование:

<?
$REM_DEBUG->Start();

$rsUser = CUser::GetByID(23);

echo "<pre>", print_r($REM_DEBUG->Output())."</pre>";
?>

Результат примерно такой

[PATH] => /dir/index.php
[QUERY_COUNT] => 4
[QUERY_TIME] => 0.0015
[ALL_TIME] => 0.0048
[TRAC] =>

Если добавить параметр в метод $REM_DEBUG->Output(true) то в ключе [TRAC] => массива будет выводится трасировка.