트리거가 SQL Server 인스턴스의 성능에 해를 끼치는 것으로 확인되면 다른 솔루션으로 대체해야 합니다. 예를 들어 트리거를 사용하여 엔터티 무결성을 적용하는 대신 기본 KEY 및 고유 제약 조건을 사용하여 가장 낮은 수준에서 적용해야 합니다. CHECK 제약 조건을 통해 적용해야 하는 도메인 무결성및 외래 KEY 제약 조건을 통해 적용해야 하는 참조 무결성에도 동일하게 적용됩니다. 특정 제약 조건에서 지원되는 기능이 응용 프로그램 요구 사항을 충족할 수 없는 경우에만 DML 트리거를 사용할 수 있습니다. 두 번째 트리거는 상위 테이블과 대체 테이블로 변경되는 로그의 업데이트 작업을 방지하는 데 사용됩니다. 이 트리거는 다음과 같이 만들어집니다: 트리거는 트랜잭션에서 작동(암시적 또는 기타)에서 작동하며 열려 있는 동안 리소스를 잠급니다. 트랜잭션이 확인되거나(COMMIT) 또는 거부(롤백)가 완료될 때까지 잠금이 유지됩니다. 트리거가 오래 실행될수록 다른 프로세스가 차단될 확률이 높아지어집니다. 따라서 가능하면 기간을 줄이는 트리거를 작성합니다. 기간을 단축하는 한 가지 방법은 DML 문이 0 행을 변경할 때 트리거를 해제하는 것입니다. SQL Server 트리거의 모든 장점을 사용하면 트리거가 데이터베이스의 복잡성을 증가시게 됩니다. 트리거가 잘못 설계되었거나 과도하게 사용되면 트랜잭션 수명을 연장하여 트랜잭션 수명을 연장하고 INSERT, UPDATE 또는 DELETE 작업이 수행될 때마다 실행으로 인해 시스템에 추가 오버헤드가 발생하여 차단된 세션과 같은 주요 성능 문제가 발생할 수 있습니다. 데이터 손실 문제가 발생할 수 있습니다.

또한 특히 개발자와 응용 프로그램에 보이지 않기 때문에 데이터베이스 트리거에 대한 설명서가 없는 경우 데이터베이스 트리거를 보고 추적하는 것이 쉽지 않습니다. 복제 에이전트가 트리거에 관련된 테이블을 수정할 때 트리거를 실행해서는 안 됩니다. 두 쿼리를 실행한 후 생성된 실행 계획에서 트리거 메서드 가중치가 약(21%+36%)임을 알 수 있습니다. 출력 메서드 가중치의 57%는 아래 실행 계획 비교와 같이 작은 가중치 차이로 약 43%입니다. 트리거링 작업의 대상인 테이블 또는 뷰에 대해 사용됩니다. SQL에서 삽입, 업데이트 및 DELETE에 사용하는 세 가지 작업 쿼리 유형이 있습니다. 따라서 트리거와 하이브리드의 세 가지 유형이 혼합및 이벤트와 타이밍을 일치시키는 데서 비롯됩니다. 기본적으로 트리거는 두 가지 주요 유형으로 분류됩니다: SQL Server는 INSERTED 및 DELETED 테이블이라는 트리거에 대해 특별히 사용할 수 있는 두 개의 가상 테이블을 제공합니다. SQL Server는 이러한 테이블을 사용하여 이벤트가 발생하기 전과 후에 수정된 행의 데이터를 캡처합니다. 예를 들어 비즈니스 규칙은 고객 상태가 다음과 같이 정의되어 있을 수 있습니다. 그러나 어느 것이 더 좋을까요? 각 메서드에 대한 실행 계획 가중치를 확인하여 두 방법의 성능을 비교해 보겠습니다. 두 쿼리를 실행한 후 생성된 실행 계획에서 트리거 메서드 가중치가 아래 실행 계획 비교와 같이 CHECK 제약 조건 메서드 가중치의 3배임을 확인할 수 있습니다.

트리거 재귀 두 업데이트 트리거 TR1 및 TR2가 테이블 T1에 정의되어 있다고 가정합니다. 트리거 TR1 업데이트 테이블 T1 재귀.

sql trigger 예제