Nei giorni scorsi mi sono trovato ad indagare per un problema strano.
Gli utenti mi dicevano che quando tentavano di collegare alcune tabelle Oracle tramite l'applicativo MSAccess via ODBC, l'applicazione impiegava diversi minuti, poi andava in time-out.
Come prima risoluzione ho tolto il time-out via ODBC e così ho fatto in modo che non andasse più in time-out, ma impiegava 10 min e più, prima di presentare tutti gli oggetti del DB, per scegliere la tabella desiderata.
Ho cominciato ad indagare e ho visto che per effettuare questa operazione con MSAccess lanciava questa query:
Stesso comportamento, anche da altri tools.
Questa query ci impiega veramente più di 10 min per essere eseguita.
All'inizio pensavo che fosse in relazione anche alle statistiche del Data Dictionary e quindi ho lanciato:
ma le performance rimanevano inalterate ossia scadenti.
Ho verificato nel metalink e ci sono diverse Note che riguardano l'eccessiva lentezza di questo oggetto, ma riguardavano le versioni precedenti alla mia ( 11.2.0.3.0).
Ho trovato però questa nota ,Compilation Against a 11g Database Hangs or Takes a Very Long Time (Doc ID 880660.1) inerente Oracle Form, ma verificando bene ho notato che la query usata da questo Doc Id non era molto diversa da quella mia.
Lasciando un attimo da parte la patch da installare visto che riguardava Form, ho provato con il workaround proposto ossia:
nello schema di competenza dell'utente che doveva collegare le tabelle tramite MSAccess.
Dopo la creazione di questo synonym la query impiega circa 2 sec per essere eseguita, sia da MSAccess via ODBC che da Sql Developer.
Strano comportamento....
Gli utenti mi dicevano che quando tentavano di collegare alcune tabelle Oracle tramite l'applicativo MSAccess via ODBC, l'applicazione impiegava diversi minuti, poi andava in time-out.
Come prima risoluzione ho tolto il time-out via ODBC e così ho fatto in modo che non andasse più in time-out, ma impiegava 10 min e più, prima di presentare tutti gli oggetti del DB, per scegliere la tabella desiderata.
Ho cominciato ad indagare e ho visto che per effettuare questa operazione con MSAccess lanciava questa query:
SELECT * FROM ( SELECT NULL table_qualifier ,o1.owner table_owner ,o1.object_name table_name ,decode ( o1.owner ,'SYS' ,decode ( o1.object_type ,'TABLE' ,'SYSTEM TABLE' ,'VIEW' ,'SYSTEM VIEW' ,o1.object_type ) ,'SYSTEM' ,decode ( o1.object_type ,'TABLE' ,'SYSTEM TABLE' ,'VIEW' ,'SYSTEM VIEW' ,o1.object_type ) ,o1.object_type ) table_type ,NULL remarks FROM all_objects o1 WHERE o1.object_type IN ( 'TABLE' ,'VIEW' ) UNION SELECT NULL table_qualifier ,s.owner table_owner ,s.synonym_name table_name ,'SYNONYM' table_type ,NULL remarks FROM all_objects o3 ,all_synonyms s WHERE o3.object_type IN ( 'TABLE' ,'VIEW' ) AND s.table_owner = o3.owner AND s.table_name = o3.object_name UNION SELECT NULL table_qualifier ,s1.owner table_owner ,s1.synonym_name table_name ,'SYNONYM' table_type ,NULL remarks FROM all_synonyms s1 WHERE s1.db_link IS NOT NULL ) tables WHERE 1 = 1 AND ( table_type = 'TABLE' OR table_type = 'SYSTEM TABLE' OR table_type = 'VIEW' OR table_type = 'SYNONYM' ) ORDER BY 4 ,2 ,3;Ho provato a lanciarla da Sql Developer per verificare lo stesso comportamento.
Stesso comportamento, anche da altri tools.
Questa query ci impiega veramente più di 10 min per essere eseguita.
All'inizio pensavo che fosse in relazione anche alle statistiche del Data Dictionary e quindi ho lanciato:
DBMS_STATS.GATHER_DICTIONARY_STATS;
ma le performance rimanevano inalterate ossia scadenti.
Ho verificato nel metalink e ci sono diverse Note che riguardano l'eccessiva lentezza di questo oggetto, ma riguardavano le versioni precedenti alla mia ( 11.2.0.3.0).
Ho trovato però questa nota ,Compilation Against a 11g Database Hangs or Takes a Very Long Time (Doc ID 880660.1) inerente Oracle Form, ma verificando bene ho notato che la query usata da questo Doc Id non era molto diversa da quella mia.
Lasciando un attimo da parte la patch da installare visto che riguardava Form, ho provato con il workaround proposto ossia:
create synonym all_objects for sys.dba_objects;
nello schema di competenza dell'utente che doveva collegare le tabelle tramite MSAccess.
Dopo la creazione di questo synonym la query impiega circa 2 sec per essere eseguita, sia da MSAccess via ODBC che da Sql Developer.
Strano comportamento....
Nessun commento:
Posta un commento