- - PR -
SQL Server2005 「スナップショット分離レベル」について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-26 12:04
SQL Server 2005 Standard Edtion
あるテーブルを複数ユーザーで、更新、読み取りを行いますが、 更新時にロックが予想されるので、ロックがかかった場合でも 読み取りが出来るように、「スナップショット分離レベル」を 考えています。これが、本当に必要かどうか、また、使用方法について 確認させて下さい。 更新時に、「BEGIN TRAN」等のトランザクションは、使用して いないのですが、それでもロックの発生が予想されるなら、 「スナップショット分離レベル」を使用した方がよいでしょうか。 また、ストアドを利用して更新、読み取りを行う予定です。 更新用のストアドの中に、 ALTER DATABASE MyDB SET ALLOW_SNAPSHOT_ISOLATION ON UPDATE 〜 読み取りのストアドの中に、 SET TRANSACTION ISOLATION LEVEL SNAPSHOT SELECT 〜 のように、コーディングを考えています。 更新の度、ALTER DATABASE〜 読み取りの度、SET TRANSACTION〜の実行が必要と思っている のですが、それで、間違っていないでしょうか? ALTER DATABASE〜により、DBの一時変更が行われたので、 更新用のストアドの最後に、DBの設定を戻す為のコマンドは、 必要でしょうか。 また、他に、何か注意することは、ありますか? MSDNなどで調べはしたのですが、理解が??? [ メッセージ編集済み 編集者: fjdsskl 編集日時 2007-10-26 12:05 ] [ メッセージ編集済み 編集者: fjdsskl 編集日時 2007-10-26 12:06 ] | ||||
|
投稿日時: 2007-10-26 12:54
ALTER DATABASEは毎回実行するようなものではないので一回実行すれば十分です。
トランザクション分離レベルは読み取り側で毎回SET TRANSACTION ISOLATION LEVEL SNAPSHOTを実行する必要があります。 コネクションプールなどを利用しアプリケーション全体で分離レベルがSNAPSHOTであると困る場合は最後に SET TRANSACTION ISOLATION LEVEL READ COMMITED などで元に戻しておく必要があります。 [ メッセージ編集済み 編集者: Anthyhime 編集日時 2007-10-26 12:56 ] | ||||
|
投稿日時: 2007-10-26 22:18
Anthyhimeさん、有難うございます。
>ALTER DATABASEは毎回実行するようなものではないので一回実行すれば十分です。 すみません、一般的には、どのように実行すればよいですか? ストアドでは、実行しないということですね。 SQL Server起動時? | ||||
|
投稿日時: 2007-10-27 00:28
こういう機能は使ったことはありませんが、これって結局は Oracle と同じことができますよ、というものですよね。 たとえて言えば、エスカレーターの左側に乗って、右側を開けるようなもので、総合的なパフォーマンスは低下すると思います。 個々のトランザクションにかかる時間を短くすれば、このような機能は要らないと思います。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2007-10-27 07:53
ManagementStudioとかで一回
ALTER DATABASE MyDB SET ALLOW_SNAPSHOT_ISOLATION ON と入れてやれば、何回再起動しても、その状態は残り続けます。 | ||||
|
投稿日時: 2007-10-27 15:37
unibonさん、 Anthyhimeさん 有難うございます。
更新も短時間で済むと予想されるので、とりあえず、使用しないで 進め、問題が出てくれば、「スナップショット分離レベル」等の 利用を考えたいと思います。 感謝です。 |
1