|
Тормоза 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 |
|
|
start [/forum/topic.php?fid=46&fpage=38&tid=1685257]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 287ms |
total: | 428ms |
0 / 0 |