powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тормоза openquery
25 сообщений из 39, страница 1 из 2
Тормоза openquery
    #40030107
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общая задача: обращение к таблицам (основное: выборка по запросу. второстепенное: обновление, вставка) БД FireBird 2.5 из БД SQL Server 2008.

Для этого сейчас доступ организован через прилинкованный сервер FireBird через драйвер ODBC. Используется механизм OPENQUERY.

Проблема в жутких тормозах данного механизма. Запрос который FireBird отрабатывает моментально, через OPENQUERY тормозит неприемлемо долго.

Как ускорить процесс? Чем можно заменить OPENQUERY, может быть?
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030119
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

сначала определите, где тормоза, у FireBird же есть средство диагностики поступающих запросов?
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030125
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
Петр,

сначала определите, где тормоза, у FireBird же есть средство диагностики поступающих запросов?


я же написал тормоза на стороне sql server
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030132
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр
Критик
Петр,

сначала определите, где тормоза, у FireBird же есть средство диагностики поступающих запросов?


я же написал тормоза на стороне sql server
То есть при вызове со стороны sql server запрос выполняется быстро, но в sql server потом (или до) где то тормозит?
Сразу из исходного поста это было неочевидно.

А когда тормозит, до или после?
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030135
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

Из того, что вы написали, такой вывод сделать нельзя.
Сначала нужно посмотреть, что реально приходит на сторону FireBird через средство его мониторинга.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030136
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос выполняется медленно на sql server. Т.е. даже не использую клиентское приложение, а просто из SMS запрос тормозит
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030140
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

Ну запустите вы профайлер и его аналог в FireBird, так найдете, на какой конкретно стадии происходит задержка.

В реальности там может быть всё что угодно, например, какая-нибудь безопасность на уровне строк, которая срабатывает под одним логином через связанный сервер и под другим при прямом запуске. Или аналог SET`ов сиквела.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030196
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр
Запрос выполняется медленно на sql server.
Да, вы уже писали.
Я спросил, до или после тормозит в sql server?
Это же важно, для понимания проблемы.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030214
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр
Запрос который FireBird отрабатывает моментально, через OPENQUERY тормозит неприемлемо долго.

А есть 100%-я уверенность, что для Firebird это тот же запрос?

На личном опыте неоднократно наблюдал как тормозят "те же самые" запросы в аналогичной связке через openquery c Oracle. Правда, потом оказывалось, что автор запроса наплевал на неявные преобразования строк в даты или числа, приклеивая литералы в openquery. И запрос для источника оказывался совсем другим.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030219
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петр
Запрос выполняется медленно на sql server. Т.е. даже не использую клиентское приложение, а просто из SMS запрос тормозит

Не рассматривались варианты, что "неприемлемо" тормозит odbc-драйвер, что "неприемлемо" тормозит сеть, что клиентское приложение firebird после запроса достает только первые 10-20 строк результирующего набора данных (остальные - по кликам в клиенте), а SQL Server "неприемлемо" тащит все 100500 млн строк (возможно даже, что через первые две неприемлемости)?
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030259
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что выявлено:

для работы с набором данных содана вьюшка формата:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE VIEW vTable as
select * from openquery(ALIAS,'
SELECT 
 ID
,Name
FROM Table')



если выполнить запрос:
Код: sql
1.
select * from vTable  where ID = 160285601


запрос выполняется 5 секунд

если выполнить напрямую выборку используя первичный ключ
Код: sql
1.
2.
3.
4.
5.
6.
select * from openquery(ALIAS,'
SELECT 
 ID
,Name
FROM Table
where ID = 160285601')


то запрос выполняется 80 млсек.

профайлер ничего интересного не показывает - что отправляется то и выполняется
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030260
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр
если выполнить запрос:
Код: sql
1.
select * from vTable  where ID = 160285601

Объясняю - это означает считать ВСЮ таблицу с линкеда и только потом наложить фильтр.
Если совсем точно, то фильтр накладывается в процессе чтения, но читается и гоняется по сети все равно весь объем данных таблицы.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030262
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

А откуда такая уверенность, что предикат будет проброшен на сторону firebird в первом случае? Неоднократно натыкались на то, что при такой реализации куда чаще идёт полное выполнение запроса на источнике и фильтр уже поверх результата.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030264
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

В каких-то отдельных редких случаях - предикат таки пробрасывается.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030267
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

попробуйте использовать linked server и выставить ему опцию "collation compatible".
Будет ли быстрее?
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030270
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
В каких-то отдельных редких случаях - предикат таки пробрасывается.
В случае openquery предикат не пробрасывается.
Предикат может пробрасываться для
Код: sql
1.
select ... from LinkedServer.Database.Owner.Table where ...
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030273
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Но тоже далеко не всегда
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030276
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

Фактически вы сравниваете выполнение разных запросов. Если запросы к простым таблицам с заведомо совместимыми типами данных, то можно использовать вариант invm 22252392 , если нет, то придётся явно прибивать предикаты в openquery.
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030284
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Но тоже далеко не всегда
Ну так я и не писал "всегда".
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030317
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Петр
если выполнить запрос:
Код: sql
1.
select * from vTable  where ID = 160285601


Объясняю - это означает считать ВСЮ таблицу с линкеда и только потом наложить фильтр.
Если совсем точно, то фильтр накладывается в процессе чтения, но читается и гоняется по сети все равно весь объем данных таблицы.
очень похоже на несовпадение типов данных
потому и засасывает всю таблицу с последующей фильтрацией
160285601 то ли не инт, то ли не бигинт, то ли не numeric (10,0), то ли не варчар

не раз с таким сталкивался в связке оракл-мскл
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030322
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
манипуляции с сортировкой не помогли.

придется делать динамический запрос
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030333
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
env
В каких-то отдельных редких случаях - предикат таки пробрасывается.
В случае openquery предикат не пробрасывается.
Предикат может пробрасываться для
Код: sql
1.
select ... from LinkedServer.Database.Owner.Table where ...




всё так и есть
Код: sql
1.
2.
3.
4.
5.
6.
select *
  from openquery(ORA,
  'select id_doc, regn_doc, okpo, ddoc, user_id
  from DOC.DOCR
  ')
  where id_doc = 2200016

на Оракловом сервере выполняется запрос select id_doc, regn_doc, okpo, ddoc, user_id from DOC.DOCR
потом результат запроса засасывается на мсскл и там фильтруется



этот работает по индексу и моментально
Код: sql
1.
2.
3.
select id_doc, regn_doc, okpo, ddoc, user_id
  from ORA..DOC.DOCR
  where id_doc = 2200016;
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030394
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то не получается использовать схему доступа [линк сервер].[каталог]..[таблица] для ODBC драйвера на FireBird
Код: sql
1.
2.
3.
4.
Поставщик OLE DB "MSDASQL" для связанного сервера "LNKSRV" вернул сообщение "[ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 23
.".



Кто-то пробовал для FireBird ?
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030402
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

Поиск по форуму показывает, что аналогичная проблема была для Firebird 2.0, точнее для его odbc драйвера.

Возможно, между каталогом и таблицей должна быть ещё и схема?
...
Рейтинг: 0 / 0
Тормоза openquery
    #40030404
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр
Почему-то не получается использовать схему доступа [линк сервер].[каталог]..[таблица] для ODBC драйвера на FireBird
Нужно угадать что написано в запросе?
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тормоза openquery
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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