powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Долгое выполнение запроса через линкованный сервер.
16 сообщений из 16, страница 1 из 1
Долгое выполнение запроса через линкованный сервер.
    #40073798
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Есть вот такой запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @bookId table (BookId int)
insert into @bookId select * from string_split('2690010,2690011', ',')
select		BookId, 
			o.[DateShipping] 
from		@bookId b
outer apply (
				select top 1 coalesce(date_transfer, date_create) as [DateShipping]
				from		[beta\newbooksql].Rebus.[dbo].[tblOper] o with (nolock)
				inner join	[beta\newbooksql].Rebus.[dbo].[tblOperContent] oc with (nolock) on oc.op_id = o.op_id
				where		ot_id=2 and source_id=14 and shop_pt_id=614 and assistant_pt_id != 600 and bookid = b.BookId
			) o


Если выполняю его на сервере [beta\newbooksql], запрос выполняется мгновенно, если выполняю на любом из других серверов своей сети, получаю время выполнения 10 минут.

Чем может быть вызвано такая большая задержка? Я понимаю, что использование линков тормозит запрос, но не на столько же.
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073806
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Всем привет.

Есть вот такой запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @bookId table (BookId int)
insert into @bookId select * from string_split('2690010,2690011', ',')
select		BookId, 
			o.[DateShipping] 
from		@bookId b
outer apply (
				select top 1 coalesce(date_transfer, date_create) as [DateShipping]
				from		[beta\newbooksql].Rebus.[dbo].[tblOper] o with (nolock)
				inner join	[beta\newbooksql].Rebus.[dbo].[tblOperContent] oc with (nolock) on oc.op_id = o.op_id
				where		ot_id=2 and source_id=14 and shop_pt_id=614 and assistant_pt_id != 600 and bookid = b.BookId
			) o



Если выполняю его на сервере [beta\newbooksql], запрос выполняется мгновенно, если выполняю на любом из других серверов своей сети, получаю время выполнения 10 минут.

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

нужно смотреть план запроса

в качестве "пальцем в небо"

попробуйте inner join в подзапросе заменить на inner remote join
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073820
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

при использовании Link с inner remote join
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073821
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Локально
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073830
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Без remote join медленный план такой же ?
2. Не плохо бы поймать план на стороне linked сервера в случае с медленным планом
3. То, что на разных серверах один и тот же запрос с обращениями к одному и тому же linked серверу получается разным, связанно, скорее всего, с настройками этих linked серверов. Сравните их.
4. Попробуйте убрать remote из джойна и добавить forcescan для tblOper и forceseek для tblOperContent


PS

На всякий случай
linked сервер везде один и тот же?
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073835
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

1. Без remote join медленный план такой же ?
- Да
3. То, что на разных серверах один и тот же запрос с обращениями к одному и тому же linked серверу получается разным, связанно, скорее всего, с настройками этих linked серверов. Сравните их.

- Долго именно при обращении по линку с любого сервера (всех кроме [beta\newbooksql])
Быстро при выполнении на сервере [beta\newbooksql] (те без использования линка)

4. При поытке использовать FORCESEEK и FORCESCAN получаю такую ошибку

авторСообщение 7436, уровень 16, состояние 1, строка 3
Обработчику запросов не удалось создать план запроса, поскольку указание FORCESEEK или FORCESCAN в таблице или представлении "tblOper" не может использоваться с удаленными источниками данных. Удалите эти указания и отправьте запрос повторно.
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073839
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
msLex,

1. Без remote join медленный план такой же ?
- Да
3. То, что на разных серверах один и тот же запрос с обращениями к одному и тому же linked серверу получается разным, связанно, скорее всего, с настройками этих linked серверов. Сравните их.

- Долго именно при обращении по линку с любого сервера (всех кроме [beta\newbooksql])
Быстро при выполнении на сервере [beta\newbooksql] (те без использования линка)


Как же без linked когда вот текст запрос из быстрого плана


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select  BookId, 
   o.[DateShipping] 
from  @bookId b
outer apply (
    select top 1 coalesce(date_transfer, date_create) as [DateShipping]
    from  [beta\newbooksql].Rebus.[dbo].[tblOper] o with (nolock)
    inner join [beta\newbooksql].Rebus.[dbo].[tblOperContent] oc with (nolock) on oc.op_id = o.op_id
    where  ot_id=2 and source_id=14 and shop_pt_id=614 and assistant_pt_id != 600 and bookid = b.BookId
   ) o
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073842
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Разве SQL будет использовать OLEDB в этом случае, запрос выполняется на сервере [beta\newbooksql]?

Вот план, который удалось достать на стороне линкованного сервера.
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073843
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в кривом запросе в Remote Query

Сделайте на удаленном сервере в БД Rebus представление
Код: sql
1.
2.
3.
4.
5.
6.
create view dbo.MyView
as
select book_id, coalesce(date_transfer, date_create) as [DateShipping]
from [dbo].[tblOper] o with (nolock)
inner join [dbo].[tblOperContent] oc with (nolock) on oc.op_id = o.op_id
where ot_id=2 and source_id=14 and shop_pt_id=614 and assistant_pt_id != 600;


И перепишите запрос
Код: sql
1.
2.
3.
4.
5.
6.
select		BookId, 
			o.[DateShipping] 
from		@bookId b
outer apply (
				select top 1 [DateShipping] from [beta\newbooksql].Rebus.[dbo].MyView where bookid = b.BookId) o
			) o
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073856
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Не помогло
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073870
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

План смотрите для удаленного запроса. Желательно актуальный.
К тому же, в плане из 22328500 arithabort = false. Это может быть причиной проблемы.
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073876
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm

К тому же, в плане из 22328500 arithabort = false. Это может быть причиной проблемы.


Этот как раз быстро выполняется, тк запускается на хосте [beta\newbooksql].

На стороне линкованного сервера удаеттся поймать только вот такой план
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073884
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Всегда можно посмотреть в sys.dm_exec_query_stats last_worker_time, last_logical_reads и т.д.
Как получить актуальный план тоже обсуждалось неоднократно.

Обратите внимание на значение Estimated Numbers of Rows to be Read в Index Scan для [Rebus].[dbo].[tblOperContent].[OP_ID] [oc]
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073936
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Кстати, судя по плану, не понятно зачем в запросе соединение с tblOperContent?
Можно заменить на
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create view dbo.MyView
as
select
 book_id, coalesce(date_transfer, date_create) as [DateShipping]
from [dbo].[tblOper] o with (nolock)
where
 ot_id=2 and source_id=14 and shop_pt_id=614 and assistant_pt_id != 600 and
 exists(select 1 from [dbo].[tblOperContent] with (nolock) where op_id = o.op_id);


Еще можно добавить индекс на tblOper - (ot_id, source_id, shop_pt_id) include (assistant_pt_id, book_id, date_transfer, date_create)
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40073946
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

а версия сиквела какая?
в свое время была проблема с недоступностью статистики через линкед-сервер
...
Рейтинг: 0 / 0
Долгое выполнение запроса через линкованный сервер.
    #40074277
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad,

2017 и 2019
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Долгое выполнение запроса через линкованный сервер.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]