WITH GTransNums
AS (
SELECT /*+ INDEX (GTRANS_DEFS_24) */ gtrans_num
FROM pro.gtrans_defs
INNER JOIN pro.loc_defs ON (
loc_defs.loc_num = gtrans_defs.gdest_num
AND loc_defs.loc_type = '' JLP ''
)
WHERE gdest_num != 99999
)
SELECT /*+ INDEX (GTRANS_ITEMS_1) */ Gtrans_items.season
,Gtrans_items.sty_num
,Gtrans_items.sty_qual
,Gtrans_items.bf_mat_char_val
FROM pro.gtrans_items
WHERE gtrans_num IN (
SELECT gtrans_num
FROM GTransNums
)
GROUP BY Gtrans_items.season
,Gtrans_items.sty_num
,Gtrans_items.sty_qual
,Gtrans_items.bf_mat_char_val
код вставил выше работает очень быстро при запуске непосредственно на сервере Oracle, но когда мы закончим эти в Openquery на Microsoft SQL Server он просто зависает. Он оттягивает около 40000 строк.
Мы оценили форматирование Openquery, когда оно попадает в ящик Oracle, и все они выглядят точно так же, как при непосредственном запуске.
Openquery запускается с очень большими разрешениями на боксы Microsoft SQL Server и Oracle.
Поставщик: Oracle Provider для OLE DB
Мы создали вид из кода на поле Oracle и запрашивать мнение через OpenQuery из Microsoft SQL Server, и это было супер быстро.
Возможные мысли:
- OpenQuery не имеет доступа ни индексы, статистические данные или ключи при передаче запроса в Oracle.
- Причина возникновения проблемы связана с драйвером/диспетчером соединений. Мы пробовали драйвер ODBC без успеха.
- Некоторые странные сети, которые отправляют запрос вокруг домов. Невозможно проверить это, так как в сети запрещены пакеты снифферов. Обе коробки размещены на одном сайте.
Я нашел похожие темы на этом, но все они, похоже, отшлифованы без вывода. Это разочаровывает, так как я не могу объяснить, почему точно такой же запрос работает замечательно с разной скоростью.
Любая помощь по этому вопросу будет оценена, и если вам нужна дополнительная информация, пожалуйста, просто спросите.
Привет, Саймон, благодарю вас за ответ. Причина, по которой я поднял это, - это то, что я никогда не видел, чтобы openquery выполнялся так сильно по сравнению с «изначально» запуска SQL. –
..... я и команда недоумевают относительно несоответствия в производительности. Производительность, которую мы получили до сих пор, была хорошей из openquery. Это нас озадачивает. Любые дополнительные титры будут приветствоваться. Спасибо Danny –
У меня действительно не так много, чтобы внести свой вклад. Единственные раз, когда я это делал, это несколько разовых, где это было проще, чем альтернативы, и однажды, когда я попытался присоединиться к набору таблиц Oracle к набору таблиц SQL в качестве долгосрочного решения требования , В конце концов я не использовал его, поскольку он был слишком медленным. Я не помню, чтобы одноразовые были особенно медленными, но потом я побежал один или два раза. Вы можете попробовать включить SQL Profiler при запуске и посмотреть, что произойдет, когда; вы, очевидно, сделали что-то похожее на конец Oracle: связать их вместе может помочь. Приветствия - –