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

Форум MySQL

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

 

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

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

тема: Анализ MYSQL запроса
 
 автор: pavluxa09   (25.05.2012 в 11:43)   письмо автору
 
 

Здравствуйте. Как можно на MYSQL проанализировать запрос? т.е скоко он памяти кушает, времени выполняется и т.д.?

  Ответить  
 
 автор: cheops   (25.05.2012 в 14:42)   письмо автору
 
   для: pavluxa09   (25.05.2012 в 11:43)
 

Время высвечивается в консольной утилите mysql. Памяти обычно кушает сколько влезет, но не больше, чем задано, в противном случае запрос отправляется из оперативной памяти на жесткий диск. Фактически единственным исследовательским оператором является EXPLAIN.

  Ответить  
 
 автор: Sfinks   (25.05.2012 в 14:57)   письмо автору
 
   для: cheops   (25.05.2012 в 14:42)
 

А вот скажите, пожалуйста....

На сайте sql-ex.ru есть "Анализ плана выполнения запроса".
Не смогу его описать, посмотрите, пожалуйста сами:
Адрес: http://sql-ex.ru/perfcon.php
Только надо зарегистрироваться, но это быстро.
Он, естественно, работает только с их базой, поэтому для получения анализа, введите такой запрос, например:
SELECT DISTINCT P.maker
FROM product P
JOIN( SELECT maker
      FROM( SELECT DISTINCT maker, type
            FROM product P )T
      GROUP BY maker
      HAVING count(*)=1 )T
ON P.maker = T.maker
WHERE type='Printer'
  OR( type='pc' AND (SELECT count(*) FROM product WHERE maker=P.maker AND type='PC')>=3 )

Вот какими средствами этот анализ сделан???
___________
[UPD] Не забудьде пролистать экран с результатом вправо.... Там еще вагон данных не помещается!

  Ответить  
 
 автор: cheops   (25.05.2012 в 15:06)   письмо автору
 
   для: Sfinks   (25.05.2012 в 14:57)
 

Вряд ли стандартное средство - я бы знал (разве что что-то очень новое)... скорее всего какой-то самопальный патч. Ведь MySQL - это СУБД с открытым кодом и есть немало разных модификаций, в том числе позволяющих вести детальный анализ запросов или исследовать нагрузку отдельных запросов, пользователей. Многие под себя базу курочат с большим успехом (на новые версии потом только сложно переходить, всякие Google-и даже патчи присылали и денег платили, лишь бы их изменения в дистрибутив включили).

  Ответить  
 
 автор: Sfinks   (25.05.2012 в 16:40)   письмо автору
 
   для: cheops   (25.05.2012 в 15:06)
 

Я и не говорю, что стандартное.
И там не только MySQL,
Эта штука понимает My*, MS* и PGSQL.
Просто надеялся что знаете, т.к. штука полезная.... Там конечно выборки сумасшедшие, но иногда удается "стоимость" запроса уменьшить на порядок!

  Ответить  
 
 автор: cheops   (25.05.2012 в 18:01)   письмо автору
 
   для: Sfinks   (25.05.2012 в 16:40)
 

Скорее всего прикрутили какой-то анализатор плана запроса из какой-нибудь свободной СУБД, а может и свой собственный профилировщик.

  Ответить  
 
 автор: Саня   (09.06.2012 в 16:37)   письмо автору
 
   для: cheops   (25.05.2012 в 14:42)
 

> Фактически единственным исследовательским оператором является EXPLAIN.
Очень много полезной для анализа информации выдают команды из группы SHOW. Так же вместе с сервером поставляются несколько утилит для администрирования и анализа. Плюс куча сторонних утилит, например, довольно примечательный пакет maatkit.

  Ответить  
 
 автор: Саня   (09.06.2012 в 15:28)   письмо автору
 
   для: pavluxa09   (25.05.2012 в 11:43)
 

В MySQL 5.0.37 появился замечательный профайлер запросов.

mysql> SET profiling=1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT COUNT(*), `country_code` FROM `numplan_raw` GROUP BY `country_code`;
+----------+--------------+
| COUNT(*) | country_code |
+----------+--------------+
|   168680 |            1 |
|     7384 |            7 |
...
|      154 |          996 |
|       25 |          998 |
+----------+--------------+
218 rows in set (0.90 sec)

mysql> SHOW PROFILE;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000078 |
| checking query cache for query | 0.000051 |
| Opening tables                 | 0.000009 |
| System lock                    | 0.000004 |
| Table lock                     | 0.000030 |
| init                           | 0.000015 |
| optimizing                     | 0.000003 |
| statistics                     | 0.000011 |
| preparing                      | 0.000006 |
| Creating tmp table             | 0.000084 |
| executing                      | 0.000003 |
| Copying to tmp table           | 0.898312 |
| Sorting result                 | 0.000080 |
| Sending data                   | 0.000080 |
| end                            | 0.000002 |
| removing tmp table             | 0.000019 |
| end                            | 0.000002 |
| query end                      | 0.000002 |
| freeing items                  | 0.000167 |
| storing result in query cache  | 0.000004 |
| logging slow query             | 0.000001 |
| cleaning up                    | 0.000002 |
+--------------------------------+----------+
22 rows in set (0.02 sec)

Собственно, из примера видно, что большую часть времени mysql перекладывал данные во временную таблицу.

  Ответить  
 
 автор: Sfinks   (10.06.2012 в 00:49)   письмо автору
 
   для: Саня   (09.06.2012 в 15:28)
 

Это уже интереснее. Спасибо.

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

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