Oracle: TOAD и свой софт - разные планы запросов и скорость
От: Neco  
Дата: 13.09.11 11:42
Оценка:
На одной и той же машине из под одного и того же аккаунта запускаю один и тот же запрос. Запрос внутри ссылается на синонимы из других схем (если это имеет значение). Из-под тоада (и из-под 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
всю ночь не ем, весь день не сплю — устаю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.