Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как узнать, сколько запросов идет на страницу?
 
 автор: Лена   (03.11.2010 в 00:38)   письмо автору
 
 

Задумалась. На странице есть верхнее меню, нижнее меню, форма авторизации, несколько блоков, содержимое которых формируется динамически.
Содержимое этих блоков, как и меню - результат работы нескольких классов. Каждый из классов делает какие-то запросы к базе. Можно ли как-то определить нагрузку страницы на базу, т.е. посчитать, сколько запросов идет в базу с одной страницы?
Можно ли это сделать, не разгребая каждый блок на классы?

  Ответить  
 
 автор: Trianon   (03.11.2010 в 12:47)   письмо автору
 
   для: Лена   (03.11.2010 в 00:38)
 

Если обращаться к серверу БД через собственную обертку, считающую запросы, то сложного ничего нет.
Обычно это так или иначе приходится делать, поскольку ловить ситуации ошибочных запросов проще единой оберткой.
А уж класс ей (оберткой) будет или функция - не столь важно.

  Ответить  
 
 автор: clock   (03.11.2010 в 13:19)   письмо автору
 
   для: Лена   (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;
?>


Здесь вы получите не только число запросов, но и время выполнения каждого, а также очень интересные показатели, которые могут определить причины долгого выполнения запросов.
Ну например, использовался ли кеш запросов, создавались ли временные таблицы и т.п.

  Ответить  
 
 автор: neadekvat   (03.11.2010 в 22:11)   письмо автору
 
   для: clock   (03.11.2010 в 13:19)
 

Вряд ли такое можно применить в рабочей версии :)

  Ответить  
 
 автор: clock   (11.11.2010 в 13:31)   письмо автору
 
   для: neadekvat   (03.11.2010 в 22:11)
 

Почему ?
Вы имеете в виду сам подход ? Или приведенный код ? Если код, то его конечно надо адаптировать под конкретные задачи.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования