Carga de tablas de la base de datos lenta

Redpaks
03 de Febrero del 2006
Hola, a ver si alguien me puede ayudar. Soy adeministrador de una BD Oracle 8.1.6 y cuando ejecuto esta instruccion:

SELECT sys.all_cons_columns.column_name, sys.all_constraints.constraint_name
FROM sys.all_constraints, sys.all_cons_columns
WHERE sys.all_constraints.constraint_type = 'P'
AND sys.all_constraints.table_name = 'PEDIDOS'
AND sys.all_constraints.owner = 'PEPE'
AND sys.all_constraints.constraint_name =
sys.all_cons_columns.constraint_name
AND sys.all_constraints.table_name = sys.all_cons_columns.table_name
AND sys.all_constraints.owner = sys.all_cons_columns.owner
ORDER BY sys.all_constraints.constraint_name, sys.all_cons_columns.position;

Me tarda 2 o 4 minutos en ejecutarse.
¿Alguien sabe que me puede pasar?

Muchas gracias y saludos.

chemian
03 de Febrero del 2006
porque no sacas el plan de ejecucion y nos cuentas que te da?

a
03 de Febrero del 2006
antes de nada, cambia tu select por esta:
SELECT l.column_name, n.constraint_name, l.position
FROM sys.all_constraints n, sys.all_cons_columns l
WHERE n.constraint_type = 'P'
AND n.table_name = 'PEDIDOS'
AND n.owner = 'PEPE'
AND n.constraint_name =
l.constraint_name
AND n.table_name = l.table_name
AND n.owner = l.owner
ORDER BY 2, 3;

Redpaks
03 de Febrero del 2006
La select me viene dada y no la puedo cambiar.

Necesito optimizar esta.

Muchisimas gracias de todos modos.

chemian
03 de Febrero del 2006
pero tampoco puedes sacar su plan de ejecucion?

sacalo y muestranoslo, asi podremos empezar a ayudarte.

Redpaks
03 de Febrero del 2006
1 SELECT STATEMENT Cost = 1883587
2 SORT ORDER BY Cost = 1
3 FILTER Cost = 1
4 NESTED LOOPS OUTER Cost = 1
5 NESTED LOOPS OUTER Cost = 1
6 NESTED LOOPS OUTER Cost = 1
7 NESTED LOOPS Cost = 1
8 NESTED LOOPS Cost = 1
9 NESTED LOOPS Cost = 1
10 NESTED LOOPS Cost = 1
11 NESTED LOOPS Cost = 1
12 NESTED LOOPS Cost = 1
13 NESTED LOOPS Cost = 1
14 NESTED LOOPS Cost = 1
15 NESTED LOOPS Cost = 1
16 TABLE ACCESS USER$ BY INDEX ROWID Cost = 1
17 INDEX I_USER1 UNIQUE SCAN Cost = 1
16 TABLE ACCESS USER$ BY INDEX ROWID Cost = 2
17 INDEX I_USER1 UNIQUE SCAN Cost = 1
15 TABLE ACCESS CDEF$ FULL Cost = 2
14 TABLE ACCESS CON$ BY INDEX ROWID Cost = 2
15 INDEX I_CON2 UNIQUE SCAN Cost = 1
13 TABLE ACCESS CON$ BY INDEX ROWID Cost = 2
14 INDEX I_CON1 UNIQUE SCAN Cost = 1
12 TABLE ACCESS CDEF$ BY INDEX ROWID Cost = 2
13 INDEX I_CDEF1 UNIQUE SCAN Cost = 1
11 TABLE ACCESS OBJ$ BY INDEX ROWID Cost = 2
12 INDEX I_OBJ1 UNIQUE SCAN Cost = 1
10 TABLE ACCESS CCOL$ BY INDEX ROWID Cost = 2
11 INDEX I_CCOL1 RANGE SCAN Cost = 1
9 TABLE ACCESS COL$ CLUSTER Cost = 2
10 INDEX I_OBJ# UNIQUE SCAN Cost = 1
8 TABLE ACCESS OBJ$ BY INDEX ROWID Cost = 2
9 INDEX I_OBJ1 UNIQUE SCAN Cost = 1
7 TABLE ACCESS CON$ BY INDEX ROWID Cost = 2
8 INDEX I_CON2 UNIQUE SCAN Cost = 1
6 TABLE ACCESS USER$ CLUSTER Cost = 2
7 INDEX I_USER# UNIQUE SCAN Cost = 1
5 TABLE ACCESS ATTRCOL$ CLUSTER Cost = 2
4 NESTED LOOPS Cost = 2
5 FIXED TABLE X$KZSRO FULL Cost = 1
5 INDEX I_OBJAUTH2 RANGE SCAN Cost = 2
4 FIXED TABLE X$KZSPR FULL Cost = 3
4 NESTED LOOPS Cost = 4
5 FIXED TABLE X$KZSRO FULL Cost = 1
5 INDEX I_OBJAUTH2 RANGE SCAN Cost = 2
4 FIXED TABLE X$KZSPR FULL Cost = 5


Este es el plan de ejecucion. Sobre que la select me viene dada, matizar que yo soy el dba, pero que esta select la realiza un programa desarrollado por otra empresa y me toca optimizarla.

Saludos y gracias

Jor-El
03 de Febrero del 2006
Correcto.

Pues entonces como DBA que eres aclarame como se puede optimizar un select sin modificarla.

Así añado un poco de culturilla a mis escasos conocimientos.

Esto no te lo digo por chincharte, sino por aprender cosas nuevas, porque nunca se sabe.......

Saludos

Jor-El
03 de Febrero del 2006
De todas maneras y como curiosidad he copiado-pegado tu select en mi plus y mira, me ha tardado 0.2 segundos :

SQL*Plus: Release 8.0.5.0.0 - Production on Jue Feb 2 16:31:51 2006

(c) Copyright 1999 Oracle Corporation. All rights reserved.


Connected to:
Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.4.0 - 64bit Production

SQL> SET TIMING ON
SQL> SELECT COUNT(*)
2 FROM sys.all_constraints, sys.all_cons_columns
3 WHERE sys.all_constraints.constraint_type = 'P'
4 AND sys.all_constraints.table_name = 'XXXXXXX'
5 AND sys.all_constraints.owner = 'XXXXXXXXXXXXX'
6 AND sys.all_constraints.constraint_name =
7 sys.all_cons_columns.constraint_name
8 AND sys.all_constraints.table_name = sys.all_cons_columns.table_name
9 AND sys.all_constraints.owner = sys.all_cons_columns.owner
10 ORDER BY sys.all_constraints.constraint_name, sys.all_cons_columns.position;

COUNT(*)
---------
1

real: 172
SQL>

¿ Esos 3 minutos te esta tardando con el sql plus o con la aplicacion ?

Si esa burrada te tarda en el plus, tienes un problema.
Si es con la aplicación lo tiene vuestro proveedor.

Jor-El
03 de Febrero del 2006
Hola ¿ que es eso de que la select te viene dada y no puedes cambiarla ?.

Tu tienes que retornar dos valores, la manera en que los saques es problema tuyo siempre y cuando sea una extracción rapida y los datos que saque sean los correctos.

Pero un DBA debería conocer bien todas estas historias así como las tablas / vistas etc etc etc de SYS ¿no ?