Как определить, сколько времени будет выполняться запрос к БД?

Любимый вопрос начальства — «а сколько это будет считаться?». База большая, запросы сложные и все время разные (в смысле вообще разные, а не с разными аргументами). Как можно определить будущее время выполнения запросов в этом случае?
  • Вопрос задан
  • 9143 просмотра
Пригласить эксперта
Ответы на вопрос 10
papersaltserver
@papersaltserver
Выполнить запрос на ограниченном числе записей, а потом экстраполировать на имеющееся число записей?
Ответ написан
@s0rr0w
Я бы посоветовал разобраться, почему начальство до сих пор задает эти вопросы.
У меня есть несколько версий.

Начальство понятия не имеет, как идет процесс разработки, но им хочется показывать свою важность. Так как это риторический вопрос, на который вы всегда затрудняетесь ответить, этим они и самоутверждаются, стараясь понизить вашу оценку как работника. Выделим три основные проблемы
1. Начальство не владеет достаточным количеством информации для принятия решения.
Нужно рассказывать более подробно, почему вы не можете ответить на поставленный вопрос. Так как статистика о времени выполнения запросов не собирается, нужно предложить потратить немного времени на реогранизацию кода и начать собирать данные. Через время вы сможете ответить почти на любые из поставленных вопросов. Этот простой ход покажет вашу способность решать якобы неразрешимые проблемы и удовлетворит информационный голод начальства.
2. Начальство пытается самоутвердиться за ваш счет. Не обращайте на это внимание. Будьте выше этого.
3. Начальство пытается вас унизить и это реальный повод для беспокойства. Сделайте ход конем как описано в пункте 1, это уберет один из основных козырей давления — вашу несостоятельность ответить на вопрос. Если ваше предложение не будет принято, то это даст вам хороший ответ на вопрос: «Вы же не захотели собирать статистику, теперь какие ко мне вопросы?»

Еще одна из версий: начальство пытается понять, что не так в разработке, что нужно исправить, чтобы стало лучше. Или же пытается понять, как монетизировать конкурентные преимущества.

Истинные намерения легко определить спросив, почему вам задают такой вопрос. Не стесняйтесь, наступайте.
Ответ написан
Комментировать
В общем случае никак.
Ответ написан
Комментировать
@Zamorozka
Я бы просто провел практические тесты, если после них оказалось время не допустимо большим, то можно разбить запрос на под запросы, после этого выполнять каждый под запрос отдельно и смотреть время, тем самым найти слабое место.
Ответ написан
Комментировать
try4tune
@try4tune
В MySQL такого нет. Проще оценить самому исходя из опыта и объема данных. Можно посмотреть вывод EXPLAIN на счет оптимизации.
Ответ написан
Комментировать
alexxxst
@alexxxst
Ага, посчитайте время. А толку?
А когда таких запросов одновременно будет выполняться 10-20, а 100?
Я тоже как-то считал, 2-3 запроса — все летает, выпустили в продакшн — там 30-50 параллельно — все стало колом. Пока оперативы не добавили в сервер и БД не потюнили…
Ответ написан
Комментировать
Запомнить время до, после и показать разницу? или необходимо подсчитать не запуская процесс?
Ответ написан
Smileek
@Smileek
declare @startTime datetime;
set @startTime = getutcdate();
-- Ваши запросы.
select datediff(ms, @startTime, getutcdate()); --ответ в миллисекундах


Или проблема в чем-то другом? Запросы еще не написаны?
Ответ написан
ncix
@ncix
Предприниматель
А в MySQL нельзя увидеть план запроса? По плану можно примерно понять какой характер зависимости времени выполнения от кол-ва записей
Ответ написан
Комментировать
@shtopor
Пришлите пожалуйста кто-нибудь инвайт, уж больно сильно хочется посмотреть на сию чуду-юду.
Благодарен за ранее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы