При работе над высоко нагруженном проекте каждый запрос на счету. И есть необходимость видеть сколько, запросов выполняет определенный кусок кода или метод обвертки.
[spoiler]
Оригинал лежит по адресу /bitrix/modules/main/classes/general/main.php
Класс оригинал CDebugInfo, я его чуть упростил, и выложу как есть, редактируйте под себя как вам нужно.
Использование
Результат примерно такой
[PATH] => /dir/index.php
[QUERY_COUNT] => 4
[QUERY_TIME] => 0.0015
[ALL_TIME] => 0.0048
[TRAC] =>
Если добавить параметр в метод $REM_DEBUG->Output(true) то в ключе [TRAC] => массива будет выводится трасировка.
Может у кого-то есть наработки по этой теме, прошу поделится.
[spoiler]
Оригинал лежит по адресу /bitrix/modules/main/classes/general/main.php
Класс оригинал CDebugInfo, я его чуть упростил, и выложу как есть, редактируйте под себя как вам нужно.
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] => массива будет выводится трасировка.
Может у кого-то есть наработки по этой теме, прошу поделится.