SQL Server のトリガーで使えるテーブルに、deleted と inserted というものがある。それぞれ「実行したSQL文で削除されたレコード」「実行したSQL文で削除されたレコード」が入ってくる。update文が実行された際には deleted には更新前/inserted には更新後のレコードがそれぞれ入る。

そういったトリガーで、ちと複雑なのを作った。そうすると、対象レコード件数が多く、かつ連鎖するトリガーを一気に実行するようにしている場合にのみ不具合が起こった。(詳細は今のところ省く。)

おそらくは、deleted や inserted の領域が「実行されたトリガーで独立しているのか、それとも共用しているのか」の差だろう。独立していればこの事象は起きないはずだ。

もしかすると、トリガー内でトランザクション実行できれば(できたっけ?)解決するのかも知れないが、今のところ別の解決策で逃げている。

時間があればじっくり実験するのだが・・・・。



さて、過去2回にわたって書いてきたが、そもそも無停電電源装置ってのは何のため導入しているのだろうか?「とりあえずサーバー入れるなら無停電電源を導入する」と、深く考えずに入れているケースが結構あるのではないだろうか?

システムにもいろいろあり、停電時でも稼働し続けなければいけないシステムと、停まっていても差し支えないシステムといった、重要度や優先度は異なるだろう。停電時は稼働し続ける必要のあるシステムのために、他のシステムを停止し、サーバーをオフするようにしてやる必要がある。
ちょっと待って、UPSがあるならあまり関係ないでしょ?という疑問もあるだろう。しかし、非常用電源で空調も十分長時間稼働させうるならいいが、そこまでの電力は厳しいのではないか。サーバーが稼働する/UPSをバッテリー運用すると発熱を伴う。特にサーバールームの場合は、その熱によるサーバーのダウンのリスクを除く、という事も考慮が必要なのである。
まずは具体的には「このシステムはどの時点まで稼働させるか」の重み付けをし、それに応じてUPSの設定を変更してゆく必要がある。

その際、より長く稼働させたいサーバーは、少しでも風通りのよいところ、熱のこもりにくいところに配置した方がよい。
サーバー機器をラックから別のラックに移すのも一仕事である。可能な限り「ここはどういう重要度のシステムを配置する」といった方針を決めるのがよいのではないか。