При работе над высоко нагруженном проекте каждый запрос на счету. И есть необходимость видеть сколько, запросов выполняет определенный кусок кода или метод обвертки.
Оригинал лежит по адресу /bitrix/modules/main/classes/general/main.php
Класс оригинал CDebugInfo, я его чуть упростил, и выложу как есть, редактируйте под себя как вам нужно.
[source language=’php’]
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();
?>
[/source]
Использование:
[source language=’php’]
$REM_DEBUG->Start();
$rsUser = CUser::GetByID(23);
echo «
", print_r($REM_DEBUG->Output())."
«;
?>
[/source]
Результат примерно такой
[PATH] => /dir/index.php
[QUERY_COUNT] => 4
[QUERY_TIME] => 0.0015
[ALL_TIME] => 0.0048
[TRAC] =>
Если добавить параметр в метод $REM_DEBUG->Output(true) то в ключе [TRAC] => массива будет выводится трасировка.