Carga de tablas de la base de datos lenta
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.
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.
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;
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;
La select me viene dada y no la puedo cambiar.
Necesito optimizar esta.
Muchisimas gracias de todos modos.
Necesito optimizar esta.
Muchisimas gracias de todos modos.
pero tampoco puedes sacar su plan de ejecucion?
sacalo y muestranoslo, asi podremos empezar a ayudarte.
sacalo y muestranoslo, asi podremos empezar a ayudarte.
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
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
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
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
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.
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.
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 ?
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 ?
