Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10

Как тестировать решения правильно(чтобы один и тот же запрос выполнялся за одно и то же время)

02.02.2024, 12:05. Показов 2112. Ответов 21
Метки test (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!

Есть проблема на работе: БД находится на сервере. С ней работают другие программисты(напрямую запросами) и простые пользователи(через приложение для получения данных). Я часто тестирую различные варианты запросов и огромная проблема состоит в том, что один и тот же запрос может выполняться за сильно разное время (например от 1 до 7ми секунд или от 11 до 25). Разумеется, принять правильное решение о преимуществах или недостатках тестируемого метода просто невозможно — фактор ложноположительных и ложноотрицательных результатов не даёт.

Вопрос: как проводить тесты "вчистую"?
Что для этого нужно сделать? Какие шаги нужно для этого предпринять?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2024, 12:05
Ответы с готовыми решениями:

Как сделать так, чтобы 2 программы могли читать один и тот же файл в одно время
Как сделать так, чтобы 2 программы могли читать один и тот-же файл в одно время. Заренее спасибо

Как правильно использовать класс на VBA, чтобы не повторять один и тот же код?
Люди добры подскажите правильно использовать класс на VBA что бы не повторять один и тот же код. зарание большое спасибо.

Один и тот же запрос работает как не один и тот же запрос
Вот запрос первый SELECT id_sclad, id_nomenklatura , sum(netto) AS ves FROM main WHERE enable = 1 AND id_moving = 2 AND id_sclad = 6...

21
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
02.02.2024, 12:59
Цитата Сообщение от Jack Famous Посмотреть сообщение
С ней работают другие программисты(напрямую запросами) и простые пользователи(через приложение для получения данных).
т.е. программисты работают на "живой" базе параллельно с пользователями? Смелые Вы люди, нифига не боитесь: одно неловкое движение - и база умерла, поднимать ее потом из бэкапа (если он есть, конечно) - та еще веселуха...
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
02.02.2024, 13:04  [ТС]
D1973, не всё так плохо) Работаю на копии рабочей базы, но всё-равно, на том же сервере.
0
670 / 293 / 120
Регистрация: 12.04.2022
Сообщений: 1,002
02.02.2024, 13:34
Цитата Сообщение от Jack Famous Посмотреть сообщение
один и тот же запрос может выполняться за сильно разное время
Надеюсь читали (рассмотрены почти все варианты):

Медленно в приложении, быстро в SSMS (часть 1) и далее часть 2, часть 3.
1
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
02.02.2024, 14:26  [ТС]
Цитата Сообщение от PaulWist Посмотреть сообщение
Надеюсь читали (рассмотрены почти все варианты):
там много. Я прочту, но позже.
Подскажите, если не сложно, как это относится к моей проблеме.
Тестирую запросы в одном и том же окне(query) SSMS с разницей в секунды. Время выдаётся иногда одинаковое, а иногда сильно разное. Я подозреваю, что это исключительно нагрузка на сервер карты путает и хочу от этого уйти.
Время запросов меняется даже у относительно простых, планы запросов не меняются.
0
1306 / 360 / 98
Регистрация: 14.10.2022
Сообщений: 1,103
02.02.2024, 14:42
Цитата Сообщение от Jack Famous Посмотреть сообщение
Я часто тестирую различные варианты запросов и огромная проблема состоит в том, что один и тот же запрос может выполняться за сильно разное время (например от 1 до 7ми секунд или от 11 до 25).
Чаще всего так случается по двум причинам:
1. Локи.
Если вы тестируетесь на отдельной базе, а работа ведется на базе с большим количеством параллельных подключений, чаще всего это связано с тем, что ваш запрос простаивает в ожидания снятия лока параллельного процесса.
Нужно очень пристально следить за индексами и статистиками.
2. Использование tempdb при работе запроса, для сохранения промежуточных результатов.
Тут может быть как вариант коряво написанного запроса, для которого энжин не смог правильно оценить кардинальность, не смог правильно построить план, и не смог правильно выделить память на исполнение, и, соответственно, в процессе выполнения вынужден вывалить промежуточные данные на диск, так и тот вариант, когда ваши данные в принципе в память и не поместятся, и в любом случае нужно будет использовать tempdb, или, к примеру, поднимать данные с диска.
Внешне, если использовать инструментарий по анализу того "че там собственно творится внутри" - это будет выглядеть одинаково.
Запрос хаотически тормозит. То за доли секунды выполняется, то минутами висит.

PaulWist, думаю, ТС не об этом.
В "Медленно в приложении, быстро в SSMS", большей частью про другое. Один и тот же запрос работает по-разному, в зависимости от каких-то настроек. В одном случае - стабильно быстро, в другом - стабильно медленно.
1
670 / 293 / 120
Регистрация: 12.04.2022
Сообщений: 1,002
02.02.2024, 14:45
Цитата Сообщение от Jack Famous Посмотреть сообщение
как это относится к моей проблеме.
Например, (классика жанра) - запуск запроса с разными параметрами/значениями.

Есть табличка T имеющая 10 записей в индесированном поле F, из них 9 записей = "А" и одна запись = "Б", запрос

T-SQL
1
select * from A where F = "А"
Сервер видит, что таких записей 9 шт, и выбирает сканирование таблички.

Теперь

T-SQL
1
select * from A where F = "Б"
Сервер видит, что таких записей 1 шт, и выбирает поиск по индексу.

Если планы не меняются, то посмотрите на количество возвращаемых результатов, может там 1.5Г возвращается.

А вообще uaggster направление поиска дал, но тут пальцем в небо
0
139 / 105 / 36
Регистрация: 27.07.2022
Сообщений: 359
02.02.2024, 15:40
Цитата Сообщение от PaulWist Посмотреть сообщение
Если планы не меняются, то посмотрите на количество возвращаемых результатов, может там 1.5Г возвращается.
Такую штуку удобно с set statistics io on смотреть. Да и в целом оно удобнее, чем просто время засекать. Выдает стабильный результат для сравнения вне зависимости от прогретости кэша и локов
1
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
02.02.2024, 15:58  [ТС]
uaggster, данные не свопятся, используются #таблицы и CTE.
Я думаю, что нужно на локали тестить, а не на сервере. Что думаете?

Цитата Сообщение от PaulWist Посмотреть сообщение
Если планы не меняются, то посмотрите на количество возвращаемых результатов, может там 1.5Г возвращается.
время отсекается по вставке во временную таблицу, потому что Select размывает время теста во времени вывода данных с сервера. Запрос один и тот же. Пул данных, соответственно, тоже одинаковый: 1,5 млн записей.

Цитата Сообщение от katamoto Посмотреть сообщение
Выдает стабильный результат для сравнения вне зависимости от прогретости кэша и локов
вы IO с Time перепутали, наверное. В Time не учитывается время простоя?
0
139 / 105 / 36
Регистрация: 27.07.2022
Сообщений: 359
02.02.2024, 16:26
Цитата Сообщение от Jack Famous Посмотреть сообщение
вы IO с Time перепутали, наверное. В Time не учитывается время простоя?
Нет, не перепутал. Я про количество логический чтений говорил
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
02.02.2024, 16:29
Лучший ответ Сообщение было отмечено Jack Famous как решение

Решение

Цитата Сообщение от Jack Famous Посмотреть сообщение
Что для этого нужно сделать?
Смотреть CPU time запроса
1
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
02.02.2024, 16:46  [ТС]
Цитата Сообщение от katamoto Посмотреть сообщение
Нет, не перепутал. Я про количество логический чтений говорил
как это связано со временем работы? Вы читали шапку темы?
Ну, то есть, количество чтений связано, конечно, но сможете ли вы сказать по тексту IO 2ух запросов, какой лучше работает? Тест ведь, может быть очень большим, как и запрос …

Цитата Сообщение от invm Посмотреть сообщение
Смотреть CPU time запроса
прошу продемонстрировать
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
02.02.2024, 17:01
Цитата Сообщение от Jack Famous Посмотреть сообщение
прошу продемонстрировать
Что продемонстрировать?
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
02.02.2024, 17:21  [ТС]
invm, простите — тупанул
Это при Set Statistics Time On выводится.
Спасибо!
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
02.02.2024, 17:35
Jack Famous, плюс исключить вывод результирующих наборов
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
02.02.2024, 17:38  [ТС]
invm, можно подробнее, пожалуйста? Я не в курсе, что это …
И, чтобы, закрепить, я правильно понимаю, что CPU-Time не учитывает время ожидания и прочего мусора?

P.S.: прочёл, что CPU-Time может быть больше фактического из-за того, что складываются времена каждого участвующего ядра (параллелизм). Но для сравнения "при прочих равных" это не важно.
0
139 / 105 / 36
Регистрация: 27.07.2022
Сообщений: 359
02.02.2024, 19:13
Цитата Сообщение от Jack Famous Посмотреть сообщение
как это связано со временем работы? Вы читали шапку темы?
Ну, то есть, количество чтений связано, конечно, но сможете ли вы сказать по тексту IO 2ух запросов, какой лучше работает? Тест ведь, может быть очень большим, как и запрос …
В большинстве случаев - чем меньше логических чтений, тем быстрее. Не всегда, но как правило. Ну, т.е. если развесистый запрос глобально переписать на временные таблицы, и сравнить с тем что было до, то может так выйти, что и наоборот. Но для сравнения большее-менее похожих по структуре вариантов - обычно чем меньше logical io, тем быстрее. И они не особо зависят от текущей нагрузки на сервер
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
02.02.2024, 21:37
Цитата Сообщение от Jack Famous Посмотреть сообщение
Я не в курсе, что это …
Это про что?
Цитата Сообщение от Jack Famous Посмотреть сообщение
я правильно понимаю, что CPU-Time не учитывает время ожидания и прочего мусора?
Да.
1
14 / 13 / 1
Регистрация: 17.04.2023
Сообщений: 107
04.02.2024, 07:27
Пересмотрите БД в плане используемых индексов, по возможности замените rowstore индексы на columnstore.
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
05.02.2024, 10:07  [ТС]
andrey197888888, какое это имеет отношение к теме тестирования?
Вы решили сразу в нескольких темах отметиться?

Добавлено через 6 минут
Цитата Сообщение от invm Посмотреть сообщение
Это про что?
Про наборы.
Цитата Сообщение от invm Посмотреть сообщение
плюс исключить вывод результирующих наборов
Цитата Сообщение от Jack Famous Посмотреть сообщение
invm, можно подробнее, пожалуйста? Я не в курсе, что это …
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2024, 10:07
Помогаю со студенческими работами здесь

Один и тот же запрос, работает разное время
Подскажите, есть запрос, он довольно сложный и в нем много left inner. Но на основном сервере запрос выполняется за 5сек. На другой сервер,...

Как добиться, чтобы скрипт выполнялся только один раз?
Здравствуйте. Есть у меня страница, котороая принимает несколько данных методом POST с другой страницы после отправки от туда данных из...

Как изменить таблицу чтобы запрос выполнялся быстрее
Доброго времени суток, Обращаюсь к вам за советом в таком вопросе: Єсть SQL запрос, которий я не могу изменять, так как он...

Как сделать чтобы цикл while выполнялся один раз и выводил примерно такой текст из формы?
как сделать чтобы цикл while выполнялся один раз и выводил примерно такой текст из формы тест: 1111 тест: 2222 тест: 3333 тест:...

Как сделать чтобы код выполнялся 1 минуту(или любое другое время) ,а потом остановился
Я столкнулся с проблемой когда мне нужно чтобы код работал какой-то количество времени а потом останавливался. Пробовал через time.sleep()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru