Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Query very slow

421036Dec 1 2004 — edited Dec 6 2004
I 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!!!
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jan 3 2005
Added on Dec 1 2004
11 comments
266 views