Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
IronKancler Member Откуда: Сообщений: 19 |
Привет. Подскажите пожалуйста.. сколько по времени должна производится выборка из таблицы "SELECT TOP 200 * FROM dbo.order" ? Конфигурация сервера хорошая.. SSD, 6 ядер. Включено TDE. В таблице около 50-ти различных столбцов. Время вывода данных (на терминале в managment studio) от 200 мс до 800 - мне кажутся эти цифры очень большими, что минимальной значение что максимальное. Время вывода проверяю не 'клиентской статистикой', а так: DECLARE @d1 datetime = GETDATE() SELECT TOP 200 * FROM dbo.order DECLARE @d2 datetime = GETDATE() SELECT DATEDIFF(MILLISECOND, @d1, @d2) |
13 апр 19, 12:43 [21861113] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
А за какое время землекопы выкапывают яму? |
13 апр 19, 12:58 [21861119] Ответить | Цитировать Сообщить модератору |
IronKancler Member Откуда: Сообщений: 19 |
Гавриленко Сергей Алексеевич, Хотелось бы за 50 мс |
13 апр 19, 16:18 [21861183] Ответить | Цитировать Сообщить модератору |
IronKancler Member Откуда: Сообщений: 19 |
Гавриленко Сергей Алексеевич, Просто я не знаю, есть ли возможность ускорить выборку или это время нормальное... Задержка в почти в секунду заметная так-то для пользователя, тк накладываются и еще задержки |
13 апр 19, 16:21 [21861186] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31784 |
Но от выполнения запроса, до видимой пользователю реакции клиентского приложения, много чего происходит. Например, миллисекунды в вашем коде покажут ещё и чтение строк клиентом. Ещё нужно смотреть задержки сети, блокировки. |
||
14 апр 19, 00:54 [21861405] Ответить | Цитировать Сообщить модератору |
dklim.kzn Member Откуда: Казань Сообщений: 123 |
без order by разве что обои на стену печатать данные выдавать? по топ можно получить что угодно независимо от наличия индексов и последовательности вставки если индексы всё же есть, то лучше указать порядок сортировки в запросе (или в подзапросе, если это оно для чего-то большего) если их нет или неподходящие - то with (index=0) и/или (forcescan) попробовать мало ли чего там серверу в голову взбредет и по каким страницам начнет лазить я б вообще на месте разработчиков задержку делал при отсутствии order by чтоб неповадно было) может и сделали))) |
14 апр 19, 11:16 [21861500] Ответить | Цитировать Сообщить модератору |
IronKancler Member Откуда: Сообщений: 19 |
dklim.kzn, Order by нет, это пример запроса а не реальный запрос. В том и дело что сам вывод информации на сервере в managment studio выдаёт такое время. В клиентской статистике же показывает время в районе 20-100 мс. т.е. сам запрос без вывода работает нормально, а вот вывод почему то медленный. Возможно это норма, но мне нужен хороший отклик, тк реальный запрос передается сразу по Web socket клиенту. Реальный запрос тоже в клиентской статистике быстрый, а вывод медленный. |
14 апр 19, 13:12 [21861532] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
И при чем здесь сервер тогда? Оптимизируйте ваше клиентское приложение, чтобы быстрее работало. |
14 апр 19, 17:05 [21861634] Ответить | Цитировать Сообщить модератору |
IronKancler Member Откуда: Сообщений: 19 |
Гавриленко Сергей Алексеевич, Передача(вывод) в самой managment studio не сильно шустрый. Я провожу аналогию между выводом информации в menagment studio и получением данных от сервера в клиентском приложении. т. е. у меня клиентской приложение получает данные от сервера в среднем за 600 мс скажем и menagment studio (установленая на сервере) тоже за примерно такое же время. Клиентская статистика показывает не плохой результат да.. но конечное время для пользователя плохое. Если я не могу получить требуемое время в menagment studio, то я думаю оптимизировать приложение клиентской нет смысла. Я ошибаюсь? |
14 апр 19, 17:32 [21861648] Ответить | Цитировать Сообщить модератору |
Злой Бобр Member Откуда: Украина, Кривой Рог Сообщений: 3562 |
IronKancler, Хватит воду каламутить. Тут телепатов нет. Поэтому или выкладывайте реальный запрос, структуру таблицы, замер производительности, ... Запрос в несколько строк может повесить абсолютно любой сервер. Плюс непонимание того как именно отрабатывает запрос на сервере, приводит к таким перлам что слов нет (от кривых блокировок до ...). В общем дьявол кроется в деталях. |
14 апр 19, 19:55 [21861692] Ответить | Цитировать Сообщить модератору |
IronKancler Member Откуда: Сообщений: 19 |
Злой Бобр, Да причём тут телепаты. Попробуйте вывести 200 строк с 20-50 столбцами, увидите что время запроса большое |
14 апр 19, 20:02 [21861695] Ответить | Цитировать Сообщить модератору |
IronKancler Member Откуда: Сообщений: 19 |
Гавриленко Сергей Алексеевич, Вы правы, надо оптимизировать выборку. Нет смысла тягать всегда все строки.. Можно делать частые запросы на последнии добавленные записи и полную выборку там где не нужна оперативность, и изменять кэш. Спасибо за наводку, не сразу понял ошибку свою |
14 апр 19, 20:05 [21861696] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31784 |
DECLARE @d1 datetime = GETDATE() select top 200 * from syscolumns SELECT DATEDIFF(MILLISECOND, @d1, GETDATE())720мс |
||
14 апр 19, 20:38 [21861715] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31784 |
Набросал прогу на C#, прочитала за 55 мс Тупо цикл по SqlDataReader.Read() Так что, IronKancler, есть резервы, есть :-) |
||
14 апр 19, 20:58 [21861725] Ответить | Цитировать Сообщить модератору |
IronKancler Member Откуда: Сообщений: 19 |
alexeyvg, Значит у меня и на уровне кода задержки, сереализация видимо... :( Спасибо, проверю |
14 апр 19, 21:03 [21861728] Ответить | Цитировать Сообщить модератору |
dklim.kzn Member Откуда: Казань Сообщений: 123 |
ну выведите одну строчку DECLARE @d1 datetime = GETDATE() select count(*) from (select top 200 * from syscolumns (nolock)) r SELECT DATEDIFF(MILLISECOND, @d1, GETDATE()) ну и вообще (nolock) не помешал бы |
14 апр 19, 21:39 [21861748] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31784 |
Ну это сразу было понятно, что дело в передаче на клиента, и обработке там. Считать несколько страниц из памяти - это очень быстро. |
||
14 апр 19, 21:45 [21861755] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |