co'mo opera un trigger ??

11/08/2009 - 23:42 por Ivan Rico | Informe spam
hola a todos,

quisiera saber como opera un trigger, lo que pasa es que tengo un SP que
hace varios calculos y al final hace inserts a una tabla, esta tabla tiene
un trigger para que se calculen otras cosas, la pregunta mas concretamente
es:
cuando se ejecuta el trigger??
cuando finaliza el SP
o hace la insercio'n se dispara y luego continua con el SP en marcha.
o ninguna de las anteriores??

alguien puede explicarme un poco??

saludos

Preguntas similare

Leer las respuestas

#1 Rubén Garrigós
11/08/2009 - 23:57 | Informe spam
Hola Iván,

El trigger se ejecutará en el momento que se realicen los inserts. Si
los inserts se hacen al final de tu SP se ejecutará antes de finalizar
éste justo tras la inserción. Esto es así en la mayoría de casos pero
puedes tener también triggers que sustituyan la propia operación DML
(triggers INSTEAD OF), triggers recursivos, etc.

Ten en cuenta también que la ejecución del trigger se realiza una vez
por cada operación DML, independientemente del número de filas que se
vean afectadas. Básicamente con esto quiero decir que el procesamiento
no es fila a fila y si tienes un trigger update y actualizas 20 filas el
trigger se ejecutará una única vez.


Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba


Ivan Rico escribió:
hola a todos,

quisiera saber como opera un trigger, lo que pasa es que tengo un SP que
hace varios calculos y al final hace inserts a una tabla, esta tabla tiene
un trigger para que se calculen otras cosas, la pregunta mas concretamente
es:
cuando se ejecuta el trigger??
cuando finaliza el SP
o hace la insercio'n se dispara y luego continua con el SP en marcha.
o ninguna de las anteriores??

alguien puede explicarme un poco??

saludos


Respuesta Responder a este mensaje
#2 Ivan Rico
12/08/2009 - 01:07 | Informe spam
si el SP lo invoco desde un JOB afecta en desempen~o

contare lo que hace el SP invocado desde el JOB
TABLA1 << es como una tabla con datos temporales
TABLA2 << Esta tabla tiene el trigger que menciono
TABLA3 << a veces es afectada segun el valor de BANDERA2

un sistema llena una tabla (TABLA1) con un campo Bandera = 1
el SP hace un select a la TABLA1 where Bandera=1 y la inserta en TABLA2 <<<
aqui esta el trigger [1]
hace update a la Bandera de la TABLA1 where Bandera=1 para seguir con otras
ondas.

[1] cuando otro de los campos digamos BANDERA2 de la TABLA2 tiene el valor
de 9 el trigger debe ejecutar un insert en TABLA3
entoces viendo que la TABLA1 casi siempre anda con 300 o 400 registros
cuando se ejecuta el JOB, y cuando BANDERA2 = 9 efectivamente hace el
insert, pero tarda 1 minuto en hacer el insert en la TABLA3

Por eso es mi pregunta sobre a que tiempos se ejecutan los trigger

alguna idea para hacer un debug mas eficiente??


"Rubén Garrigós" escribió en el mensaje
news:%
Hola Iván,

El trigger se ejecutará en el momento que se realicen los inserts. Si los
inserts se hacen al final de tu SP se ejecutará antes de finalizar éste
justo tras la inserción. Esto es así en la mayoría de casos pero puedes
tener también triggers que sustituyan la propia operación DML (triggers
INSTEAD OF), triggers recursivos, etc.

Ten en cuenta también que la ejecución del trigger se realiza una vez por
cada operación DML, independientemente del número de filas que se vean
afectadas. Básicamente con esto quiero decir que el procesamiento no es
fila a fila y si tienes un trigger update y actualizas 20 filas el trigger
se ejecutará una única vez.


Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba


Ivan Rico escribió:
hola a todos,

quisiera saber como opera un trigger, lo que pasa es que tengo un SP que
hace varios calculos y al final hace inserts a una tabla, esta tabla
tiene un trigger para que se calculen otras cosas, la pregunta mas
concretamente es:
cuando se ejecuta el trigger??
cuando finaliza el SP
o hace la insercio'n se dispara y luego continua con el SP en marcha.
o ninguna de las anteriores??

alguien puede explicarme un poco??

saludos
Respuesta Responder a este mensaje
#3 Rubén Garrigós
12/08/2009 - 02:51 | Informe spam
Hola Iván,

El que ejecutes un SP desde un JOB no debería tener ningún impacto
negativo en el rendimiento.

El tiempo en el que se ejecutan los triggers es normalmente justo
después de la operación (como ya te comenté) participando en la misma
transacción implícita de la operación DML.

Te recomiendo que testees el rendimiento paso a paso pues, salvo que la
lógica de los triggers sea muy muy muy compleja, no debería tardarte 1
minuto en ejecutar un insert de 300-400 registros. Es posible que tengas
problemas con el rendimiento del log de transacciones en ese caso.
Identifica exactamente que instrucción (INSERT, UPDATE, etc.) te da
problemas de lentitud y si no consigues solucionarlo tu mismo
reindexando, añadiendo índices apropiados, etc. genera un script que nos
permita reproducir el problema para ver si podemos ayudarte.

Ten en cuenta que aunque describas el proceso es complicado que podamos
probarlo o averiguar cual es el problema sin tener la definición y datos
de las tablas 1, 2 y 3, el código del SP, del trigger, etc.


Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba


Ivan Rico escribió:
si el SP lo invoco desde un JOB afecta en desempen~o

contare lo que hace el SP invocado desde el JOB
TABLA1 << es como una tabla con datos temporales
TABLA2 << Esta tabla tiene el trigger que menciono
TABLA3 << a veces es afectada segun el valor de BANDERA2

un sistema llena una tabla (TABLA1) con un campo Bandera = 1
el SP hace un select a la TABLA1 where Bandera=1 y la inserta en TABLA2 <<<
aqui esta el trigger [1]
hace update a la Bandera de la TABLA1 where Bandera=1 para seguir con otras
ondas.

[1] cuando otro de los campos digamos BANDERA2 de la TABLA2 tiene el valor
de 9 el trigger debe ejecutar un insert en TABLA3
entoces viendo que la TABLA1 casi siempre anda con 300 o 400 registros
cuando se ejecuta el JOB, y cuando BANDERA2 = 9 efectivamente hace el
insert, pero tarda 1 minuto en hacer el insert en la TABLA3

Por eso es mi pregunta sobre a que tiempos se ejecutan los trigger

alguna idea para hacer un debug mas eficiente??


"Rubén Garrigós" escribió en el mensaje
news:%
Hola Iván,

El trigger se ejecutará en el momento que se realicen los inserts. Si los
inserts se hacen al final de tu SP se ejecutará antes de finalizar éste
justo tras la inserción. Esto es así en la mayoría de casos pero puedes
tener también triggers que sustituyan la propia operación DML (triggers
INSTEAD OF), triggers recursivos, etc.

Ten en cuenta también que la ejecución del trigger se realiza una vez por
cada operación DML, independientemente del número de filas que se vean
afectadas. Básicamente con esto quiero decir que el procesamiento no es
fila a fila y si tienes un trigger update y actualizas 20 filas el trigger
se ejecutará una única vez.


Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba


Ivan Rico escribió:
hola a todos,

quisiera saber como opera un trigger, lo que pasa es que tengo un SP que
hace varios calculos y al final hace inserts a una tabla, esta tabla
tiene un trigger para que se calculen otras cosas, la pregunta mas
concretamente es:
cuando se ejecuta el trigger??
cuando finaliza el SP
o hace la insercio'n se dispara y luego continua con el SP en marcha.
o ninguna de las anteriores??

alguien puede explicarme un poco??

saludos






Respuesta Responder a este mensaje
#4 Ivan Rico
12/08/2009 - 17:01 | Informe spam
hare unas pruebas en base los que me has comentado, cualquier novedad se los
hare saber.

gracias


"Rubén Garrigós" escribió en el mensaje
news:
Hola Iván,

El que ejecutes un SP desde un JOB no debería tener ningún impacto
negativo en el rendimiento.

El tiempo en el que se ejecutan los triggers es normalmente justo después
de la operación (como ya te comenté) participando en la misma transacción
implícita de la operación DML.

Te recomiendo que testees el rendimiento paso a paso pues, salvo que la
lógica de los triggers sea muy muy muy compleja, no debería tardarte 1
minuto en ejecutar un insert de 300-400 registros. Es posible que tengas
problemas con el rendimiento del log de transacciones en ese caso.
Identifica exactamente que instrucción (INSERT, UPDATE, etc.) te da
problemas de lentitud y si no consigues solucionarlo tu mismo reindexando,
añadiendo índices apropiados, etc. genera un script que nos permita
reproducir el problema para ver si podemos ayudarte.

Ten en cuenta que aunque describas el proceso es complicado que podamos
probarlo o averiguar cual es el problema sin tener la definición y datos
de las tablas 1, 2 y 3, el código del SP, del trigger, etc.


Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba


Ivan Rico escribió:
si el SP lo invoco desde un JOB afecta en desempen~o

contare lo que hace el SP invocado desde el JOB
TABLA1 << es como una tabla con datos temporales
TABLA2 << Esta tabla tiene el trigger que menciono
TABLA3 << a veces es afectada segun el valor de BANDERA2

un sistema llena una tabla (TABLA1) con un campo Bandera = 1
el SP hace un select a la TABLA1 where Bandera=1 y la inserta en TABLA2
<<< aqui esta el trigger [1]
hace update a la Bandera de la TABLA1 where Bandera=1 para seguir con
otras ondas.

[1] cuando otro de los campos digamos BANDERA2 de la TABLA2 tiene el
valor de 9 el trigger debe ejecutar un insert en TABLA3
entoces viendo que la TABLA1 casi siempre anda con 300 o 400 registros
cuando se ejecuta el JOB, y cuando BANDERA2 = 9 efectivamente hace el
insert, pero tarda 1 minuto en hacer el insert en la TABLA3

Por eso es mi pregunta sobre a que tiempos se ejecutan los trigger

alguna idea para hacer un debug mas eficiente??


"Rubén Garrigós" escribió en el mensaje
news:%
Hola Iván,

El trigger se ejecutará en el momento que se realicen los inserts. Si
los inserts se hacen al final de tu SP se ejecutará antes de finalizar
éste justo tras la inserción. Esto es así en la mayoría de casos pero
puedes tener también triggers que sustituyan la propia operación DML
(triggers INSTEAD OF), triggers recursivos, etc.

Ten en cuenta también que la ejecución del trigger se realiza una vez
por cada operación DML, independientemente del número de filas que se
vean afectadas. Básicamente con esto quiero decir que el procesamiento
no es fila a fila y si tienes un trigger update y actualizas 20 filas el
trigger se ejecutará una única vez.


Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba


Ivan Rico escribió:
hola a todos,

quisiera saber como opera un trigger, lo que pasa es que tengo un SP
que hace varios calculos y al final hace inserts a una tabla, esta
tabla tiene un trigger para que se calculen otras cosas, la pregunta
mas concretamente es:
cuando se ejecuta el trigger??
cuando finaliza el SP
o hace la insercio'n se dispara y luego continua con el SP en marcha.
o ninguna de las anteriores??

alguien puede explicarme un poco??

saludos





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida