Query very slow
421036Dec 1 2004 — edited Dec 6 2004I have Oracle 9.2.0.5 and Solaris 5.8 and a Server with 4 processors, 2 GB RAM and RAID 1.
This is a Data warehouse system.
I use CBO optimizer.
I have a very slow query (the time consuming was 15 minutes)
I have:
Dim_Clientes: 1.200.000 records
Dim_Vehiculos: 1.500.000 records
Dim_Marcas: 100 records
Dim_Modelos: 1.000 records
I have indexes in all the join fields!!!
I analyze the tables and the indexes with GATHER_TABLE_STATS and GATHER_INDEX_STATS.
For example:
SYS.DBMS_STATS.GATHER_TABLE_STATS (
OwnName => 'SCHEMA_NAME'
,TabName => 'TABLE_NAME'
,Method_Opt => 'FOR ALL COLUMNS SIZE SKEWONLY '
,Degree => 4
,Cascade => FALSE
,No_Invalidate => FALSE);
SYS.DBMS_STATS.GATHER_INDEX_STATS (
OwnName => 'SCHEMA_NAME'
,IndName => 'INDEX_NAME'
,Degree => 4
,No_Invalidate => FALSE);
I delete the statistic and recreate it, but the query time is the same!
The query is:
SELECT dim_contacto_vehiculo.cod_cliente,
dim_contacto_vehiculo.nombre
|| ' '
|| dim_contacto_vehiculo.apellido_1
|| ' '
|| dim_contacto_vehiculo.apellido_2,
dim_contacto_vehiculo.cif_nif,
dim_contacto_vehiculo.tipo_via
|| ' '
|| dim_contacto_vehiculo.nombre_via
|| ', '
|| dim_contacto_vehiculo.numero_via
|| ' '
|| dim_contacto_vehiculo.complemento_domicilio,
dim_contacto_vehiculo.cod_postal, dim_contacto_vehiculo.localidad,
maestros_dwh.dim_vehiculos.bastidor,
maestros_dwh.dim_marcas.marca || ' '
|| maestros_dwh.dim_modelos.modelo
FROM maestros_dwh.dim_clientes dim_contacto_vehiculo,
maestros_dwh.dim_vehiculos,
maestros_dwh.dim_modelos,
maestros_dwh.dim_marcas
WHERE (dim_contacto_vehiculo.cod_cliente =
maestros_dwh.dim_vehiculos.cod_contacto
)
AND (maestros_dwh.dim_modelos.cod_modelo =
maestros_dwh.dim_vehiculos.cod_modelo
)
AND (maestros_dwh.dim_marcas.cod_marca =
maestros_dwh.dim_modelos.cod_marca
)
AND (dim_contacto_vehiculo.cod_cliente =
maestros_dwh.dim_vehiculos.cod_contacto
)
AND (maestros_dwh.dim_modelos.cod_modelo =
maestros_dwh.dim_vehiculos.cod_modelo
)
AND (maestros_dwh.dim_vehiculos.cod_marca IN (1, 2, 4, 253))
AND dim_contacto_vehiculo.tipo_persona = 'PERSONA'
AND (dim_contacto_vehiculo.cod_cliente =
maestros_dwh.dim_vehiculos.cod_contacto
)
GROUP BY dim_contacto_vehiculo.cod_cliente,
dim_contacto_vehiculo.nombre
|| ' '
|| dim_contacto_vehiculo.apellido_1
|| ' '
|| dim_contacto_vehiculo.apellido_2,
dim_contacto_vehiculo.cif_nif,
dim_contacto_vehiculo.tipo_via
|| ' '
|| dim_contacto_vehiculo.nombre_via
|| ', '
|| dim_contacto_vehiculo.numero_via
|| ' '
|| dim_contacto_vehiculo.complemento_domicilio,
dim_contacto_vehiculo.cod_postal,
dim_contacto_vehiculo.localidad,
maestros_dwh.dim_vehiculos.bastidor,
maestros_dwh.dim_marcas.marca || ' '
|| maestros_dwh.dim_modelos.modelo
HAVING COUNT (DISTINCT (maestros_dwh.dim_vehiculos.cod_vehiculo)) > 5
THE EXECUTION PLAN IS:
Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop
SELECT STATEMENT Optimizer Mode=CHOOSE 55 K 82211
FILTER
SORT GROUP BY 55 K 8 M 82211
NESTED LOOPS 1 M 163 M 8585
NESTED LOOPS 1 M 149 M 8585
HASH JOIN 1 M 164 M 8585
TABLE ACCESS FULL MAESTROS_DWH.DIM_VEHICULOS 1 M 51 M 1646
TABLE ACCESS FULL MAESTROS_DWH.DIM_CLIENTES 1 M 83 M 977
TABLE ACCESS BY INDEX ROWID MAESTROS_DWH.DIM_MODELOS 1 17
INDEX UNIQUE SCAN MAESTROS_DWH.PK_DIM_MODELOS 1
TABLE ACCESS BY INDEX ROWID MAESTROS_DWH.DIM_MARCAS 1 13
INDEX UNIQUE SCAN MAESTROS_DWH.PK_DIM_MARCAS 1
I need to accelerate it, please!!!!!!
Whatâs your recommendation to accelerate it?
Thanks very much!!!