|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Добрый день. Есть проблема со скоростью работы запроса через linked server между несколькими ms sql серверами. Например сервер А - источник данных, сервер Б - откуда тянут, запускают запрос через linked server. На сервере А запрос выполняется за 2 минуты, на Б если открыть в ssms подключение к А и выполнить, то примерно 3 минуты. А вот если на Б выполнять через имеющийся linked server, то уже 30+ минут. Запроса вида: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Интересуют варианты уменьшения этой разницы во времени выполнения. При поиске в интернете людей со схожими проблемами видел, а вот с решением как-то хуже. Из статьи на Хабре https://habr.com/ru/post/302958 пробовал варианты с выдачей дополнительных прав у\з, через openquery и exec at - улучшения не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 11:31 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, неплохо-бы драйвер (и его настройки), версия (sql), может там архаичность какая-нибудь с известными (и уже решенными в современных) багами. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 11:54 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
vikkiv, Версия MS SQL Server 2017 (14.0.3335.7) на обоих. Поставщик SQL Server Native Client 11.0 Параметры с rpc и два с сортировками пробовал менять без каких-то изменений, вернул к начальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 12:20 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, смотрите, что происходит на удаленном сервере, это может быть не таблица. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 13:14 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Владислав Колосов, Это таблица, чуть больше миллиона строк. Проблема не только с этим запросом, просто у него простая структура и на его примере удобно смотреть. На удаленном сервере выполняется запрос, с добавлением этих tbl и col, но план выполнения совпадает с планом запроса напрямую. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 13:40 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, на сервере Б проблемы с tempdb (сортировка)? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 13:44 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Для начала гляньте план запроса с использованием [linked-server]. Например, при выполнении на сервере A, отдельная операция сортировки может не требоваться, а при запросе через [linked-server] она появляется. Ну если запрос чуть сложнее, чем вы показали (есть что-нибудь из top, where, join и т.п.), причин проблем может быть больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 13:45 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, Касательно хинта NOLOCK, в видео ниже показано, что он не гарантирует предсказуемого результата ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 13:49 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
komrad, Сервер Б, откуда тянут, вторичная нода для чтения продуктива на AlwaysOn, процов там много, файлов tempdb тоже. Сейчас проблем с работой tempdb не наблюдается. msLex, Этот запрос выполняется в текущем виде. Просто кроме него проблема есть и с другими запросами. Сейчас запустил на Б запрос через linked server и подключившись через ssms к инстансу А - план смотрел сразу на А при выполнении запросов. План был одинаковый, скриншот в теме выложил. А вот срок выполнения опять же в 10+ раз отличается. Хотел статистику запроса посмотреть, но при запуске с показом активной статистики запроса напрямую к инстансу А большую часть времени идёт сортировка и параллелизм, а через linked server идёт вычисление скалярного значения и удаленный запрос, что информации для сравнения мало даёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:07 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
komrad, Там запрос к вторичной ноде кластера AlwaysOn и реально вроде хинт не должен работать, там своя механика. Но коллеги по привычке ставят. Могу без него попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:09 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, А ожидания какие на А при выполнении запроса с Б? Может там просто "сеть тупит" между нодами и у вас вся длительность на обмен данными уходит. упд. ожидания лучше посмотреть на обоих серверах ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:18 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, реплика синхронная или асинхронная? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:19 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion вычисление скалярного значения Какого скалярного выражения? В вашем запросе ничего такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:19 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
komrad Danion, реплика синхронная или асинхронная? А как это может влиять на длительность запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:20 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
msLex, С включенным показом статистики у запроса через linked-server показывает во время выполнения удаленный запрос + вычисление скалярного значения. Дождусь окончания выполнения может что изменится. Реплика синхронная, но не думаю, что тут сильно влияет. Ожидания по сети есть, но это 2 ВМ размещенных на одном физическом хосте и относительно невелики. Почему при размещении на разных хостах ожидания по сети уходят в космос - дело другого разбирательства. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:35 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:37 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
komrad ну может на primary меняют таблицу время от времени и на secondary запрос ждет Как на эту проблему влияет синхронность реплик? Синхронность оканчивается синхронной записью операции commit в log реплики. Последующее реду идет идентично. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:40 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
msLex komrad ну может на primary меняют таблицу время от времени и на secondary запрос ждет Как на эту проблему влияет синхронность реплик? Синхронность оканчивается синхронной записью операции commit в log реплики. Последующее реду идет идентично. да, верно, к теме топика тип реплики не относится ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:42 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Долгий вариант завершился, при этом в плане на сервере, где запускалось остались эти удаленные запросы и вычисление скалярного значения. Но у вычисления стоимость 0% стоит, не уверен, что на него нужно обращать внимание. На удаленном сервере, как уже писал, план выполнения был схожий в обоих вариантах. Попробую запустить без сортировки и посмотреть как изменится. Удаление хинта грязного чтения каких-то изменений не вызвало. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:50 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion Попробую запустить без сортировки и посмотреть как изменится. в connection string что стоит? Provider=SQLNCLI11;... или Provider=SQLNCLI11.1;... что если с учётом следующего: --===-- > Important The SQL Server Native Client (SQLNCLI) remains deprecated and it is not recommended to use it for new development work. Instead, use the new Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) which will be updated with the most recent server features. --===-- воспользоваться OLEDB драйвером ? (который MSOLEDBSQL а не SQLOLEDB) added: п.с. последний декабрьский если что версии 18.5 http://docs.microsoft.com/en-us/sql/connect/oledb/download-oledb-driver-for-sql-server?view=sql-server-ver15 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 15:03 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
vikkiv, Похоже SQLNCLI11. При попытке создать linked server с текущим Microsoft OLE DB Driver for SQL Server выдаёт ошибку: Связанный сервер был создан, однако не прошел проверку соединения. Хотя с такими же настройками SQLNCLI11 создаётся. А для установки новой версии запрашивает отключение SQL и агента, может позже попробую. Предлагает обновить текущую версию, не с ноля ставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 15:32 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, У медленного актуального плана в свойствах корневого SELECT посморите статистику ожиданий и времени выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 15:39 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion ..Предлагает обновить текущую версию,.. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 15:40 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
vikkiv, Прод но не очень критичный, у этой системы нет своего теста, используется для аналитики данных с других серверов. При необходимости тестируют у коллег + бекап виртуалки и БД. Но лучше до сбоя не доводить. Тогда пока трогать не буду. Если есть совет по текущей ошибке создания linked server, то могу попробовать поправить без обновлений. invm, Извиняюсь, не очень понял что смотреть. У селекта в плане вижу информацию по размеру плана в кеше, стоимости операторов и т.д. Но не ожидания, а время выполнения равно времени всего запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 15:59 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion не очень понял что смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 17:48 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
invm, Из плана на сервере, где через linked server запускаю. В основном ожидание OLEDB от использования связанного сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 11:50 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion В основном ожидание OLEDB от использования связанного сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 12:38 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion Из плана на сервере, где через linked server запускаю. В основном ожидание OLEDB от использования связанного сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 12:38 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
alexeyvg Danion Из плана на сервере, где через linked server запускаю. В основном ожидание OLEDB от использования связанного сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 12:39 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
На сервере источнике во время выполнения сессия то ждёт CXPACKET, то ASYNC_NETWORK_IO. Но там и при запуске через SSMS напрямую к инстансу эти же типы ожидания, но время выполнения в 10 раз меньше. "Вот вам и ответ. Там полчаса с хвостиком набежало" Так вопрос то и был, почему такая разница при одинаковых планах выполнения на источнике. Что большую часть ожиданий через связанный сервер покажет OLEDB не удивило, так всегда вроде, если только селект. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 14:55 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, А попробуйте вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 15:19 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
invm, По плану там селект+удаленный просмотр(remote scan), на источнике данных план совпадает с прошлыми. 38 минут выполнялось, от обычного запроса через связанный сервер не отличается. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 16:49 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, А сколько строк возвращает запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 17:36 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
env, Около 1.1млн, последний раз было 1135242. На следующей неделе попробуем обновить драйвер, который рекомендовали тут попробовать, может начнёт работать через него. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 17:45 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, Т.е. событие возникает на каждые 100 строк. Пальцем в небо, через openquery с добавлением set nocount on - такая же картина? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 17:49 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Только что у себя по быстрому проверил на всякий случай - получается 3~4 разных драйвера вполне приемлемо работают (больше вместе с подверсиями и разными способами). так что вполне есть из чего выбирать, можно перебрать с различными настройками. даже с разных машин и сетей попробовать (ближе/дальше к источнику), или принудить его по TCP самому на себя линкованный сервер сделать проверив как он запрос на себе-же исполняет по линкованному серверу (или по openrowset указав connection string) может у вас с сетью проблемы (лаговый route, перегружена, или качество такое что теряет пакеты) но я-бы выборку урезал хотя-бы до пары минут, по пол часа+ ждать чисто для тестов - это жесть конечно.. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 16:34 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
set nocount on не помог. Создал по примеру MSOLEDBSQL тоже без изменений. По тестировал связанный сервер к себе же. На выбранной таблице просто селект выполняется за 1 минуту 50 секунд, а через связанный сервер за 3 минуты 51 секунд. Пока на другом сервере попробую посмотреть через связанный к себе же насколько это типичное поведение. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 10:49 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
vikkiv, А что с MSOLEDBSQL может быть не так? До 18.5 обновили. Добавляю по примеру из сообщения R-DRV с MSOLEDBSQL поменяв данные под свои и при использовании ошибка: Внепроцессное использование поставщика OLE DB "MSOLEDBSQL" с SQL Server не поддерживается. Меняю часть скрипта для варианта R-PROV, это в двух местах: @provider=N'SQLOLEDB', @provstr=N'Provider=SQLOLEDB.1 и нормально работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 12:44 |
|
Скорость выполнения запроса через linked server
|
|||
---|---|---|---|
#18+
Danion, "Provider options>>Allow Inprocess" ? да и прочих вариантов debug на месте достаточно (чтобы разобраться что не так {встало}), можно даже создать кликами через интерфейс.. для этого тестовые виртуальные среды и существуют - чтобы сбросить к началу и попробовать другим путём p.s. мой скрипт выше был сильно урезанный - т.е. чисто для проверки по быстрому там ещё такие настройки обычно идут Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 13:38 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1685246]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 182ms |
0 / 0 |