Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Query Analyzer висит... / 9 сообщений из 9, страница 1 из 1
26.03.2001, 10:44
    #32003488
ComeRun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
Прилинковал к SQL пару Informix Server'ов...
Из DTS и VB запросы к ним выполняются прекрасно в считанные секунды.
А вот Query Analyzer задумывается минут на 8 и выскакивает по timeout...
При этом в Task Manager дико растет память, используемая Enterprice Manager и висит весь компьютер...

Буду весьма благодарен за любую помощь...
Спасибо
...
Рейтинг: 0 / 0
26.03.2001, 11:13
    #32003490
ComeRun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
Маленькая справка...

Попробовал с OpenQuery...
Результаты: комп не висел, память не росла, простой селект выполнил! за 7'42'' (538000 records)...
...
Рейтинг: 0 / 0
26.03.2001, 15:30
    #32003507
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
При выполнении запроса к линкед серверу, сначала происходит перекачка данных на комп, где стоит SQL Server а только потом операции объединения и ограничения. Т.е. если есть запрос вида Select * from servname.dbname.owner.tablename where field1='zzzzzz', причем даже если это field1 не содержитни ни одной строки с 'zzzzzz', то сначала произойдет перекачка всей таблицы, а уже потом ограничение. И врезультате будет дан пустой рекордсет. Если же запрос напрямую к информиксу, то он сам быренько проведет ограничение и даст тот же пустой рекордсет. Разница во времени выполнения очевидна.
Размер памяти, который ему понадобится для закачки = кол-во_строк*размер_одной_строки
Замечание: Единственный случай, когда перекачка данных происходить не будет - когда условие очевидно и заранее вычислимо, например 1=2

Хотя, возращаясь к давней дискуссии, отмечу, что если в этом случае в плане запроса даже нет Remote Query, то если в предикате sin(1)=sin(2), то он будет, хотя выполняется тоже быстро
...
Рейтинг: 0 / 0
26.03.2001, 16:05
    #32003509
Дед Маздай
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
To ComeRun:
Решение правильное. Известно, что Openquery выполняется эффективнее, чем прямой запрос к четырехзначному объекту. Более того, возникают ситуации, когда только Openquery и работает. Напр., когда в кач-ве linked server выступает MSOLAP.2 (как ни странно).

To Dmitry:
Сказанное Вами справедливо, если в кач-ве linked server выступает совсем тупой источник данных, к-й не умеет своими силами производить фильтрацию. Напр., plain text. Я не работал с Informix, но мне кажется, что он должен вести себя более интеллектуально. Напр., OLE DB провайдеры к Oracle и DB2 ведут себя очень пристойно, передавая where и join (если он не выходит на внешние данные) на linked server. Да Вы даже обычный XML прилинкуйте и посмотрите план: он where прячет в remote query, а SQL Serverу гонит уже не весь stream, а сухой остаток.
...
Рейтинг: 0 / 0
26.03.2001, 19:10
    #32003522
ComeRun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
Огромное всем спасибо...
...
Рейтинг: 0 / 0
26.03.2001, 19:46
    #32003527
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
2 Дед Маздай: К сожалению, у меня нет возможности проверить на многих различных источниках, но то что я писал я проверял на прилинкованном MS SQL сервере
Уж не знаю, насколько он туп или интеллектуален, по идее в связке со свои родным сервером должен давать максимум производительности. Ан нет... Фильтрацию проводит после Remote Query (это видно в плане выполнения), да и чувствуется при выпонении запроса: условие фильтрации заранее делаю такое, чтобы отсеялось все; прилинкованный сервер связывается посредством модема. Так вот при относительно большом размере таблицы можно сходить поспать раньше чем получишь в ответ пустой рекордсет
. Если же прилинкованный сервер соединяется через локалку, или же запрос дается при коннекте к самому этому серверу через модем(без использования linked server), то ответ получается очень быстро.
...
Рейтинг: 0 / 0
06.04.2001, 17:41
    #32004022
ComeRun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
А как-таки удалось прилинковать INFORMIX ? У меня линки выполняются но при попытке просмотреть таблицы вылазит ошибка 7399 ? Я попробовал прилинковать ODBC источник для базы из SYBASE SQL Anywhere - результат такой же.

Прошу помощи!!!
...
Рейтинг: 0 / 0
07.04.2001, 21:02
    #32004039
Дед Маздай
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
2 Dmitry
Оценки типа "чувствуется", "сходить поспать" и прочие нематериальные вещи оставим женской логике. Я по-прежнему продолжаю утверждать, что SQL Server по максимуму перекладывает на прилинкованный сервер все, что касается подзапроса, насколько это допускает OLE DB-провайдер прилинкованного сервера. Описанная Вами ситуация, когда SQL Server всасывает всю внешнюю таблицу целиком, чтобы обработать ее у себя, обуславливается либо тупостью внешнего провайдера, либо наличием в запросе каких-либо вещей, специфичных сугубо для MS SQL Server, которые не поддерживаются общим знаменателем OLE DB, даже если это SQLOLEDB.
Выполните, напр.,
select CustomerID, EmployeeID, OrderDate, Freight from MyLinkedSrv.Northwind.dbo.Orders where OrderDate >= '1998/01/01',
и Вы увидите в плане запроса
Remote Query = SELECT Tbl1001."CustomerID" Col1004,Tbl1001."EmployeeID" Col1005,Tbl1001."OrderDate" Col1006,Tbl1001."Freight" Col1009 FROM "Northwind"."dbo"."Orders" Tbl1001 WHERE Tbl1001."OrderDate">='1998-01-01 00:00:00.000'),
что фильтрация выполняется на прилинкованном сервере. А теперь сделайте
select CustomerID, EmployeeID, OrderDate, Freight from MyLinkedSrv.Northwind.dbo.Orders where datepart(yyyy, OrderDate) = 1998,
и Вы увидите, что теперь условие where уходит из Remote Query на локальный сервер:
Filter(WHEREdatepart(year, [MyLinkedSrv].[Northwind].[dbo].[Orders].[OrderDate])=199)
|--Remote Query(SOURCEMyLinkedSrv), QUERYSELECT Tbl1001."Freight" Col1009,Tbl1001."OrderDate" Col1006,Tbl1001."EmployeeID" Col1005,Tbl1001."CustomerID" Col1004 FROM "Northwind"."dbo"."Orders" Tbl1001))
SQL Server не передает where прилинкованному серверу, поскольку в общем случае тот не обязан знать, что такое datepart.
Сказанное относится и к стратегиям построения связей. Если MyLinkedSrv - SQL Server, то мы можем легко посмотреть, какая часть запроса в д-ти к нему приходит, натравив на него SQL Profiler. Включим Performance\Execution Plan в список отлавливаемых событий, установим фильтр на Application Name like Microsoft SQL Server%. На локальном сервере сделаем
select c.CompanyName, e.LastName, o.OrderDate, o.Freight
from Customers c inner join MyLinkedSrv.Northwind.dbo.Orders o on c.CustomerID = o.CustomerID
inner join MyLinkedSrv.Northwind.dbo.Employees e on o.EmployeeID = e.EmployeeID.
Вот как выглядит план на локальном сервере:
Merge Join(Inner Join, MERGE[c].[CustomerID])=([MyLinkedSrv].[Northwind].[dbo].[Orders].[CustomerID]), RESIDUAL[c].[CustomerID]=[MyLinkedSrv].[Northwind].[dbo].[Orders].[CustomerID]))
|--Clustered Index Scan(OBJECT[Northwind].[dbo].[Customers].[PK_Customers] AS [c]), ORDERED FORWARD)
|--Remote Query(SOURCEMyLinkedSrv), QUERYSELECT o."CustomerID" Col1070,o."OrderDate" Col1072,o."Freight" Col1075,e."LastName" Col1079 FROM "Northwind"."dbo"."Orders" o,"Northwind"."dbo"."Employees" e WHERE o."EmployeeID"=e."EmployeeID" ORDER BY o."CustomerID" ASC))
И действительно, в профайлере на MyLinkedSrv читаем:
Sort(ORDER BY[o].[CustomerID] ASC))
|--Hash Match(Inner Join, HASH[e].[EmployeeID])=([o].[EmployeeID]), RESIDUAL[e].[EmployeeID]=[o].[EmployeeID]))
|--Index Scan(OBJECT[Northwind].[dbo].[Employees].[LastName] AS [e]))
|--Clustered Index Scan(OBJECT[Northwind].[dbo].[Orders].[PK_Orders] AS [o])).
Это есть конкретная реализация того, что локальный сервер прислал ему в виде заявки в Remote Query. Кстати, обратите внимание, на ORDER BY Customer.ID, что затем на локальном сервере позволяет применить merge join, поск. Customers априори упорядочена по CustomerID.
...
Рейтинг: 0 / 0
09.04.2001, 08:14
    #32004053
AnS1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Query Analyzer висит...
А как быть с joinами?
План показывает, что соединение происходит на локальном сервере
использование inner remote join с временной таблицей слева - аналогично
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Query Analyzer висит... / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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