ひやりはっとIT備忘録    

« 人月単価の相場を知っていますか? | メイン | サロゲートペアとは特殊4バイト文字コード »

« SQL Server 2008 の新機能 | データベース | SQL Server 2008 のわかりやすい特徴の一つが、圧縮機能 »

2007年8月31日

●SQL Server のロックエスカレーション機能

DBシステム側での資源節約機能

 ロックエスカレーション機能の解説では、「PassJ」の次のものが一番わかりやすかったです。
《PassJ》「第4回 SQL Server 転ばぬ先の杖!」【引用】
Oracleは行単位のロックが確保されています。どれだけロックが増えても行単位でロックが確保される分、ロックが多いときにはリソースを消費します。SQL Serverも基本は行ロックですが、システムのリソースが少なくなると、複数の行ロックを1つのテーブルロックに切り替えることで、メモリを開放しようとします。これは、「ロックエスカレーション機能」と呼ばれています。
つづく

非接続型の ADODB.Recordset

 ロックエスカレーション機能の背景を詳細に述べた、次のサイトも参考になりました。
第五章 ロックの真実
ロックエスカレーションに関する問題回避方法は、私が思いつくものでは次のものがあります。
(1) ロックエスカレーションを発生させるような処理 (大量の一括更新) は、オンライン処理サービス時間帯には行わない。
(2) ロックエスカレーションのしきい値を引き上げる。
(3) インデックスが使用できない検索条件を指定しない。インデックスが付加されているカラムに関するダミーの検索条件を付加する。
(4) カーソルなどを使用して 1 レコードずつ処理を行うようにする。
 先日、PassJのメーリングリストで、すぐにでも使えるコードを、Mitsugi OGAWA氏から教えていただきました。ありがとうございました>OGAWA氏。
《PassJ》「【pml-dev 1213】Re: e_fail1状態について」2007/07/22【引用】
ざっと想定できるのはロックエスカレーションですかね。
ADP で直接テーブルを開かないとか、ページング(1 回で取得するデータの絞り込み)の実装とかしないと回避できないと思われます。
クエリを記述するときに NOLOCK 指定とかもありですが。
ADODB の Recordset を取得するときは、非接続型の Recordset を使うことも手です。
VBScript ですが、2001 年に記述したサンプルが見つかりました。
 実際の VBScript のコードは、PassJでご覧になって下さい>皆様。
おわり

トラックバックURL

このエントリーのトラックバックURL:
http://www.uncle-joe.net/mtengine/mt-tb.cgi/51

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)