タグ付けされた質問 「blocking」

2
ブロックされたプロセスレポートの空のブロックプロセス
拡張イベントを使用してブロックされたプロセスのレポートを収集していますが、何らかの理由で一部のレポートでblocking-processノードが空です。これは完全なxmlです。 <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" /> <frame line="1" …

6
SQL Serverでは、選択した行グループがロックされているかどうかを確認する方法はありますか?
数十億行のテーブルの多数のレコードを更新/削除しようとしています。これは一般的なテーブルであるため、このテーブルのさまざまなセクションで多くのアクティビティがあります。すべての行のロックまたはページロックまたはテーブルロックの取得を待機しているため、大規模な更新/削除アクティビティが長時間ブロックされているため、タイムアウトになるか、タスクの完了に数日かかります。 そのため、一度に行の小さなバッチを削除するアプローチを変更しています。しかし、選択された(たとえば、100または1000または2000行)が現在別のプロセスによってロックされているかどうかを確認します。 そうでない場合は、削除/更新に進みます。 ロックされている場合は、次のグループのレコードに進みます。 最後に、最初に戻って、残ったものを更新/削除してみてください。 これは実行可能ですか? ありがとう、ToC

2
まだロックを保持しているクエリを見つける方法は?
sys.dm_tran_locksDMVを照会すると、テーブル、ページ、行などのリソースでロックを保持しているセッション(SPID)がわかります。 取得したロックごとに、どのSQLステートメント(削除、挿入、更新、または選択)がそのロックを引き起こしたかを判別する方法はありますか? DMV のmost_recent_query_handle列にはsys.dm_exec_connections最後に実行されたクエリのテキストが表示されますが、他のクエリは同じセッション(SPID)で実行され、ロックを保持していることが何度かあります。 私はすでにsp_whoisactive(Adam Machanicの)プロシージャを使用していますが、現時点では入力バッファー上にあるクエリのみを表示しています(考えてみてくださいDBCC INPUTBUFFER @spid)。 例えば: オープントランザクション/セッション ステートメントの実行(リソースのロックを保持) 同じセッションで別のステートメントを実行する 別のトランザクション/セッションを開き、ステップ2でロックされたリソースの変更を試みます。 このsp_whoisactive手順では、ステップ3でステートメントを指摘しますが、これはロックの原因ではないため、役に立ちません。 この質問は、ブロックされたプロセスレポート機能を使用して分析を実行し、本番環境でのブロックシナリオの根本原因を見つけることから生まれました。各トランザクションは複数のクエリを実行しますが、ほとんどの場合、最後のクエリ(BPRの入力バッファに表示される)がロックを保持するクエリになることはほとんどありません。 フォローアップの質問があります:ブロッキングクエリを効果的に識別するフレームワーク

2
ALTER TABLE上のデータベース「凍結」
私たちの本番環境は、今朝、テーブルを変更し、実際に列を追加するときにしばらく凍結しました*。 問題のあるSQL:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[]; *システムへのログインには、まったく同じテーブルからの選択が必要であるため、alterテーブルでログインすることはできません。システムが通常の操作を再開できるようにするには、実際にプロセスを強制終了する必要がありました。 テーブル構造: CREATE TABLE cliente ( rut character varying(30) NOT NULL, nombre character varying(150) NOT NULL, razon_social character varying(150) NOT NULL, direccion character varying(200) NOT NULL, comuna character varying(100) NOT NULL, ciudad character varying(100) NOT NULL, codigo_pais character varying(3) NOT NULL, …

1
sp_procedure_params_90_rowsetでの過度のコンパイルブロッキング
MSDNでのこの質問の復活:Blocked-process-report:このwaitresourceとは何ですか "OBJECT:32767:124607697:0 [COMPILE]" プロファイラーでこれらのステートメントをキャッチしました。それらはすべて3秒以上の持続時間を持っています。いくつかの10以上。ブロックアクティビティは、MSDNからのリンクと同じです。 呼び出しはすべて3つの部分の命名を使用します。すべては、次のような形式で異なるprocを指定します。 exec [db1].[sys].sp_procedure_params_90_rowset N'proc1', 1, NULL, NULL exec [db2].[sys].sp_procedure_params_90_rowset N'proc2', 1, NULL, NULL exec [db3].[sys].sp_procedure_params_90_rowset N'proc3', 1, NULL, NULL exec [db4].[sys].sp_procedure_params_90_rowset N'proc4', 1, NULL, NULL このレベルのブロックを減らすにはどうすればよいですか? (編集)私は今、同じことを見ています: exec [db1].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db2].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db3].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db4].[sys].sp_primary_keys_rowset N'view1', N'dbo' 体系的な何かが起こっていますが、他に何をすべきかわかりません。呼び出し元はADOを介したVB6です。これらの呼び出しを行うのはADOです。 ブロックされたプロセスレポートの例を以下に示します <blocked-process-report> …

1
UPDLOCKによりSELECTがハング(ロック)するのはなぜですか?
テーブル全体をロックするSQL SERVERにselectがあります。 セットアップスクリプトは次のとおりです(上書きしないようにしてください)。 USE [master] GO IF EXISTS(SELECT 1 FROM sys.databases d WHERE d.name = 'LockingTestDB') DROP DATABASE LockingTestDB GO CREATE DATABASE LockingTestDB GO USE [LockingTestDB] GO IF EXISTS(SELECT 1 FROM sys.tables t WHERE t.name = 'LockingTestTable') DROP TABLE LockingTestTable GO CREATE TABLE LockingTestTable ( Id int IDENTITY(1, 1), Name …

1
SQL Serverはいつロックを取得しますか?
ここにあるSQL Serverの分離レベルのリストには、トランザクション内で取得された書き込みロックは、トランザクションが終了するまで保持されることが記載されています。ただし、これらのロックがいつ取得されるかについては触れられていません。 ロックはデフォルトでトランザクションの開始時に取得されますか、それとも必要なときに取得されますか?後者が当てはまる場合、Xのロックが保持される時間を最小限に抑えるために、大規模なトランザクションでは書き込み操作をできるだけ遅く実行する方が有利でしょうか。

1
プロファイラーなしで、クエリがロックの待機に費やした時間を表示するにはどうすればよいですか?
断続的に時間がかかるクエリを診断しようとしています。ロックを取得しようとしてブロックされている可能性があります。問題が発生している環境でプロファイラーを使用する権限がありません。 外部プロファイラーを使用せずに、この個々のクエリがブロックされている時間に関する統計を取得する方法はありますか?

1
クエリストアによるブロッキング。クリアまたは無効にできません
2016 SQL Serverを最近SP2に更新し、最新のCU(KB4458621)を2018年8月にリリースしました。ちょうど最終日かそこらで、いくつかのブロックが発生していることに気付きました。SPID b / cはユーザープロセスではないため、強制終了できません。SP_WHO2によると、コマンドは「Query Store ASYN」です。スクリプトとUIを使用して、データをパージし、クエリストアを無効にしてみました。何も機能していないようで、スピンしてからブロックが発生し始めます。他に誰かがこの問題を抱えていますか?誰でも私がクエリストアを無効にする方法を理解するのを手伝ってくれる?SP_WhoIsActive @show_System_SPIDS = 1以下の結果(クエリストアの結果のみ) 更新-これにより、TempDBドライブがいっぱいになります。数時間後に再起動してみて、問題が解決するかどうか確認してください。投稿し続けます。 ありがとう、ネイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.