ホーム › フォーラム › A5:SQL Mk-2掲示板 › SQL Severにてselectでのロックについて
- このトピックには2件の返信、1人の参加者があり、最後に
watanabeにより1日、 23時間前に更新されました。
-
投稿者投稿
-
watanabe
ゲスト松原様
いつも大変お世話になっております。
日頃より便利に活用させていただいています。SQL Serverにて「結果セット最大行数」を超える SELECT 文を実行した際に、
ロックが残る現象が確認されました。
お忙しいところ恐縮ですが、ご確認いただけましたら幸いです。
よろしくお願い申し上げます。<環境>
A5:SQL Mk-2 x64(Disabled AI) Version2.20.4<Portable>
DBMS:SQL Server 2022 に専用接続で使用<確認内容>
結果セット最大行数:5000件で設定
1)select * from table1 →結果は5001件以上。ロックされる
2)select top(100) * from table1 →ロックされない
3)select * from table1 where columnA = ‘A’ →結果は100件。ロックされない
4)select * from table1; 実行後、select 1; →select 1でロックが解除される
5)select * from table1; 実行後、結果セットを×で閉じる →結果セットを閉じるとロックが解除される松原正和
キーマスターwatanabe さんこんにちは。
SQL Server で「結果セット最大行数」を超える SELECT 文を実行した際に、ロックが残る現象とのことですが、ロックの確認はどのようにされたでしょうか?
SELECT * FROM sys.dm_tran_locksでよろしいでしょうか? ちょっと現象が確認できませんでした。
watanabe
ゲスト松原様
ご確認ありがとうございます。watanabeです。はい。sys.dm_tran_locksです。
実際は下記のようにいくつかJoinして確認いたしました。なお分離レベルは、Read Committedです。
また新たに確認できたこととして、以下があります。
6)select * from table1; 実行後”トランザクションの開始(shift+F9)”を実行
→「Connection is busy with results for another command」エラーが発生する。SQL Serverのオプションによるものでしょうか・・・。
SELECT
tl.resource_type
, tl.request_mode
, tl.request_status
, resource_associated_entity_id
, es.login_name
, es.host_name
, es.program_name
, ec.client_net_address
, er.status
, er.command
FROM
sys.dm_tran_locks AS tl
LEFT JOIN sys.dm_exec_sessions AS es
ON tl.request_session_id = es.session_id
LEFT JOIN sys.dm_exec_requests AS er
ON tl.request_session_id = er.session_id
LEFT JOIN sys.dm_exec_connections AS ec
ON tl.request_session_id = ec.session_id
WHERE
ec.client_net_address = ‘xxx.xxx.xxx.xxx’ -
投稿者投稿