На одной и той же машине из под одного и того же аккаунта запускаю один и тот же запрос. Запрос внутри ссылается на синонимы из других схем (если это имеет значение). Из-под тоада (и из-под sqlplus) выполнение происходит за пару секунд. Из-под своей программки, написанной на дотнете — дольше минуты.
выходил на dba — мало чем помогли, посмотрели в каком-то вебном туле — сказали мне, что в случае программки запрос начинает выполняться параллельно и потоки друг другу мешают — но мне что-то не верится в это плюс собственно вопрос в том, а почему так происходит.
была мысль, что из-за библиотечки для дотнета. System.Data.OracleClient считается устаревшей. Пробовал ODP.Net — лучше не стало.
также есть сейчас подозрение, что может быть разные home используются. Тоад показывает два:
SOFTWARE\ORACLE (Oracle Root)
ORACLE_HOME_NAME:
ORACLE_HOME:
ORACLE_SID:
NLS_LANG:
SQLPATH:
LOCAL:
Home directory does NOT exist!
Home is NOT valid!
SOFTWARE\ORACLE\KEY_V102030
ORACLE_HOME_NAME: v102030
ORACLE_HOME: C:\oracle\v102030
ORACLE_SID:
NLS_LANG: RUSSIAN_CIS.CL8MSWIN1251
SQLPATH: C:\oracle\v102030\dbs
LOCAL:
C:\oracle\v102030\Bin exists.
C:\oracle\v102030\Bin is in PATH.
Client DLL: C:\oracle\v102030\Bin\oci.dll
Client Version: 10.2.0.3.0Patch2
Home is valid.
хотя первый невалидный — не должен он использоваться. пробовал в реестре поставить oracle_home чтобы он стал валидным — ничего не изменилось.
запрос возвращает в частном случае три строки — т.е. распространённая причина, когда быстро вытягиваются только первые строки, а на самом деле всё очень долго — это не этот случай.
что может приводить к такому поведению? как продиагностировать точную причину? как это может быть, что сервер начинает себя вести по-разному в зависимости от клиента — ведь значит, что клиент должен какие-то переменные сессии выставлять, чтобы себя отличным сделать. где это посмотреть? dba могут определить только имя и id процесса.
P.S. попробовал ещё через Excel (ADODB.Connection msado28) и в дотнете, но через OdbcConnection — тоже быстро.
может быть всё что быстро работает — это через odbc? однако, тут почитал
http://msdn.microsoft.com/en-us/library/ms810810.aspx oracle odbc вроде как устарела.
21.09.11 09:06: Перенесено модератором из '.NET' — TK