Problemas con el Gateway EGM.
Posted in 2004
Topics: Performance & Tuning, Connectivity: ODBC / JDBC / .NET, Data Types & Schema Design, Platform-Specific Issues, Versions, Editions & End-of-Life
Hola a
Todos,
Nosotros hemos adquirido un producto de IBM Informix "Gateway EGM
7.31 UC3", dicho producto lo utilizamos para conectarnos de una base de
datos IDS 7.31 FD3 a una base de datos Oracle 8i, esta conexión se establece
por ODBC, la arquitectura es la siguiente :
14 Servidores Informix
----------------------
Servidores Modelo : HP ES45 / 4100
Sistema Operativo : Tru64 5.1a
Base de Datos : IDS 7.31 FD3
1 Servidor Oracle
-----------------
Servidor Modelo : Rics 6000
Sistema Operativo : AIX 4.11
Base de datos : Oracle 8i
Gateway de Informix : Gateway EGM 7.31 UC3.
El Gateway EGM esta instalado en el mismo servidor que tiene instalada la
base
de datos Oracle ( Servidor IBM ), a dicho servidor se conectan 14 servidores
de
base de datos INFORMIX vía ODBC por intermedio de vistas creadas en cada
servidor de base de datos Informix apuntando hacia una tabla de una base de
datos Oracle, el problema es que cada conexión a la base de datos Oracle
antes de resolver el query (Vista) este empieza a ejecutar un "select
distinc" por cada uno de los campos del índice de la tabla en Oracle, esto
origina que el query demore en dar los resultados y lo peor es que al
ejecutar los "select distinc" la base de datos realiza varios "sequential
scans" quitando performance a la base de datos Oracle, les envió la vista en
Informix y la estructura de la tabla en Oracle.
Vista Informix
--------------
create view vliquida
(rltipliq,rladuana,rlano,rlnroliq,rlfecliq,rlfeccan,rlmonpagso,rladuaso,rlan
oaso,rlnumaso,rltipdoc,rllibtri)as
select x0.rltipliq ,x0.rladuana ,x0.rlano ,x0.rlnroliq
,x0.rlfecliq,x0.rlfeccan ,x0.rlmonpagso ,x0.rladuaso
,x0.rlanoaso,x0.rlnumaso,x0.rltipdoc ,x0.rllibtri
from prad1@aix1_gateway:"USAMRI00".tari_liquida x0
where (((x0.rltipliq = '0038' ) AND (x0.rlfeccan > 0. ) )AND
(x0.rlfeceli = 0. ) )
Estructura de la tabla e indices en Oracle
------------------------------------------
TABLA "TARI_LIQUIDA"
RLADUANA NOT NULL VARCHAR2(3)
RLANO NOT NULL VARCHAR2(2)
RLNROLIQ NOT NULL VARCHAR2(6)
RLCODDES VARCHAR2(4)
RLCODUSU VARCHAR2(4)
RLTIPLIQ VARCHAR2(4)
RLTIPDOC VARCHAR2(1)
RLLIBTRI VARCHAR2(11)
RLCOMITE VARCHAR2(150)
RLCODORI VARCHAR2(4)
RLDIRECC VARCHAR2(60)
RLCODCO1 VARCHAR2(3)
RLCODCO2 VARCHAR2(3)
RLCODCO3 VARCHAR2(3)
RLDETALL VARCHAR2(65)
RLDETAL2 VARCHAR2(65)
RLDETAL3 VARCHAR2(65)
RLDETAL4 VARCHAR2(65)
RLDETAL5 VARCHAR2(65)
RLCODMON VARCHAR2(1)
RLTIPRES VARCHAR2(1)
RLNRORES VARCHAR2(8)
RLFECLIQ NUMBER(8)
RLHORLIQ NUMBER(6)
RLFECCAN NUMBER(8)
RLHORCAN NUMBER(6)
RLFECNOT NUMBER(8)
RLFECNOTC NUMBER(8)
RLHORNOT NUMBER(6)
RLULTDIA NUMBER(8)
RLULTDIAC NUMBER(8)
RLSMONTOT NUMBER(13,2)
RLDMONTOT NUMBER(13,2)
RLMONRECAR NUMBER(13,2)
RLMONINTER NUMBER(13,2)
RLRECAADIC NUMBER(13,2)
RLINTEFRAC NUMBER(13,2)
RAZONELI VARCHAR2(45)
RLMONPAGSO NUMBER(13,2)
RLANOPAN VARCHAR2(2)
RLPOLANT VARCHAR2(6)
RLANOLAN VARCHAR2(2)
RLLIQANT VARCHAR2(6)
RLANOREC VARCHAR2(2)
RLNROREC VARCHAR2(6)
RLFECCOA NUMBER(8)
RLFECRCL NUMBER(8)
RLFECRCLC NUMBER(8)
RLFECARE NUMBER(8)
RLNOTIF VARCHAR2(1)
RLTIPNOTC VARCHAR2(1)
RLCLAPOL VARCHAR2(1)
RLVENCIM NUMBER(8)
RLACOGIM NUMBER(8)
RLTIPNOT VARCHAR2(1)
RLRESREC VARCHAR2(1)
FILLER VARCHAR2(19)
RLFECELI NUMBER(8)
RLFECQUIEB NUMBER(8)
RLTIPRESQ VARCHAR2(1)
RLANORESQ VARCHAR2(4)
RLNRORESQ NUMBER(6)
RLTIPFRAC VARCHAR2(3)
RLDOCASO VARCHAR2(2)
RLANOEXPRE VARCHAR2(4)
RLNROEXPRE NUMBER(6)
RLFLPAC VARCHAR2(1)
RLCOSTAS NUMBER(12,2)
RLADUPOL VARCHAR2(3)
RLREGIMEN VARCHAR2(2)
RLSUFIJO VARCHAR2(2)
RLTDOCUM VARCHAR2(2)
RLDIGVER VARCHAR2(1)
RLFECRES NUMBER(8)
RLMANUCANC VARCHAR2(1)
RLCODESP VARCHAR2(6)
CDIGMOD VARCHAR2(7)
FMOD NUMBER(8)
RLTIPCAN NUMBER(2)
RLFORMCAN VARCHAR2(1)
RLBCOCAN VARCHAR2(3)
RLDETAL6 VARCHAR2(65)
RLDETAL7 VARCHAR2(65)
RLDETAL8 VARCHAR2(65)
RLAREA VARCHAR2(2)
RLADUASO VARCHAR2(3)
RLANOASO VARCHAR2(2)
RLNUMASO VARCHAR2(6)
RLTIPRESA VARCHAR2(2)
RLFRESREC NUMBER(8)
RLFECNOTO NUMBER(8)
RLCHGEN VARCHAR2(1)
TOT_DOLOLD NUMBER(13,2)
FLAG VARCHAR2(1)
LIQMODIF NUMBER(1)
RLIMPO VARCHAR2(1)
RLFECREL NUMBER(8)
RLPOLLIB VARCHAR2(1)
RLCERTINS VARCHAR2(16)
RLFECREG NUMBER(8)
RLFECCON NUMBER(8)
RLREDMUL VARCHAR2(1)
RLAREARES VARCHAR2(6)
RLFECLEG NUMBER(8)
RLCODEST VARCHAR2(1)
RAZONREC VARCHAR2(45)
RLEXCAGEN NOT NULL VARCHAR2(1)
INDICES
RLCODUSU 1 CODUSU_CODDES
RLCODDES 2
RLFECELI 3
RLFECCAN 4
RLFECCAN 1 FCAN
RLADUANA 2
RLFECLIQ 1 FLIQ
RLADUANA 2
RLANO 3
RLNROLIQ 4
RLFECNOT 1 FNOT
RLADUANA 2
RLANO 3
RLNROLIQ 4
RLADUASO 1 LIQUIDA
RLANOASO 2
RLNUMASO 3
RLADUPOL 1 REGIMEN
RLANOPAN 2
RLREGIMEN 3
RLPOLANT 4
RLTDOCUM 5
RLTIPRES 1 RESOL
RLNRORES 2
RLFECCON 1 RLFECCON
RLFECLIQ 1
RLCODDES 2
RLCODUSU 3
RLFRESREC 1 RLFRESREC
RLLIBTRI 1 RLLIBTRI
RLTIPDOC 2
RLFECLIQ 3
RLTIPDOC 1 RLTIPDOC_RLTIP
RLTIPLIQ 2
RLFECELI 3
RLFECCAN 4
RLTIPDOC 1 USUARIO2
RLLIBTRI 2
CLAVE PRIMARIA
RLNROLIQ
RLANO
RLADUANA
Estas son las sentencias que se ejecutan en la base de datos Oracle al
ejecutar la siguiente consulta desde la base de datos Informix :
SELECT * FROM vliquida.tari_liquida
WHERE rlfeccan >= 20040913
AND rlfeccan <= 20040913
AND rltipdoc = "4"
1. SELECT COUNT (DISTINCT rlfeccon)
FROM usamri00.tari_liquida
2. SELECT COUNT (DISTINCT rlfresrec)
FROM usamri00.tari_liquida
3. SELECT COUNT (*)
FROM "USAMRI00".tari_liquida
4. SELECT * FROM vliquida.tari_liquida
WHERE rlfeccan >= 20040913
AND rlfeccan <= 20040913
AND rltipdoc = "4"
Como se ve recien en la cuarta ejecución es que ejecuta el query en verdad,
pero antes ha ejecutado pasos innecesarios que lo que ocasionan es demora en
la entrega de datos y bajo rendimiento en la base de datos Oracle.
Si alguien de ustedes tiene experiencia en este tema, les agradecere me
envien algunas experiencias para solucionar este problema.
Saludos
José Luis Renteria P.
Soporte Técnico - SUNAT.
Hi José,
Sorry, but since I don't know Spanish, I used the Google Language
tools to translate your email text. I gather from your mail that you
are seeing an unnecessary query SELECT COUNT()... when you are running
a query against Oracle. This hits your performance. Please do two
things.....
1) Run the query directly via DBACCESS on Oracle without involving the
IDS engine in between. Please check the performance of the query. If
you are running a distributed query with IDS as the transaction
coordinator, remove the reference to IDS tables temporarily.
2) Please check the Gateway trace file to see whether the SELECT
COUNT() statement is something which the Gateway receives from IDS.
Thanks and Regards,
-Manas
On Tue, 26 Oct 2004 18:29:46 -0400 (EDT), Renteria Pi....
<jrenteri@sunat.gob.pe> wrote:
> Hola a Todos,
>
> Nosotros hemos adquirido un producto de IBM Informix "Gateway EGM
> 7.31 UC3", dicho producto lo utilizamos para conectarnos de una base de
> datos IDS 7.31 FD3 a una base de datos Oracle 8i, esta conexión se establece
> por ODBC, la arquitectura es la siguiente :
>
> 14 Servidores Informix
> ----------------------
> Servidores Modelo : HP ES45 / 4100
> Sistema Operativo : Tru64 5.1a
> Base de Datos : IDS 7.31 FD3
>
> 1 Servidor Oracle
> -----------------
> Servidor Modelo : Rics 6000
> Sistema Operativo : AIX 4.11
> Base de datos : Oracle 8i
> Gateway de Informix : Gateway EGM 7.31 UC3.
>
> El Gateway EGM esta instalado en el mismo servidor que tiene instalada la
> base
> de datos Oracle ( Servidor IBM ), a dicho servidor se conectan 14 servidores
> de
> base de datos INFORMIX vía ODBC por intermedio de vistas creadas en cada
> servidor de base de datos Informix apuntando hacia una tabla de una base de
> datos Oracle, el problema es que cada conexión a la base de datos Oracle
> antes de resolver el query (Vista) este empieza a ejecutar un "select
> distinc" por cada uno de los campos del índice de la tabla en Oracle, esto
> origina que el query demore en dar los resultados y lo peor es que al
> ejecutar los "select distinc" la base de datos realiza varios "sequential
> scans" quitando performance a la base de datos Oracle, les envió la vista en
> Informix y la estructura de la tabla en Oracle.
>
> Vista Informix
> --------------
>
> create view vliquida
> (rltipliq,rladuana,rlano,rlnroliq,rlfecliq,rlfeccan,rlmonpagso,rladuaso,rlan
> oaso,rlnumaso,rltipdoc,rllibtri)> as
> select x0.rltipliq ,x0.rladuana ,x0.rlano ,x0.rlnroliq
> ,x0.rlfecliq,x0.rlfeccan ,x0.rlmonpagso ,x0.rladuaso
> ,x0.rlanoaso,x0.rlnumaso,x0.rltipdoc ,x0.rllibtri
> from prad1@aix1_gateway:"USAMRI00".tari_liquida x0
> where (((x0.rltipliq = '0038' ) AND (x0.rlfeccan > 0. ) )AND
> (x0.rlfeceli = 0. ) )>
> Estructura de la tabla e indices en Oracle
> ------------------------------------------
>
> TABLA "TARI_LIQUIDA"
>
> RLADUANA NOT NULL VARCHAR2(3)
> RLANO NOT NULL VARCHAR2(2)
> RLNROLIQ NOT NULL VARCHAR2(6)
> RLCODDES VARCHAR2(4)
> RLCODUSU VARCHAR2(4)
> RLTIPLIQ VARCHAR2(4)
> RLTIPDOC VARCHAR2(1)
> RLLIBTRI VARCHAR2(11)
> RLCOMITE VARCHAR2(150)
> RLCODORI VARCHAR2(4)
> RLDIRECC VARCHAR2(60)
> RLCODCO1 VARCHAR2(3)
> RLCODCO2 VARCHAR2(3)
> RLCODCO3 VARCHAR2(3)
> RLDETALL VARCHAR2(65)
> RLDETAL2 VARCHAR2(65)
> RLDETAL3 VARCHAR2(65)
> RLDETAL4 VARCHAR2(65)
> RLDETAL5 VARCHAR2(65)
> RLCODMON VARCHAR2(1)
> RLTIPRES VARCHAR2(1)
> RLNRORES VARCHAR2(8)
> RLFECLIQ NUMBER(8)
> RLHORLIQ NUMBER(6)
> RLFECCAN NUMBER(8)
> RLHORCAN NUMBER(6)
> RLFECNOT NUMBER(8)
> RLFECNOTC NUMBER(8)
> RLHORNOT NUMBER(6)
> RLULTDIA NUMBER(8)
> RLULTDIAC NUMBER(8)
> RLSMONTOT NUMBER(13,2)
> RLDMONTOT NUMBER(13,2)
> RLMONRECAR NUMBER(13,2)
> RLMONINTER NUMBER(13,2)
> RLRECAADIC NUMBER(13,2)
> RLINTEFRAC NUMBER(13,2)
> RAZONELI VARCHAR2(45)
> RLMONPAGSO NUMBER(13,2)
> RLANOPAN VARCHAR2(2)
> RLPOLANT VARCHAR2(6)
> RLANOLAN VARCHAR2(2)
> RLLIQANT VARCHAR2(6)
> RLANOREC VARCHAR2(2)
> RLNROREC VARCHAR2(6)
> RLFECCOA NUMBER(8)
> RLFECRCL NUMBER(8)
> RLFECRCLC NUMBER(8)
> RLFECARE NUMBER(8)
> RLNOTIF VARCHAR2(1)
> RLTIPNOTC VARCHAR2(1)
> RLCLAPOL VARCHAR2(1)
> RLVENCIM NUMBER(8)
> RLACOGIM NUMBER(8)
> RLTIPNOT VARCHAR2(1)
> RLRESREC VARCHAR2(1)
> FILLER VARCHAR2(19)
> RLFECELI NUMBER(8)
> RLFECQUIEB NUMBER(8)
> RLTIPRESQ VARCHAR2(1)
> RLANORESQ VARCHAR2(4)
> RLNRORESQ NUMBER(6)
> RLTIPFRAC VARCHAR2(3)
> RLDOCASO VARCHAR2(2)
> RLANOEXPRE VARCHAR2(4)
> RLNROEXPRE NUMBER(6)
> RLFLPAC VARCHAR2(1)
> RLCOSTAS NUMBER(12,2)
> RLADUPOL VARCHAR2(3)
> RLREGIMEN VARCHAR2(2)
> RLSUFIJO VARCHAR2(2)
> RLTDOCUM VARCHAR2(2)
> RLDIGVER VARCHAR2(1)
> RLFECRES NUMBER(8)
> RLMANUCANC VARCHAR2(1)
> RLCODESP VARCHAR2(6)
> CDIGMOD VARCHAR2(7)
> FMOD NUMBER(8)
> RLTIPCAN NUMBER(2)
> RLFORMCAN VARCHAR2(1)
> RLBCOCAN VARCHAR2(3)
> RLDETAL6 VARCHAR2(65)
> RLDETAL7 VARCHAR2(65)
> RLDETAL8 VARCHAR2(65)
> RLAREA VARCHAR2(2)
> RLADUASO VARCHAR2(3)
> RLANOASO VARCHAR2(2)
> RLNUMASO VARCHAR2(6)
> RLTIPRESA VARCHAR2(2)
> RLFRESREC NUMBER(8)
> RLFECNOTO NUMBER(8)
> RLCHGEN VARCHAR2(1)
> TOT_DOLOLD NUMBER(13,2)
> FLAG VARCHAR2(1)
> LIQMODIF NUMBER(1)
> RLIMPO VARCHAR2(1)
> RLFECREL NUMBER(8)
> RLPOLLIB VARCHAR2(1)
> RLCERTINS VARCHAR2(16)
> RLFECREG NUMBER(8)
> RLFECCON NUMBER(8)
> RLREDMUL VARCHAR2(1)
> RLAREARES VARCHAR2(6)
> RLFECLEG NUMBER(8)
> RLCODEST VARCHAR2(1)
> RAZONREC VARCHAR2(45)
> RLEXCAGEN NOT NULL VARCHAR2(1)
>
> INDICES
>
> RLCODUSU 1 CODUSU_CODDES
> RLCODDES 2
> RLFECELI 3
> RLFECCAN 4
>
> RLFECCAN 1 FCAN
> RLADUANA 2
>
> RLFECLIQ 1 FLIQ
> RLADUANA 2
> RLANO 3
> RLNROLIQ 4
>
> RLFECNOT 1 FNOT
> RLADUANA 2
> RLANO 3
> RLNROLIQ 4
>
> RLADUASO 1 LIQUIDA
> RLANOASO 2
> RLNUMASO 3
>
> RLADUPOL 1 REGIMEN
> RLANOPAN 2
> RLREGIMEN 3
> RLPOLANT 4
> RLTDOCUM 5
>
> RLTIPRES 1 RESOL
> RLNRORES 2
>
> RLFECCON 1 RLFECCON
> RLFECLIQ 1
> RLCODDES 2
> RLCODUSU 3
>
> RLFRESREC 1 RLFRESREC
>
> RLLIBTRI 1 RLLIBTRI
> RLTIPDOC 2
> RLFECLIQ 3
>
> RLTIPDOC 1 RLTIPDOC_RLTIP
> RLTIPLIQ 2
> RLFECELI 3
> RLFECCAN 4
>
> RLTIPDOC 1 USUARIO2
> RLLIBTRI 2
>
> CLAVE PRIMARIA
>
> RLNROLIQ
> RLANO
> RLADUANA
>
> Estas son las sentencias que se ejecutan en la base de datos Oracle al
> ejecutar la siguiente consulta desde la base de datos Informix :
>
> SELECT * FROM vliquida.tari_liquida
> WHERE rlfeccan >= 20040913
> AND rlfeccan <= 20040913
> AND rltipdoc = "4">
> 1. SELECT COUNT (DISTINCT rlfeccon)
> FROM usamri00.tari_liquida
>
> 2. SELECT COUNT (DISTINCT rlfresrec)
> FROM usamri00.tari_liquida
>
> 3. SELECT COUNT (*)
> FROM "USAMRI00".tari_liquida
>
> 4. SELECT * FROM vliquida.tari_liquida
> WHERE rlfeccan >= 20040913
> AN