Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
Всем привет! есть два одинаковых сервера Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor) OS Windows Server 2012 R2 соединены между собой каналом 1 гбит/сек описаны связанные серверы, при выборке данных с удаленного(связанного) сервера, наблюдаются небольшие задержки, хотя есть выполнять запрос на локальном сервере запрос выполняется моментально без задержек пример запроса select * from [srv1].databse.dbo.table1 вопрос: Есть ли какие-нибудь хитрости по настройке связного сервера которые сократят время отклика удаленного(связанного) сервера? |
18 июн 15, 14:14 [17787514] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Где и как наблюдается ? |
||
18 июн 15, 14:18 [17787547] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
srv1 - исходный сервер srv2 - удаленный (связный) сервер запрос выполняю на сервере srv1 в SMSS, задержка проявляется в двух местах 1. ожидание выполнение запроса 2. фетч записей если запрос выполнять на сервере srv2 в SMSS задержка не наблюдается ни в первом ни во втором случаях. |
||||
18 июн 15, 14:47 [17787700] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Чем вы измеряете задержку ? И как ? |
||
18 июн 15, 14:48 [17787704] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Mandarin, как-то не конкретно... Что значит мгновенно, что значит задержка... |
18 июн 15, 14:54 [17787743] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
Glory, Задержку измеряю самым элементарным способом - по времени выполнения запроса, время выполнения запроса показывает SSMS разница по времени 5-7 секунд, это с учетом того что если выполнять запрос на сервере где лежат данные то время выполнения 0 сек, если запрос делать на удаленном сервере то время выполнения 5-7 секунд. |
18 июн 15, 14:55 [17787747] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
||
18 июн 15, 15:01 [17787773] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
invm, да, хотелось бы без задержки |
18 июн 15, 16:23 [17788377] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
Mandarin, к примеру если я из приложения написанного на Delphi делаю такой же запрос к удаленному серверу, только не через связанные серверы а так сказать напрямую, т.е. в настройках клиента указываю сервер откуда брать данные, то запрос так же выполняется "мгновенно" в приделах 0-0,5 сек |
18 июн 15, 16:27 [17788404] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Показывайте текст проблемного запроса и его актуальный план выполнения в формате sqlplan. |
||
18 июн 15, 16:40 [17788481] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
и вы это делаете из приложения, написанного на Delphi, под тем же логином, в к-ого отмапливаетесь при выполнении из студии через linked server?
|
|||
18 июн 15, 17:01 [17788601] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Mandarin, Вы тестовое приложение запускаете на srv2? |
18 июн 15, 17:02 [17788608] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А как вы измеряете время на установление соединения, время выполнения на удаленном сервере команд(кстати, сколько и какие они), время на передачу результата этих команд ? |
||
18 июн 15, 19:31 [17789445] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
Glory, от слов к делу, часть своих проблем я решил таким образом - вызываю хранимую процедуру удаленного сервера, запрос отрабатывает быстро, точно так же как если его запускать на локальном сервере exeс [linkedserver].database.scheme.sp этот вариант отлично работает если выборка данных состоит только из данных удаленного сервера, если же данные находятся на разных серверах, то соединить я их могу только так select t1.f1,t2.f2 from t1 left join [linkedserver].database.scheme.t2 в этом случае задержка есть, можно было бы использовать TV функцию но ее нельзя вызывать удаленно пишет ошибку "Удаленные вызовы функций, возвращающих табличное значение, не допускаются", в openquery динамические параметры нельзя передать. вопрос: можно ли присоединить данные удаленного сервера к основному запросу так чтобы эти данные обрабатывались на удаленном сервере. аналогично exeс [linkedserver].database.scheme.sp ? |
19 июн 15, 13:42 [17792486] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы справшиваете, как сделать запрос без установления соединения и передачи данных по сети ? |
||
19 июн 15, 13:44 [17792494] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Так выполните exeс [linkedserver].database.scheme.sp в локальную таблицу. |
19 июн 15, 13:54 [17792592] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Общий ответ - да, можно. Если в плане Remote Scan, то загружается вся таблица с удаленного сервера. Если Remote Query, то выполняется запрос на стороне удаленного сервера. Какой именно видно, опять же, в плане. В ваше случае возможно может помочь переписывание запроса через outer apply. |
||
19 июн 15, 14:21 [17792830] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
я этот вариант рассматривал. но он мне не подходит т.к. SP без параметров возвращает очень большой набор записей, тащить все записи на локальный сервер нецелесообразно. вот кусок моего настоящего SQL запроса в котором видно как я присоединяю данные с удаленного сервер outer apply( select sum( case when DATEDIFF(second,m.TimeStart,m.TimeEnd) = 0 then 1 else DATEDIFF(second,m.TimeStart,m.TimeEnd) end) MotionOnKKM from [SQL-3000].Video.dbo.Cams c with (nolock) left join [SQL-3000].Video.dbo.Motion m with (nolock) on m.CamID = c.CamID and m.TimeStart between fx.FixTime and ntr.CreateDate where c.KKMDeviceID = cl.DeviceID) mKKM в плане видно что выполняется RemoteQuery. я не партизаню :) на вопросы как я замеряю время выполнение ответил развернуто и конкретно - смотрю время выполнения запроса в окне SSMS :) |
||
19 июн 15, 14:28 [17792909] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Это очень "развернуло" понимание, на что сервер тратит время
А таблица на локальном сервере содержит еще больше записей и ее еще нецелсообразнее "заталкивать" на удаленный сервер ? |
||||
19 июн 15, 14:30 [17792931] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
Glory, тогда уточните запрос какое время нужно посчитать, я скажу значения которые нужны, или скажите как правильно считать время чтоб ответ был развернутым. таблицу передавать на удаленный сервер тоже не вариант, таблицы достаточно большие. |
19 июн 15, 14:34 [17792954] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Я уже два раза написал |
||
19 июн 15, 14:35 [17792964] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Начальный вопрос выглядел какselect * from [srv1].databse.dbo.table1 По ходу пьесы оказывается, что автор обманывает - сознательно или нет. |
19 июн 15, 14:49 [17793076] Ответить | Цитировать Сообщить модератору |
Mandarin Member Откуда: Саратов Сообщений: 1213 |
Владислав Колосов, скорее не сознательно, зачем мне обманывать когда мне результат нужен. |
19 июн 15, 14:52 [17793106] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
||
19 июн 15, 15:12 [17793236] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |