Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¿Unir varios disparadores en uno sólo mejora el desempeño de las operaciones?

Hola amigos.

En Firebird 1.5 tengo una tabla con alrededor de 50 campos, 20 disparadores (la mayoría Before / After Insert y Update) y 600 mil registros. Cada mes debe realizarse una operación sobre la misma que agrega y / o modifica unos 20 mil registros. Dependiendo de varios factores, la operación puede durar desde unos minutos hasta varias horas (conlleva muchos cálculos y validaciones y no todo se hace en la base de datos). Tiempos que son aceptables, pero que he conseguido reducirlos retocando varias partes de la aplicación y de la base de datos. Durante esta tarea se me ocurrió la idea de que, probablemente, si uniera varios de esos disparadores en uno sólo el proceso podría demorar un poco menos.

Mi duda concreta y la razón por la cual inicio este hilo es preguntarles si, en su experiencia o conocimiento de Firebird u otras bases de datos, tiene algún beneficio de velocidad significativo sustituir, digamos, varios disparadores Before Insert de una tabla como esta por un sólo disparador Before Insert que haga las mismas tareas. O si, por el contrario, el procesamiento se volvería más lento.

No quiero comenzar a modificar los disparadores de la tabla sin antes tener la certeza de si sería una buena idea. Y hacer pruebas con una tabla o base de datos paralela me da dolor de espalda apenas pensarlo (sí que se vuelve uno flojo con los años ).

Si alguien de Club Delphi ya ha pasado por experimentar de esa manera con los disparadores, bienvenido sea su testimonio. Mientras voy a seguir con otras cosas de la chamba.

De antemano gracias.
Responder Con Cita
  #2  
Antiguo 21-03-2013
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
No he tenido la dicha de pasar por la experiencia que comentas Al pero me llama la atención tu duda.
Creo, en mi más humilde entender, que quizá sea posible (y hasta mejor) directamente definir un procedimiento almacenado. Pregunta: ¿Es necesario que tales acciones se lleven a cabo ante cada before/after delete/insert/update?
Quizá se mejore las cosas si en lugar de estar disparando una y otra vez por cada registro, se manda a ejecutar un procedimiento almacenado que tome estas acciones y las "agrupe" en una misma rutina. Como si fuera un proceso que se dispara por lotes y a ciertos intervalos regulares.

Como en muchas cosas, depende, depende... A veces es posible optar por un procedimiento almacenado, en otras la más viable pasa por medio de disparadores.

No es pecado que un triggers de esos que tienes invoque y delege el trabajo en un procedimiento almacenado

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 21-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.096
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mi experiencia en casos similares es que la diferencia de tiempo no se nota apenas, pero eso sí, usando varios por separado ( ... position 0, ... position 1, etc.) luego es más cómodo e intuitivo el mantenimiento de los mismos.
Aunque no sé qué tipo de procesos realizas, me ha llamado mucho la atención de que tarde "entre unos minutos y varias horas" porque no me he encontrado nunca ningún proceso que tarde más de unos segundos (en BD de muchos gigas y con tablas de decenas de millones de registros: históricos, logs, etc. )
Supongo que harás algún tipo de proceso que nunca me ha tocado hacer.
Responder Con Cita
  #4  
Antiguo 21-03-2013
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 22
lbuelvas Va por buen camino
Hola, creo que la demora es debido al volúmen de registros en una sola operación, sin embargo revisate tal vez este por algún lado alguna o algunas consultas internas que hacen los triggers que generen planes tipo NATURAL (en los que se recorre toda una tabla) y estén afectando el rendimiento y se hacen visibles por el volúmen de datos.

De otro lado si estas mandando los datos directamente desde el lado cliente podrias cambiarlo por hacer el montaje a una tabla temporal de firebird, hacerle una preparación a esos datos para facilitarle la vida a los triggers y utilizar un procedimiento almacenado para efectuar el cargue de datos.
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #5  
Antiguo 21-03-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Pues lo 1ero que se hace (en vez de programar al estilo vudu) es determinar cual es el proceso mas lento, y *por que*.
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 21-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Mi experiencia en casos similares es que la diferencia de tiempo no se nota apenas [...]
Viniendo de Casimiro, creo que me quedaré con esta respuesta. Dejaré los disparadores individuales.

Cita:
Empezado por Casimiro Notevi Ver Mensaje
[...] me ha llamado mucho la atención de que tarde "entre unos minutos y varias horas" [...]
Bueno, como dije, eso es dependiendo de varios factores, y uno de esos factores es que el usuario elija sólo un sector de la ciudad o bien toda la ciudad. Y como ya había mencionado, no todo el proceso se realiza sobre la base de datos. Perdón por no haber sido más claro.

Reitero, conseguí reducir los tiempos a algo que se considera aceptable, pero tenía esa duda sobre los disparadores.

De todas formas el hilo queda abierto al tema concreto que se anuncia en el título, gracias.
Responder Con Cita
  #7  
Antiguo 22-03-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
hola Al,
salvando las distancias, puede que no esté de más que eches un vistazo a este link

Cita:
The examples below are the results of months of efforts trying to perform a large financial analysis on a large database (> 4Gb) within reasonable timings. The real breakthrough came with the introduction of the RDB$DB_KEY. In addition to enormous speed increase, it minimized the need for indexing, thus making both development and implementation both safer and easier.
http://web.archive.org/web/200901030...of_the_rdb.htm

http://web.archive.org/web/200901040...umentation.htm

Igual no tiene demasiado que ver con tu problema, pero te puede dar alguna pista.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 22-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Gracias Javier, esos artículos se ven sumamente interesantes.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
unir varios archivos Enan0 Varios 4 08-04-2012 15:21:29
Hola, Necesito un programa que me permita unir varios instaladores en uno solo diegopov Varios 9 08-03-2010 18:09:52
Unir varios archivos pdf en delphi richy08 Varios 5 02-05-2008 21:59:46
Como unir un tMainMenu con varios. ErenioDhG Internet 4 14-11-2006 21:23:34
unir varios report en uno solo Eusebio Impresión 0 02-02-2006 12:37:48


La franja horaria es GMT +2. Ahora son las 20:01:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi