2012-08-30 3 views
1

내가 잘못하면 나를 교정하십시오.SQL 서버에서 트리거가 내부적으로 작동하는 방식

내가 트리거에 대해 알고있는 것은 이벤트 (삽입, 업데이트, 삭제)에 의해 트리거된다는 것입니다. 그래서 우리는 저장 프로 시저 등을 트리거에서 실행할 수 있습니다.

사용자가 상호 작용하는 쿼리가 매우 작고이 "기타"긴 시간을 차지하는이 응용 프로그램은 내부적으로 별도의 작업으로 서버에서 처리되므로 응용 프로그램에 좋은 응답을 제공합니다.

그러나 트리거가 서버 내부에서 어떻게 처리되는지는 잘 모릅니다. 제가 정확히 알고 싶은 것은 아래 주어진 시나리오에서 일어날 일입니다.

트리거 후 삽입하십시오. 그리고 트리거는 더 긴 저장 프로 시저를 실행합니다. 방아쇠 중간에 다른 삽입물이있을 수 있습니다. 제가 알고 싶은 것은 두 번째 방아쇠가 어떻게 될지입니다. 가능한 경우 두 번째 트리거가 자체를 무시하도록 만들 수 있습니다.

+1

트리거는 이벤트에 의해 트리거 된 다음 실행됩니다. 트리거시기 및 빈도를 제어 할 수 없기 때문에 이러한 트리거의 처리를 ** 최소한으로 유지해야합니다. ** - 항상 최대로 - 다른 테이블 ("감사"테이블)에 항목을 만들려고합니다. 또는 "마커"행을 "명령"테이블에 넣을 수도 있습니다. 그러나 저장 프로 시저 등을 실행하는 정보의 실제 처리는 외부 작업에 맡겨야합니다. ** 트리거에서 광범위한 처리를 수행하지 마십시오! ** 이렇게하면 모든 성능이 안정적으로 유지됩니다. –

답변

1

marc_s가 정확한 답변을 제공했습니다. 나는 그것을 완전을 기하기 위해 복사 할 것이다. 당신이 비동기 기능은 SQL 브로커 implimenation 갈 수 있도록하려면

트리거는

동 기적.

트리거는 이벤트에 의해 트리거되고 그 다음에 실행됩니다. 트리거되는 시간과 빈도를 제어 할 수 없기 때문에 이러한 트리거의 처리를 절대 최소로 유지해야합니다. 항상 다른 테이블 ("감사"테이블)에 항목을 만들거나 가능한 한 "마커"행을 "명령"테이블에 추가하십시오. 그러나 저장 프로 시저 등을 실행하는 해당 정보의 실제 처리는 외부 작업으로 남겨 두어야합니다. 트리거에서 광범위한 처리를 수행하지 마십시오! 이렇게하면 모든 성능 및 응답 성을 안정적으로 제거 할 수 있습니다.

관련 문제