Hola Mariano !

Yo antes de esta auditoría nunca me había parado a pensarlo, ni lo había visto 
documentado. 

Cuando llegué al entorno los desarrolladores habían detectado que había 
una consulta que, cuando pasaba determinada cantidad de registros (800.000 si 
no recuerdo mal) quedaba ejecutándose durante horas con muy poca utilización de 
recursos en el servidor (coloquialmente se moría :) ). 

La sentencia que se moría era esta:
INSERTINTO #la_tabla_temporal 
SELECT campos....   
  FROM tabla_externa 
 WHERE EXISTS(
      SELECT #otra_tabla_temporal.uncampo                  
        FROM #otra_tabla_temporal                         WHERE 
#otra_tabla_temporal.id = tabla_externa.id)

Les pedí a los desarroladores que eviten las tablas temprales usando estas 
recomentaciones: 

http://www.sql-server-performance.com/articles/per/derived_temp_tables_p1.aspx
http://www.sql-server-performance.com/articles/per/derived_temp_tables_p2.aspx

Y conseguimos un stored que (si bien consume sus recursos) no presenta el 
comportamiento de "quedarse pensando" 1 hora.

Tenes razón respecto a la nomenclatura, en Oracle les llaman in-line views o 
queries, aca son Tablas Derivadas, básicamente un select de un select:

SELECT * FROM (SELECT * FROM categories) dt_categories



Un saludo !!!



Mariano Minoli



________________________________
From: Jose Mariano Alvarez <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Sent: Friday, November 14, 2008 4:22:18 AM
Subject: [dbms] Tablas temporales


Mariano:

No se que cambios hicieron exactamente y si te referis a una tabla derivada.

Es casi exactamente lo mismo una tabla derivada que una tabla temporal.
Por otro lado dependiendo del caso (#registros y uso de los mismos) una tabla 
temporal puede acelerar las cosas o enlentecerlas respecto de otras 
alternativas.

Una tabla temporal puede tener indices por ejemplo.

Si remplazaros todo el proceso (multiples pasadas sobre la temporal) por una 
query es otra cosas

Saludos

-------------------------------- 
Atte.
Ing. Jose Mariano Alvarez
SQL Total Consulting



2008/11/12 Mariano Minoli <[EMAIL PROTECTED]>

Hola Sonia, 

Solo un comentario respecto a las tablas temporales: cuidado con la cantidad de 
datos que cargas allí.

Hace poco hicimos una auditoría de performance en un sistema que cargaba  + de 
900.000 de registros en una tabla temporal y luego comenzaba a hacer consultas 
sobre la misma. El servidor se moría. Reemplazamos la tabla temporal por un 
inline query y quedo funcionando bien.

Un saludo,


Mariano Minoli



________________________________
From: silvana quiroga <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Sent: Wednesday, November 12, 2008 2:33:09 PM
Subject: [dbms] Tablas temporales


No coinciden. Se crea una por cada conexión. Si tu tabla se llama 
#table, fijate que en las tablas del sistema te crea la tabla #table_00000..., 
#table_00001, etc. es decir, le agrega un número al final para diferenciarlas.


2008/11/12 Sonia Perez Peña <[EMAIL PROTECTED]>

 
 
-----Mensaje original-----
De: Sonia Perez Peña 
Enviado el: miércoles, 12 de noviembre de 2008 7:54
Para: '[email protected]'
Asunto: Tablas temporales
 
Hola amigos, que riesgos puedo tener al utilizar tablas temporales #Table, se 
que estas se crean en la TEMPDB, por la que tengo que competir con el espacio 
de memoria de la TEMPDB., fuera de esto que otra cosa, se que cuando un usuario 
se desconecta, pero mi preocupación es cuando n usuarios, pueden coincidir con 
la construcción de la misma. ¿????
 
 
Gracias.


      

Responder a