ライブ/本番データベースで、トリガーをテーブルに追加しようとしていますが、失敗しました。何度か試しましたが、create trigger ステートメントが完了するまでに 30 分以上かかり、キャンセルしました。
テーブルは、いくつかの異なるプロセスによって頻繁に読み書きされるテーブルです。テーブルを更新するスケジュールされたジョブを無効にし、テーブルのアクティビティが少ないときに試みましたが、テーブルにアクセスするすべてを停止することはできません。
create trigger ステートメント自体に問題があるとは思いません。create trigger ステートメントは、テスト環境で迅速に成功し、行がテーブルに挿入/更新されたときにトリガーが正しく機能しました。テスト データベースでトリガーを作成したとき、テーブルには負荷がなく、行数がかなり少なかったため、ライブ/運用データベースとは異なります (100 対 13,000,000+)。
これが私が実行しようとしている作成トリガーステートメントです
CREATE TRIGGER [OnItem_Updated]
ON [Item]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF update(State)
BEGIN
/* do some stuff including for each row updated call a stored
procedure that increments a value in table based on the
UserId of the updated row */
END
END
行が更新されている間、またはテーブルに多くの行がある場合に、テーブルにトリガーを作成すると問題が発生する可能性はありますか?
SQLServer では、トリガーはデフォルトで有効に作成されます。デフォルトで無効になっているトリガーを作成することはできますか?
他のアイデアはありますか?