|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Общая задача: обращение к таблицам (основное: выборка по запросу. второстепенное: обновление, вставка) БД FireBird 2.5 из БД SQL Server 2008. Для этого сейчас доступ организован через прилинкованный сервер FireBird через драйвер ODBC. Используется механизм OPENQUERY. Проблема в жутких тормозах данного механизма. Запрос который FireBird отрабатывает моментально, через OPENQUERY тормозит неприемлемо долго. Как ускорить процесс? Чем можно заменить OPENQUERY, может быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 13:20 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, сначала определите, где тормоза, у FireBird же есть средство диагностики поступающих запросов? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 13:33 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Критик Петр, сначала определите, где тормоза, у FireBird же есть средство диагностики поступающих запросов? я же написал тормоза на стороне sql server ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 13:56 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр Критик Петр, сначала определите, где тормоза, у FireBird же есть средство диагностики поступающих запросов? я же написал тормоза на стороне sql server Сразу из исходного поста это было неочевидно. А когда тормозит, до или после? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 14:03 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, Из того, что вы написали, такой вывод сделать нельзя. Сначала нужно посмотреть, что реально приходит на сторону FireBird через средство его мониторинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 14:05 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Запрос выполняется медленно на sql server. Т.е. даже не использую клиентское приложение, а просто из SMS запрос тормозит ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 14:07 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, Ну запустите вы профайлер и его аналог в FireBird, так найдете, на какой конкретно стадии происходит задержка. В реальности там может быть всё что угодно, например, какая-нибудь безопасность на уровне строк, которая срабатывает под одним логином через связанный сервер и под другим при прямом запуске. Или аналог SET`ов сиквела. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 14:13 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр Запрос выполняется медленно на sql server. Я спросил, до или после тормозит в sql server? Это же важно, для понимания проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 15:14 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр Запрос который FireBird отрабатывает моментально, через OPENQUERY тормозит неприемлемо долго. А есть 100%-я уверенность, что для Firebird это тот же запрос? На личном опыте неоднократно наблюдал как тормозят "те же самые" запросы в аналогичной связке через openquery c Oracle. Правда, потом оказывалось, что автор запроса наплевал на неявные преобразования строк в даты или числа, приклеивая литералы в openquery. И запрос для источника оказывался совсем другим. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 15:33 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр Запрос выполняется медленно на sql server. Т.е. даже не использую клиентское приложение, а просто из SMS запрос тормозит Не рассматривались варианты, что "неприемлемо" тормозит odbc-драйвер, что "неприемлемо" тормозит сеть, что клиентское приложение firebird после запроса достает только первые 10-20 строк результирующего набора данных (остальные - по кликам в клиенте), а SQL Server "неприемлемо" тащит все 100500 млн строк (возможно даже, что через первые две неприемлемости)? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 16:00 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
что выявлено: для работы с набором данных содана вьюшка формата: Код: sql 1. 2. 3. 4. 5. 6.
если выполнить запрос: Код: sql 1.
запрос выполняется 5 секунд если выполнить напрямую выборку используя первичный ключ Код: sql 1. 2. 3. 4. 5. 6.
то запрос выполняется 80 млсек. профайлер ничего интересного не показывает - что отправляется то и выполняется ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:32 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр если выполнить запрос: Код: sql 1.
Если совсем точно, то фильтр накладывается в процессе чтения, но читается и гоняется по сети все равно весь объем данных таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:41 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, А откуда такая уверенность, что предикат будет проброшен на сторону firebird в первом случае? Неоднократно натыкались на то, что при такой реализации куда чаще идёт полное выполнение запроса на источнике и фильтр уже поверх результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:42 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
invm, В каких-то отдельных редких случаях - предикат таки пробрасывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:43 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, попробуйте использовать linked server и выставить ему опцию "collation compatible". Будет ли быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:51 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
env В каких-то отдельных редких случаях - предикат таки пробрасывается. Предикат может пробрасываться для Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:54 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
invm, Но тоже далеко не всегда ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:56 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, Фактически вы сравниваете выполнение разных запросов. Если запросы к простым таблицам с заведомо совместимыми типами данных, то можно использовать вариант invm 22252392 , если нет, то придётся явно прибивать предикаты в openquery. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 17:58 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
env Но тоже далеко не всегда ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 18:20 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
invm Петр если выполнить запрос: Код: sql 1.
Если совсем точно, то фильтр накладывается в процессе чтения, но читается и гоняется по сети все равно весь объем данных таблицы. потому и засасывает всю таблицу с последующей фильтрацией 160285601 то ли не инт, то ли не бигинт, то ли не numeric (10,0), то ли не варчар не раз с таким сталкивался в связке оракл-мскл ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 21:32 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
манипуляции с сортировкой не помогли. придется делать динамический запрос ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 22:08 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
invm env В каких-то отдельных редких случаях - предикат таки пробрасывается. Предикат может пробрасываться для Код: sql 1.
всё так и есть Код: sql 1. 2. 3. 4. 5. 6.
на Оракловом сервере выполняется запрос select id_doc, regn_doc, okpo, ddoc, user_id from DOC.DOCR потом результат запроса засасывается на мсскл и там фильтруется этот работает по индексу и моментально Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 23:18 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Почему-то не получается использовать схему доступа [линк сервер].[каталог]..[таблица] для ODBC драйвера на FireBird Код: sql 1. 2. 3. 4.
Кто-то пробовал для FireBird ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:35 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, Поиск по форуму показывает, что аналогичная проблема была для Firebird 2.0, точнее для его odbc драйвера. Возможно, между каталогом и таблицей должна быть ещё и схема? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:45 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр Почему-то не получается использовать схему доступа [линк сервер].[каталог]..[таблица] для ODBC драйвера на FireBird ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:47 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
запрос: Код: sql 1.
ошибка Код: sql 1. 2. 3. 4. 5. 6.
вариант с OPENQUERY работает Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:59 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, А Код: sql 1.
тоже работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:05 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
env Петр, А Код: sql 1.
тоже работает? Нет. А почему должно работать? Сервер FireBird ничего не знает про SGMRGD. SGMRGD - это же линк сервер и алиас ODBC драйвера ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:08 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, Тогда зачем вы заставляете драйвер читать из несуществующей таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:12 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр Код: sql 1.
Так попробуйте Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:14 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
invm Петр Код: sql 1.
Так попробуйте Код: sql 1.
вот почему второй - картинка Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:27 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр, Тогда так, в соответствии с принципом "нормальные герои всегда идут в обход" (с) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:47 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
да временная таблица особо не нужна если выборка только по таблице линксервера достаточно Код: sql 1. 2. 3.
но вот если этот датасет из процедуры надо связать с таблицей из БД SQL сервера как быть. Только через временную таблицу или можно еще както? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:10 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
openquery можно использовать при связке типа Код: sql 1. 2. 3.
т.е. придется вьюшки заменить на хранимые процедуры. если кто-то предложит правильную конструкцию обращения к firebird напрямую к таблице типа (SELECT ID FROM SGMRGD.SGMRGD..TEST), буду признателен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:39 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр или можно еще както? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:52 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Петр если кто-то предложит правильную конструкцию обращения к firebird напрямую к таблице типа (SELECT ID FROM SGMRGD.SGMRGD..TEST), буду признателен. Для начала следует попробовать в настройках драйвера отбить всю "поддержку" схем, чтобы он честно отвечал "схемы не поддерживаются". Или можно использовать драйвер с https://github.com/aafemt/firebird-odbc-driver где эта поддержка отбита принудительно. Потом включается трассировка ODBC и смотрится как именно SQL Server с ним работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 14:45 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Для начала следует попробовать в настройках драйвера отбить всю "поддержку" схем, чтобы он честно отвечал "схемы не поддерживаются". Или можно использовать драйвер с https://github.com/aafemt/firebird-odbc-driver где эта поддержка отбита принудительно. Потом включается трассировка ODBC и смотрится как именно SQL Server с ним работает. в настройка ODBC пробовал ничего не меняется. Схема отключена по поводу альтернативного драйвера ODBC - вы пользовались им? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 15:15 |
|
Тормоза openquery
|
|||
---|---|---|---|
#18+
Во-первых, это не "альтернативный драйвер", а немного поправленный форк официального. Во-вторых, я его сделал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 14:32 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1685257]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 284ms |
total: | 454ms |
0 / 0 |