Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development
This commit is contained in:
@@ -398,6 +398,32 @@ abstract class Controller extends ControllerCore
|
|||||||
echo '</ul>
|
echo '</ul>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
|
$array_queries = array();
|
||||||
|
$queries = Db::getInstance()->queries;
|
||||||
|
uasort($queries, 'prestashop_querytime_sort');
|
||||||
|
foreach ($queries as $data)
|
||||||
|
{
|
||||||
|
$query_row = array(
|
||||||
|
'time' => $data['time'],
|
||||||
|
'query' => $data['query'],
|
||||||
|
'location' => $data['file'].':'.$data['line'],
|
||||||
|
'filesort' => false,
|
||||||
|
'rows' => 1,
|
||||||
|
'group_by' => false
|
||||||
|
);
|
||||||
|
if (preg_match('/^\s*select\s+/i', $data['query']))
|
||||||
|
{
|
||||||
|
$explain = Db::getInstance()->executeS('explain '.$data['query']);
|
||||||
|
if (stristr($explain[0]['Extra'], 'filesort'))
|
||||||
|
$query_row['filesort'] = true;
|
||||||
|
foreach ($explain as $row)
|
||||||
|
$query_row['rows'] *= $row['rows'];
|
||||||
|
if (stristr($data['query'], 'group by') && !preg_match('/(avg|count|min|max|group_concat|sum)\s*\(/i', $data['query']))
|
||||||
|
$query_row['group_by'] = true;
|
||||||
|
}
|
||||||
|
$array_queries[] = $query_row;
|
||||||
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<div class="rte" style="text-align:left;padding:8px;clear:both;margin-top:20px">
|
<div class="rte" style="text-align:left;padding:8px;clear:both;margin-top:20px">
|
||||||
<ul>
|
<ul>
|
||||||
@@ -405,25 +431,32 @@ abstract class Controller extends ControllerCore
|
|||||||
<li><a href="#doubles">Go to Doubles</a></li>
|
<li><a href="#doubles">Go to Doubles</a></li>
|
||||||
<li><a href="#tables">Go to Tables</a></li>
|
<li><a href="#tables">Go to Tables</a></li>
|
||||||
'.(isset(ObjectModel::$debug_list) ? '<li><a href="#objectModels">Go to ObjectModels</a></li>' : '').'
|
'.(isset(ObjectModel::$debug_list) ? '<li><a href="#objectModels">Go to ObjectModels</a></li>' : '').'
|
||||||
|
<li><a onclick="$(\'#queries_table\').toggle();" style="cursor:pointer">Display queries table</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="queries_table" style="display:none;margin:4px">
|
||||||
|
<table class="table std">
|
||||||
|
<tr><th>Time (ms)</th><th>Rows</th><th>Query</th><th>Location</th><th>Filesort</th><th>Group By</th></tr>';
|
||||||
|
foreach ($array_queries as $data)
|
||||||
|
{
|
||||||
|
$data['location'] = str_replace('\\', '/', substr($data['location'], strlen(_PS_ROOT_DIR_)));
|
||||||
|
$data['query'] = str_replace('SQL_NO_CACHE ', '', $data['query']);
|
||||||
|
echo '<tr><td>'.round(1000 * $data['time'], 3).'</td><td>'.$data['rows'].'</td><td>'.$data['query'].'</td><td>'.$data['location'].'</td><td>'.($data['filesort'] ? 'Yes' : '').'</td><td>'.($data['group_by'] ? 'Yes' : '').'</td></tr>';
|
||||||
|
}
|
||||||
|
echo '
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
<div class="rte" style="text-align:left;padding:8px">
|
<div class="rte" style="text-align:left;padding:8px">
|
||||||
<h3><a name="stopwatch">Stopwatch (with SQL_NO_CACHE) (total = '.count(Db::getInstance()->queries).')</a></h3>';
|
<h3><a name="stopwatch">Stopwatch (with SQL_NO_CACHE) (total = '.count(Db::getInstance()->queries).')</a></h3>';
|
||||||
$queries = Db::getInstance()->queries;
|
foreach ($array_queries as $data)
|
||||||
uasort($queries, 'prestashop_querytime_sort');
|
|
||||||
foreach ($queries as $data)
|
|
||||||
{
|
{
|
||||||
echo $hr.'<b '.$this->getTimeColor($data['time'] * 1000).'>'.round($data['time'] * 1000, 3).' ms</b> '.htmlspecialchars($data['query'], ENT_NOQUOTES, 'utf-8', false).'<br />in '.$data['file'].':'.$data['line'].'<br />';
|
echo $hr.'<b '.$this->getTimeColor($data['time'] * 1000).'>'.round($data['time'] * 1000, 3).' ms</b> '.htmlspecialchars($data['query'], ENT_NOQUOTES, 'utf-8', false).'<br />in '.$data['location'].'<br />';
|
||||||
if (preg_match('/^\s*select\s+/i', $data['query']))
|
if (preg_match('/^\s*select\s+/i', $data['query']))
|
||||||
{
|
{
|
||||||
$explain = Db::getInstance()->executeS('explain '.$data['query']);
|
if ($data['filesort'])
|
||||||
if (stristr($explain[0]['Extra'], 'filesort'))
|
|
||||||
echo '<b '.$this->getTimeColor($data['time'] * 1000).'>USING FILESORT</b> - ';
|
echo '<b '.$this->getTimeColor($data['time'] * 1000).'>USING FILESORT</b> - ';
|
||||||
$browsed_rows = 1;
|
echo $this->displayRowsBrowsed($data['rows']);
|
||||||
foreach ($explain as $row)
|
if ($data['group_by'])
|
||||||
$browsed_rows *= $row['rows'];
|
|
||||||
echo $this->displayRowsBrowsed($browsed_rows);
|
|
||||||
if (stristr($data['query'], 'group by') && !preg_match('/(avg|count|min|max|group_concat|sum)\s*\(/i', $data['query']))
|
|
||||||
echo '<br /><b>Useless GROUP BY need to be removed</b>';
|
echo '<br /><b>Useless GROUP BY need to be removed</b>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user