Your IP : 3.137.148.37
<?php
/*
if(!defined('LOG_FILENAME')) define('LOG_FILENAME', $_SERVER["DOCUMENT_ROOT"]."/debug.trc");
if(CModule::IncludeModule('perfmon')) AddMessage2Log(CPerfomanceSQL::_console_explain($strSql));
*/
class CPerfomanceSQL extends CAllPerfomanceSQL
{
public static function _console_explain($strSQL)
{
global $DB;
$rs = $DB->Query('explain ' . $strSQL);
$arResult = [];
while ($ar = $rs->Fetch())
{
$arResult[] = $ar;
}
$arColumnW = [];
$arColumns = ['id', 'select_type', 'table', 'type', 'possible_keys', 'key_len', 'ref', 'rows', 'Extra'];
foreach ($arColumns as $name)
{
$arColumnW[$name] = mb_strlen($name);
}
foreach ($arResult as $i => $ar)
{
foreach ($arColumns as $name)
{
if ($name === 'possible_keys')
{
$l = 0;
$arResult[$i][$name] = explode(',', $ar[$name]);
foreach ($arResult[$i][$name] as $j => $key)
{
if ($arResult[$i]['key'] === $key && $key !== '')
{
$arResult[$i][$name][$j] = '*' . $arResult[$i][$name][$j];
}
else
{
$arResult[$i][$name][$j] = ' ' . $arResult[$i][$name][$j];
}
}
foreach ($arResult[$i][$name] as $key)
{
if (mb_strlen($key) > $l)
{
$l = mb_strlen($key);
}
}
if ($arColumnW[$name] < $l)
{
$arColumnW[$name] = $l;
}
}
elseif ($name === 'Extra')
{
$l = 0;
$arResult[$i][$name] = array_map('trim', explode(';', $ar[$name]));
foreach ($arResult[$i][$name] as $key)
{
if (mb_strlen($key) > $l)
{
$l = mb_strlen($key);
}
}
if ($arColumnW[$name] < $l)
{
$arColumnW[$name] = $l;
}
}
elseif ($arColumnW[$name] < mb_strlen($ar[$name]))
{
$arColumnW[$name] = mb_strlen($ar[$name]);
}
}
}
$arTable = [];
$arTable['headers'] = [];
foreach ($arColumns as $name)
{
$arTable['headers'][] = str_pad($name, $arColumnW[$name], ' ', STR_PAD_RIGHT);
}
$arTable['delim'] = [];
foreach ($arColumns as $name)
{
$arTable['delim'][] = str_repeat('-', $arColumnW[$name]);
}
$i = 0;
$j = 0;
while ($i < count($arResult))
{
$arTable[$j] = [];
$bNext = true;
foreach ($arColumns as $name)
{
if ($name === 'key_len' || $name === 'rows')
{
$pad = STR_PAD_LEFT;
}
else
{
$pad = STR_PAD_RIGHT;
}
if (is_array($arResult[$i][$name]))
{
if (count($arResult[$i][$name]) > 1)
{
$arTable[$j][] = str_pad(array_shift($arResult[$i][$name]), $arColumnW[$name], ' ', $pad);
$bNext = false;
}
else
{
$arTable[$j][] = str_pad(array_shift($arResult[$i][$name]), $arColumnW[$name], ' ', $pad);
$arResult[$i][$name] = '';
}
}
else
{
$arTable[$j][] = str_pad($arResult[$i][$name], $arColumnW[$name], ' ', $pad);
$arResult[$i][$name] = '';
}
}
if ($bNext)
{
$i++;
}
$j++;
}
$result = $strSQL . "\n";
foreach ($arTable as $row)
{
$result .= implode('|', $row) . "\n";
}
$result .= implode('-', $arTable['delim']) . "\n\n";
return $result;
}
public static function Clear()
{
global $DB;
$res = $DB->Query('TRUNCATE TABLE b_perf_sql_backtrace');
if ($res)
{
$res = $DB->Query('TRUNCATE TABLE b_perf_index_suggest_sql');
}
if ($res)
{
$res = $DB->Query('TRUNCATE TABLE b_perf_sql');
}
return $res;
}
}