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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

для работы с набором данных содана вьюшка формата:
Код: 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
22.12.2020, 17:41
    #40030260
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза openquery
Петр
если выполнить запрос:
Код: sql
1.
select * from vTable  where ID = 160285601

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

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

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

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

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

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


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

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

придется делать динамический запрос
...
Рейтинг: 0 / 0
22.12.2020, 23:18
    #40030333
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза openquery
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
23.12.2020, 11:35
    #40030394
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза openquery
Почему-то не получается использовать схему доступа [линк сервер].[каталог]..[таблица] для 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
23.12.2020, 11:45
    #40030402
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза openquery
Петр,

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

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


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