|
|
|
| Задумалась. На странице есть верхнее меню, нижнее меню, форма авторизации, несколько блоков, содержимое которых формируется динамически.
Содержимое этих блоков, как и меню - результат работы нескольких классов. Каждый из классов делает какие-то запросы к базе. Можно ли как-то определить нагрузку страницы на базу, т.е. посчитать, сколько запросов идет в базу с одной страницы?
Можно ли это сделать, не разгребая каждый блок на классы? | |
|
|
|
|
|
|
|
для: Лена
(03.11.2010 в 00:38)
| | Если обращаться к серверу БД через собственную обертку, считающую запросы, то сложного ничего нет.
Обычно это так или иначе приходится делать, поскольку ловить ситуации ошибочных запросов проще единой оберткой.
А уж класс ей (оберткой) будет или функция - не столь важно. | |
|
|
|
|
|
|
|
для: Лена
(03.11.2010 в 00:38)
| | Как и сказал Trianon, желательно иметь класс-обертку.
Ну а я предлагаю попробовать так (независимо от того, есть ли обертка или нет):
Сразу после установления соединения с базой (т.е. до начала ваших запросов) выполняем эти запросы:
<?php
mysql_query("FLUSH STATUS;") or die(mysql_error()) ;
mysql_query("SET profiling=1;") or die(mysql_error());
?>
|
Ну а уже в самом конце, после выполнения всех ваших запросов, сделать разбор sql-запросов в таком стиле:
<?php
$res = mysql_query('SHOW PROFILES;') or die(mysql_error());
$total_sql_time = 0;
while($row = mysql_fetch_row($res)) {
$total_sql_time+=$row[1];
echo '<div style="border:1px dotted black;">';
echo 'Query_ID: '.$row[0].'<br/>';
echo 'Duration: '.$row[1].'<br/>';;
echo 'Query: '.$row[2].'<br/>';
$res_profile = mysql_query('SHOW PROFILE FOR QUERY '.$row[0].';') or die(mysql_error());
echo '<table border="1">';
while($row_profile = mysql_fetch_row($res_profile)) {
echo '<tr><td style="padding:5px;">'.$row_profile[0].'</td>
<td style="padding:5px;">'.$row_profile[1].'</td></tr>
';
}
echo '</table>';
echo '</div>';
}
echo 'Total sql time: '.$total_sql_time;
?>
|
Здесь вы получите не только число запросов, но и время выполнения каждого, а также очень интересные показатели, которые могут определить причины долгого выполнения запросов.
Ну например, использовался ли кеш запросов, создавались ли временные таблицы и т.п. | |
|
|
|
|
|
|
|
для: clock
(03.11.2010 в 13:19)
| | Вряд ли такое можно применить в рабочей версии :) | |
|
|
|
|
|
|
|
для: neadekvat
(03.11.2010 в 22:11)
| | Почему ?
Вы имеете в виду сам подход ? Или приведенный код ? Если код, то его конечно надо адаптировать под конкретные задачи. | |
|
|
|