- PR -

ロックリソースの[BULK-OP-DB]とは?

投稿者投稿内容
あいこ
会議室デビュー日: 2005/08/02
投稿数: 7
投稿日時: 2005-08-03 15:29
お世話になります。質問ばかりで申し訳ありません。助けてください。

ユーザー環境において、ストアドプロシージャによる更新のパフォーマンスが
著しく落ちてしまう現象が起きております。

そこで「sp_lock」でロック情報を採取したのですが、ロックリソースに
[BULK-OP-DB]、[BULK-OP-LOG]などという情報が出力されています。
以下が「sp_lock」の抜粋です。

spid,dbid,ObjId,IndId,Type,Resource,Mode,Status
21,2,0,0,DB,[BULK-OP-DB] ,S,GRANT
21,2,0,0,DB,[BULK-OP-LOG] ,S,GRANT

これは、何を意味するのでしょうか?
色々と文献を検索してみましたが、適切な情報が得られませんでした。

どなたかご教授願います。
あいこ
会議室デビュー日: 2005/08/02
投稿数: 7
投稿日時: 2005-08-03 15:49
申し訳ありません。環境の記載を忘れておりました。

<環境>
・OS:Windows2000 Server(SP3)
・DB:SQLServer 7.0(SP3)

以上、宜しくお願い致します。

今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-08-03 17:16
http://www.dbforums.com/archive/index.php/t-1104308.html
(英語サイトです)
参考になります?
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2005-08-03 18:01
引用:

あいこさんの書き込み (2005-08-03 15:29) より:

以下が「sp_lock」の抜粋です。

spid,dbid,ObjId,IndId,Type,Resource,Mode,Status
21,2,0,0,DB,[BULK-OP-DB] ,S,GRANT
21,2,0,0,DB,[BULK-OP-LOG] ,S,GRANT




お疲れ様です。
夏椰さんが示されているリンクにありますとおり,

Rock Resource:[BULK-OP-DB]
は様々な状況下で発生します。
総括として,字面の通りデータベースに対する大規模な操作に関するロックです。

今回のロックでは,
「S」 Shared ロックが取得されていますから,
インデックスの作成や,BULK コマンドによるデータベースの更新が行われているのではないでしょうか?

spid と dbid の情報から,どの作業がロックを取得しているのか判定できると思います。
原因によってチューニングの対応は異なります。

それと,
直前のスレッドで多くの方が議論してくださっている件に
レスを返されたほうがよいと思います。

----------
TimberLandChapel
http://blogs.timberlandchapel.com/
あいこ
会議室デビュー日: 2005/08/02
投稿数: 7
投稿日時: 2005-08-04 11:16
引用:

TLCさんの書き込み (2005-08-03 18:01) より:

今回のロックでは,
「S」 Shared ロックが取得されていますから,
インデックスの作成や,BULK コマンドによるデータベースの更新が行われているのではないでしょうか?

spid と dbid の情報から,どの作業がロックを取得しているのか判定できると思います。
原因によってチューニングの対応は異なります。


問題のストアドプロシージャで、「SELECT INTO」により一時テーブルを作成しております。
又、dbidから”tempdb”がロックされている事が判明しました。

今回の現象は、SQLServerログにエラーは出力されないのでしょうか?
エラーコードを明確に把握したいです。

それと、現在別スレッドでも質問させてもらっています。
返信が前後して申し訳ありません。
後ほど、別スレッドの方にも返信させてもらいます。
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2005-08-04 12:36
引用:

あいこさんの書き込み (2005-08-04 11:16) より:

問題のストアドプロシージャで、「SELECT INTO」により一時テーブルを作成しております。
又、dbidから”tempdb”がロックされている事が判明しました。

今回の現象は、SQLServerログにエラーは出力されないのでしょうか?
エラーコードを明確に把握したいです。




・SELECT INTO で一時テーブルにインサート
を行った際に tempdb に [BULK-OP-DB] がかかるのは正常な動作です。
(ログの dbid が 2 だったので tempdb 周りだとは思いましたが。。。)
システムのパフォーマンスダウンとは,どういった現象として発現していますか?

・他のプロセスがタイムアウトでエラーになってしまいますか?
・単純に処理が遅いだけで正常終了しますか?

エラーコードを正確に把握されたいとありますが,
上記のタイムアウトになっている場合は,タイムアウトした側のプロセスのエラーコードがそのまま取得されたいものです。

一方正常終了する場合は,エラーコードという観点から情報を得ることは難しいです。

また,デッドロックなどが発生する場合には,トレース1204 をとるなどして情報を取得できる場合もあります。
(少し前にこのフォーラムでフォローアップしました
参考:http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2005/06/28/22.aspx


■どのくらい大きな結果セットを SELECT INTO していますか?
一時テーブルに挿入する結果セットの大きさによっては,ある程度パフォーマンスダウンすることは仕方がありません。

どうしてもチューニングする場合は,一時テーブルの利用そのものから見直さなければならないでしょう。


何が起こっているかを把握するための例を1つ

1.次のクエリを発行して,tempdb に [BULK-OP-DB] ロックを発生させてください。

[code]-----
BEGIN TRAN
SELECT [Key] INTO #TestTemp
FROM Test

--ROLLBACK TRAN
[code]-----

2.EM から[現在の利用状況] を表示させてみてください。
 → タイムアウトすると思います。

3.EM が実行待ちをしている間に sp_lock を打ってください。
 wait になっているプロセスが見えると思います。


[ メッセージ編集済み 編集者: TLC 編集日時 2005-08-04 12:39 ]

[ メッセージ編集済み 編集者: TLC 編集日時 2005-08-04 12:40 ]
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2005-08-04 12:47
http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2005/06/28/22.aspx

リンクが動かなかったので。
あいこ
会議室デビュー日: 2005/08/02
投稿数: 7
投稿日時: 2005-08-04 18:58
レス有難う御座います。

以下、ご確認下さい。

>システムのパフォーマンスダウンとは,どういった現象として発現していますか?
>
>・他のプロセスがタイムアウトでエラーになってしまいますか?
>・単純に処理が遅いだけで正常終了しますか?

単純に処理が遅いだけで、5〜6時間待てば正常終了します。

>どのくらい大きな結果セットを SELECT INTO していますか?
>一時テーブルに挿入する結果セットの大きさによっては,ある程度パフォーマンスダウン
>することは仕方がありません。

正確には把握できていませんが、恐らく50万レコードぐらいだと思います。
1レコードは40バイト程です。インデックスは付けておりません。

>一時テーブルに挿入する結果セットの大きさによっては,ある程度パフォーマンスダウン
>することは仕方がありません。

これまで、他の処理で一時テーブルを頻繁に使用してきましたが、パフォーマンスダウンは
特に無かったように思います。
「SELECT INTO」で一時テーブルを作成する事に問題があるのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)