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

2つ以上のプロセスが他のプロセスによって保持されているリソースのロックによってブロックされているため、処理を続行できない(したがって、ロックを解放できない)ことによって引き起こされる状況。

6
デッドロックの主な原因は何ですか?それを防ぐことができますか?
最近、ASP.NETアプリケーションの1つがデータベースデッドロックエラーを表示し、エラーをチェックして修正するように要求されました。デッドロックの原因は、カーソル内のテーブルを厳密に更新しているストアドプロシージャであることがわかりました。 このエラーを見たのはこれが初めてで、効果的に追跡して修正する方法がわかりませんでした。私が知っているすべての可能な方法を試してみましたが、最終的に、更新されているテーブルには主キーがないことがわかりました!幸いなことに、これはID列でした。 後で、展開用のデータベースを台無しにした開発者を見つけました。主キーを追加し、問題は解決しました。 私は幸せを感じて、私のプロジェクトに戻って、そのデッドロックの理由を見つけるためにいくつかの研究をしました... どうやら、デッドロックを引き起こしたのは循環待機状態だったようです。更新は、主キーの場合よりも主キーなしの方が明らかに時間がかかります。 明確に定義された結論ではないことを知っているので、ここに投稿しています... 主キーの欠落が問題ですか? (相互排除、保留と待機、プリエンプションなし、循環待機)以外のデッドロックを引き起こす他の条件はありますか? デッドロックを防止および追跡するにはどうすればよいですか?

5
SQL Serverでデッドロックなしでキーテーブルへの同時アクセスを処理する
IDENTITY他のさまざまなテーブルのフィールドの代わりとしてレガシーアプリケーションで使用されるテーブルがあります。 テーブルの各行にはLastID、で名前が付けられたフィールドで最後に使用されたIDが格納されIDNameます。 ストアドプロシージャがデッドロックを取得することがあります-適切なエラーハンドラを作成したと思います。しかし、この方法論が思うように機能するかどうか、またはここで間違ったツリーを探しているかどうかに興味があります。 デッドロックがまったくない状態でこのテーブルにアクセスする方法があるはずです。 データベース自体はで構成されREAD_COMMITTED_SNAPSHOT = 1ます。 まず、表を次に示します。 CREATE TABLE [dbo].[tblIDs]( [IDListID] [int] NOT NULL CONSTRAINT PK_tblIDs PRIMARY KEY CLUSTERED IDENTITY(1,1) , [IDName] [nvarchar](255) NULL, [LastID] [int] NULL, ); そして、IDNameフィールドの非クラスター化インデックス: CREATE NONCLUSTERED INDEX [IX_tblIDs_IDName] ON [dbo].[tblIDs] ( [IDName] ASC ) WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , …

1
SQL Server:ロック通信バッファーリソースでデッドロック
このデッドロックタイプの考えられる理由は何ですか?(一般にデッドロックではありません) 通信バッファリソースをロックする これは、システムのメモリが少なく、バッファカウントが制限を超えたことを示していますか? 詳細なエラー: トランザクション(プロセスID 59)は、別のプロセスとのロック通信バッファーリソースでデッドロックされ、デッドロックの犠牲者として選択されました。トランザクションを再実行します

5
削除/挿入時の同じ排他的にロックされたクラスター化キー(NHibernateを使用)でのSQLデッドロック
私はこのデッドロックの問題にかなりの数日取り組んでおり、私が何をしようとも、何らかの形で持続します。 まず、一般的な前提:1対多の関係でVisitItemsを使用した訪問があります。 VisitItems関連情報: CREATE TABLE [BAR].[VisitItems] ( [Id] INT IDENTITY (1, 1) NOT NULL, [VisitType] INT NOT NULL, [FeeRateType] INT NOT NULL, [Amount] DECIMAL (18, 2) NOT NULL, [GST] DECIMAL (18, 2) NOT NULL, [Quantity] INT NOT NULL, [Total] DECIMAL (18, 2) NOT NULL, [ServiceFeeType] INT NOT NULL, [ServiceText] NVARCHAR …

3
デッドロックをシミュレートするコード
アプリケーションをテストしています。データベースサイトのデッドロックを安定してシミュレートするコードが必要です(可能であればSQLスクリプト)。 ありがとうございました。 追加: 1つのテーブルのみが関与するデッドロックを再現する

4
マージステートメント自体のデッドロック
次の手順があります(SQL Server 2008 R2): create procedure usp_SaveCompanyUserData @companyId bigint, @userId bigint, @dataTable tt_CoUserdata readonly as begin set nocount, xact_abort on; merge CompanyUser with (holdlock) as r using ( select @companyId as CompanyId, @userId as UserId, MyKey, MyValue from @dataTable) as newData on r.CompanyId = newData.CompanyId and r.UserId = newData.UserId and …

2
外部キーはデッドロックを引き起こし、READ COMMITTED SNAPSHOTを妨げることができますか?
これは次の質問です:https : //stackoverflow.com/questions/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automatically 大規模なレポートを同時に実行すると、ASP.NETアプリケーションでデッドロック/タイムアウトが発生しますREAD_COMMITTED_SNAPSHOT ON。 そこで、2つの質問があります。 トランザクション分離レベルスナップショットが期待どおりに機能しているかどうかを確認するにはどうすればよいですか? 外部キー(レポートテーブルへのWebアプリケーションのテーブル内)がデッドロックの原因であると想定しています。私はこの興味深い記事を見つけました: 注 SQL Serverは、トランザクションが読み取りコミットスナップショット(行バージョン管理を使用して読み取りコミット)またはスナップショット分離レベルを使用している場合でも、外部キーの検証時に共有ロックを取得します。これらのトランザクション分離レベルが使用されている場合、トランザクションのデッドロックグラフを調べるときは、このことに注意してください。共有ロックが表示される場合は、外部キーによって参照されているオブジェクトでロックが取得されているかどうかを確認してください。 FKがデッドロック/タイムアウト状況に本当に責任があるかどうかを確認するにはどうすればよいですか?つまり、デッドロックを防ぐためにそれらの外部キーを削除できますか? 注:デッドロックを引き起こすテーブルからの読み取りのみです。 このトピックに関するご意見は大歓迎です。 編集 ここはDeadlock-Graphです。誰かがデッドロックの原因を理解するのを助けてくれるかもしれません。2つのトランザクションが同じテーブル(1つの更新と1つの挿入、挿入はStored-Procedureとして)を書きたいときに、Webアプリケーションによってのみ実行されるレポートなしで発生したようです。ページロックを取得する理由と、行ロックのみを有効にする方法 Insert-SPはすでにを使用していTRANSACTION ISOLATION LEVEL REPEATABLE READます。 2つのトリガー(1つの更新と1つの挿入)がデッドロックの原因であると強く疑っています。挿入トリガーは次のとおりです。 CREATE TRIGGER [dbo].[CreateRMAFiDates] ON [dbo].[RMA] AFTER INSERT AS BEGIN SET NOCOUNT ON; UPDATE RMA SET [fiCreationDate]=(SELECT idDate FROM tdefDate WHERE CONVERT(VARCHAR, INSERTED.Creation_Date, 112) = tdefDate.Text), [fiPopDate]=(SELECT idDate FROM …

2
異なるプロセスの同じ一時テーブルのロックからのデッドロック
私は不可能だと思った何かを示すように見えるデッドロックを発見しました。デッドロックには2つのプロセスが関係します。 1. process8cf948 SPID 63 一時テーブル#PB_Cost_Excp_Process_Invoices_WorkでALTER TABLEを実行します。 オブジェクトID 455743580でテーブル#PB_Cost_Excp_Process_Invoices_WorkのIXロックを所有 2. process4cb3708 SPID 72 一時テーブル#PB_Cost_Excp_Process_Invoices_WorkでUPDATEを実行します。これは、テーブルの独自のコピーであると想定されています。 同じオブジェクトID 455743580で#PB_Cost_Excp_Process_Invoices_WorkのSch-Mロックを所有しています! これは不可能だと思われます。何か不足していますか?#Temporaryテーブルは、これら2つのSPID間で本当に再利用されましたか? これは、累積的な更新1(バージョン10.50.4260)が適用されたSQL Server 2008 R2 Service Pack 2にあります。 変更されていない完全なデッドロックトレースは以下のとおりです。2つのプロセスが、同じテーブル名#PB_Cost_Excp_Process_Invoices_Work_SNIP_0000000D8519を使用して同じオブジェクトIDで動作していることに注意してください。 12/14/2012 13:46:03,spid23s,Unknown,waiter id=process8cf948 mode=X requestType=wait 12/14/2012 13:46:03,spid23s,Unknown,waiter-list 12/14/2012 13:46:03,spid23s,Unknown,owner id=process4cb3708 mode=Sch-M 12/14/2012 13:46:03,spid23s,Unknown,owner-list 12/14/2012 13:46:03,spid23s,Unknown,objectlock lockPartition=0 objid=455743580 subresource=FULL dbid=2 objectname=tempdb.dbo.#PB_Cost_Excp_Process_Invoices_Work_________________________________________________________________________________0000000D8519 id=lock371705d00 mode=Sch-M associatedObjectId=455743580 12/14/2012 13:46:03,spid23s,Unknown,waiter …

2
innodbステータスログでデッドロックを解読する際の問題
Microsoft ADO.NETコネクタからMySQLにアクセスしています。 ときどき、innodbステータスに次のデッドロックが発生し、問題の原因を特定できないことがあります。トランザクション(2)は同じロックを待機して保持しているように見えますか? ------------------------ LATEST DETECTED DEADLOCK ------------------------ 110606 5:35:09 *** (1) TRANSACTION: TRANSACTION 0 45321452, ACTIVE 0 sec, OS thread id 3804 starting index read mysql tables in use 1, locked 1 LOCK WAIT 2 lock struct(s), heap size 368, 1 row lock(s) MySQL thread id 84, query id …

1
インデックス付きビューを介してのみ関連する2つのテーブルのデッドロックを解決する
デッドロックが発生している状況があり、犯人を絞り込んだと思いますが、それを修正するために何ができるかはよくわかりません。 これは、SQL Server 2008 R2を実行している運用環境です。 状況を少し簡略化して表示するには: 以下に定義する3つのテーブルがあります。 TABLE activity ( id, -- PK ... ) TABLE member_activity ( member_id, -- PK col 1 activity_id, -- PK col 2 ... ) TABLE follow ( id, -- PK follower_id, member_id, ... ) member_activityテーブルには主キーのように定義する化合物を持っているmember_id, activity_id私は今まで、そのテーブル途中その上でデータを検索する必要があるため、。 また、非クラスタ化インデックスがありfollowます: CREATE NONCLUSTERED INDEX [IX_follow_member_id_includes] ON follow ( …

2
同じ関数の同時呼び出し:デッドロックはどのように発生しますか?
私の関数new_customerは、Webアプリケーションによって1秒あたり数回(ただし、セッションごとに1回)呼び出されます。最初に行うことは、customerテーブルをロックすることです(「存在しない場合は挿入」、つまりの単純なバリアントupsert)。 ドキュメントの私の理解は、他の呼び出しは、new_customer以前の呼び出しがすべて終了するまで単純にキューに入れる必要があるということです: LOCK TABLEは、テーブルレベルのロックを取得し、競合するロックが解放されるのを必要に応じて待機します。 代わりにデッドロックが発生することがあるのはなぜですか? 定義: create function new_customer(secret bytea) returns integer language sql security definer set search_path = postgres,pg_temp as $$ lock customer in exclusive mode; -- with w as ( insert into customer(customer_secret,customer_read_secret) select secret,decode(md5(encode(secret, 'hex')),'hex') where not exists(select * from customer where customer_secret=secret) returning customer_id ) insert …

4
SQL Serverデッドロックレポートのキーを値に変換するにはどうすればよいですか?
waitresource = "KEY:9:72057632651542528(543066506c7c)"に関連する競合があったことを示すデッドロックレポートがあり、これを見ることができます。 <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> <resource-list>内。キーの実際の値(id = 12345など)を検索できるようにしたい。その情報を取得するには、どのSQLステートメントを使用する必要がありますか?

3
SQL Server 2008 R2の長時間実行クエリまたはデッドロックに関する通知
デッドロック時に通知を送信する方法があるかどうか知りたいですか?その場合、どのクエリが必要になるでしょう。SQL Serverはデッドロックを処理することを理解しています。関連するクエリに関する情報が欲しいだけです。 長時間実行されるクエリを特定するために、次のことがわかりました。 SELECT creation_time ,last_execution_time ,total_physical_reads ,total_logical_reads ,total_logical_writes , execution_count , total_worker_time , total_elapsed_time , total_elapsed_time / execution_count avg_elapsed_time ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st where total_elapsed_time >= …
15 query  deadlock 

3
ユーザー定義のテーブルタイプを作成し、同じトランザクションで使用できますか?
次を実行すると(管理スタジオで、GOはコマンドをバッチに分割します) use tempdb begin tran go CREATE TYPE dbo.IntIntSet AS TABLE( Value0 Int NOT NULL, Value1 Int NOT NULL ) go declare @myPK dbo.IntIntSet; go rollback デッドロックエラーメッセージが表示されます。私のプロセスはそれ自体でデッドロックしました。この動作は2008年、2008R2、2012年に見ました。 作成された同じトランザクション内で新しく作成されたタイプを使用する方法はありますか?

2
デッドロックエラーがデッドロックSQLを返していません
Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. Webサイトの1つがビジーになると、このエラーがランダムに発生します。どのテーブルのセットが起こっているかは大体わかっていますが、他のプログラムでの経験では、通常、デッドロックが起こっている場所でSQLが返されます。これを可能にするためにオンにする必要があるフラグはありますか? これは今のところ私の主な質問なので、デッドロック自体を別の問題としてデバッグしてみます。 SQL Server 2008 Standard Editionを使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.