คำถามติดแท็ก deadlock

สถานการณ์ที่เกิดจากกระบวนการสองกระบวนการขึ้นไปที่ไม่สามารถดำเนินการได้ (และปล่อยการล็อก) เนื่องจากถูกบล็อกโดยการล็อกทรัพยากรที่กระบวนการอื่นถืออยู่

6
อะไรคือสาเหตุหลักของการหยุดชะงักและสามารถป้องกันได้?
เมื่อเร็ว ๆ นี้หนึ่งในแอปพลิเคชัน ASP.NET ของเราแสดงข้อผิดพลาดการหยุดชะงักของฐานข้อมูลและฉันถูกขอให้ตรวจสอบและแก้ไขข้อผิดพลาด ฉันจัดการเพื่อค้นหาสาเหตุของการหยุดชะงักเป็นขั้นตอนการจัดเก็บที่ปรับปรุงตารางภายในเคอร์เซอร์อย่างจริงจัง นี่เป็นครั้งแรกที่ฉันเห็นข้อผิดพลาดนี้และไม่รู้วิธีการติดตามและแก้ไขอย่างมีประสิทธิภาพ ฉันลองทุกวิธีที่เป็นไปได้ที่ฉันรู้และในที่สุดก็พบว่าตารางที่กำลังอัปเดตไม่มีคีย์หลัก! โชคดีที่มันเป็นคอลัมน์ตัวตน ฉันภายหลังพบนักพัฒนาที่เขียนสคริปต์ฐานข้อมูลสำหรับการปรับใช้ที่สับสน ฉันเพิ่มคีย์หลักและปัญหาได้รับการแก้ไข ฉันรู้สึกมีความสุขและกลับมาที่โครงการของฉันและทำการวิจัยเพื่อค้นหาสาเหตุของการหยุดชะงัก ... เห็นได้ชัดว่ามันเป็นเงื่อนไขการรอแบบวงกลมที่ทำให้เกิดการหยุดชะงัก การอัพเดตใช้เวลานานกว่าโดยไม่มีคีย์หลักมากกว่ากับคีย์หลัก ฉันรู้ว่ามันไม่ใช่ข้อสรุปที่ชัดเจนนั่นคือเหตุผลที่ฉันโพสต์ที่นี่ ... คีย์หลักที่หายไปเป็นปัญหาหรือไม่ มีเงื่อนไขอื่นใดที่ทำให้เกิดการหยุดชะงักอื่นนอกเหนือจาก (การกีดกันซึ่งกันและกันถือและรอไม่มีการจองล่วงหน้าและการรอแบบวงกลม)? ฉันจะป้องกันและติดตามการหยุดชะงักได้อย่างไร

5
การจัดการการเข้าถึงตารางคีย์พร้อมกันโดยไม่มี deadlocks ใน SQL Server
ฉันมีตารางที่ใช้โดยแอปพลิเคชันรุ่นเก่าแทนIDENTITYเขตข้อมูลในตารางอื่น ๆ แถวในตารางแต่ละเก็บ ID ที่ใช้ล่าสุดสำหรับเขตที่มีชื่อในLastIDIDName บางครั้ง proc ที่เก็บไว้จะได้รับ deadlock - ฉันเชื่อว่าฉันได้สร้างตัวจัดการข้อผิดพลาดที่เหมาะสม แต่ฉันสนใจที่จะดูว่าวิธีการนี้ใช้ได้ตามที่ฉันคิดหรือไม่หรือถ้าฉันเห่าต้นไม้ผิดที่นี่ ฉันค่อนข้างแน่ใจว่าควรมีวิธีการเข้าถึงตารางนี้โดยไม่มีการหยุดชะงักใด ๆ เลย 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, ); และดัชนี nonclustered บนIDNameสนาม: CREATE NONCLUSTERED INDEX [IX_tblIDs_IDName] ON [dbo].[tblIDs] ( …

1
SQL Server: หยุดชะงักในทรัพยากรบัฟเฟอร์การสื่อสารล็อค
สาเหตุที่เป็นไปได้สำหรับการหยุดชะงักประเภทนี้คืออะไร (ไม่ใช่การหยุดชะงักโดยทั่วไป) ล็อคทรัพยากรบัฟเฟอร์การสื่อสาร สิ่งนี้บ่งชี้ว่าระบบมีหน่วยความจำต่ำและบัฟเฟอร์นับไม่เกินขีด จำกัด หรือไม่? ข้อผิดพลาดโดยละเอียด: ทรานแซคชัน (ID กระบวนการ 59) ถูกหยุดชะงักในทรัพยากรบัฟเฟอร์การสื่อสารล็อคด้วยกระบวนการอื่นและได้รับเลือกเป็นเหยื่อการหยุดชะงัก รันธุรกรรมอีกครั้ง

5
SQL Deadlock บนคีย์คลัสเตอร์ที่ถูกล็อคแบบพิเศษ (พร้อม NHibernate) ที่ลบ / แทรก
ฉันทำงานเกี่ยวกับปัญหาการหยุดชะงักนี้มาหลายวันแล้วและไม่ว่าฉันจะทำอะไรมันยังคงมีอยู่ไม่ทางใดก็ทางหนึ่ง ขั้นแรกสถานที่ทั่วไป: เรามีการเข้าชมด้วย 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 …

3
รหัสเพื่อจำลองการหยุดชะงัก
ฉันกำลังทดสอบแอปพลิเคชันของฉันฉันต้องการรหัสบางอย่างที่เสถียรจำลองการหยุดชะงักบนเว็บไซต์ฐานข้อมูล (สคริปต์ sql ถ้าเป็นไปได้) ขอขอบคุณ. เพิ่ม: สร้าง deadlock ที่เกี่ยวข้องกับตารางเดียวเท่านั้น

4
รวมคำสั่ง deadlocking ตัวเอง
ฉันมีขั้นตอนดังต่อไปนี้ (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 …

2
กุญแจต่างประเทศสามารถทำให้เกิดการหยุดชะงักและขัดขวางการอ่าน SNAPSHOT ได้หรือไม่?
นี่เป็นคำถามติดตามจาก: /programming/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automatically ฉันยังคงมีสถานการณ์การหยุดชะงัก / หมดเวลาในโปรแกรมประยุกต์ ASP.NET READ_COMMITTED_SNAPSHOT ONเมื่อเรียกใช้รายงานขนาดใหญ่พร้อมกันถึงแม้ว่า ดังนั้นฉันมีสองคำถาม: ฉันจะตรวจสอบว่าภาพรวมธุรกรรมการแยกระดับการทำงานเป็นไปตามที่คาดไว้หรือไม่? ฉันสมมติว่าคีย์ต่างประเทศ (ในตารางของเว็บแอปพลิเคชันไปยังตารางรายงาน) มีหน้าที่รับผิดชอบการหยุดชะงัก ฉันพบบทความที่น่าสนใจนี้ : หมายเหตุ SQL Server จะได้รับการล็อกที่ใช้ร่วมกันเมื่อตรวจสอบคีย์ต่างประเทศแม้ว่าธุรกรรมกำลังใช้ snapshot ที่อ่านแล้ว (อ่านโดยใช้การกำหนดเวอร์ชันแถว) หรือระดับการแยกสแน็ปช็อต ระวังสิ่งนี้เมื่อตรวจสอบกราฟ deadlock จากทรานแซคชันเมื่อใช้ระดับการแยกทรานแซคชันเหล่านี้ หากคุณเห็นการล็อคที่ใช้ร่วมกันให้ตรวจสอบเพื่อดูว่าการล็อคนั้นเกิดขึ้นกับวัตถุที่อ้างอิงโดยคีย์ต่างประเทศหรือไม่ ฉันจะตรวจสอบได้อย่างไรว่า FK รับผิดชอบต่อสถานการณ์การหยุดชะงัก / หมดเวลาจริง ๆ หรือไม่นั่นหมายความว่าฉันสามารถลบกุญแจต่างประเทศเหล่านั้นเพื่อป้องกันการหยุดชะงัก (สิ่งที่จะเป็นความพยายามที่ยอมรับได้)? หมายเหตุ : ฉันแค่อ่านจากตารางที่ทำให้เกิดการหยุดชะงัก ความคิดใด ๆ ในหัวข้อนี้ชื่นชมอย่างมาก แก้ไข นี่คือการหยุดชะงักกราฟ บางทีใครบางคนอาจช่วยให้ฉันเข้าใจสิ่งที่ทำให้เกิดการหยุดชะงัก ดูเหมือนว่ามันจะเกิดขึ้นโดยไม่มีรายงานใด ๆ ที่ทำงานที่เกิดจากเว็บแอ็พพลิเคชันเท่านั้นเมื่อธุรกรรมสองรายการต้องการเขียนตารางเดียวกัน (หนึ่งการอัปเดตและหนึ่งการแทรกหนึ่งรายการ เหตุใดจึงมีการล็อกหน้าและวิธีเปิดใช้งานการล็อกแถวเท่านั้น? แทรก-SP …

2
การหยุดชะงักจากการล็อคบนตารางชั่วคราวเดียวกันในกระบวนการที่แตกต่างกัน
ฉันได้พบการหยุดชะงักที่ดูเหมือนจะแสดงสิ่งที่ฉันคิดว่าเป็นไปไม่ได้ มีสองกระบวนการที่เกี่ยวข้องในการหยุดชะงัก: 1. กระบวนการ 8cf948 SPID 63 ดำเนินการ ALTER TABLE บนตารางชั่วคราว #PB_Cost_Excp_Process_Invoices_Work เป็นเจ้าของล็อค IX บนโต๊ะ #PB_Cost_Excp_Process_Invoices_Work ด้วย ID วัตถุ 455743580 2. กระบวนการ 4cb3708 SPID 72 ดำเนินการใน UPDATE บนตารางชั่วคราว #PB_Cost_Excp_Process_Invoices_Work ซึ่งควรจะเป็นสำเนาเฉพาะของตาราง เป็นเจ้าของล็อค Sch-M ใน #PB_Cost_Excp_Process_Invoices_Work ด้วย ID วัตถุเดียวกัน 455743580 ! นี่น่าจะเป็นไปไม่ได้ ฉันพลาดอะไรไปรึเปล่า? #Temporary ตารางได้รับการใช้ซ้ำระหว่าง SPID ทั้งสองนี้จริง ๆ หรือไม่ นี่คือบน SQL Server …

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เพราะฉันเท่านั้นที่เคยต้องดูข้อมูลในตารางที่ว่าวิธีการ ฉันยังมีดัชนี nonclustered …

2
ปัญหาในการถอดรหัสการหยุดชะงักในบันทึกสถานะของ Innodb
เรากำลังเข้าถึง MySQL จากตัวเชื่อมต่อ Microsoft ADO.NET บางครั้งเราเห็นการหยุดชะงักต่อไปนี้ในสถานะ 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 …

2
โทรไปยังฟังก์ชั่นเดียวกันพร้อมกัน: เกิดการชะงักงันได้อย่างไร
ฟังก์ชั่นของฉันnew_customerถูกเรียกหลายครั้งต่อวินาที (แต่เพียงครั้งเดียวต่อเซสชัน) โดยเว็บแอปพลิเคชัน สิ่งแรกที่มันทำคือล็อค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 …

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) …
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
ข้อผิดพลาด Deadlock ไม่ส่งคืน SQL deadlock
Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. ฉันได้รับข้อผิดพลาดนี้แบบสุ่มเมื่อหนึ่งในเว็บไซต์ของฉันไม่ว่าง ฉันรู้คร่าวๆว่ามีชุดของตารางใดบ้าง แต่จากประสบการณ์ของฉันกับโปรแกรมอื่น ๆ ฉันมักจะได้รับ SQL คืนมาเมื่อเกิดการหยุดชะงัก มีธงที่ฉันควรเปิดเพื่อให้สิ่งนี้เกิดขึ้นหรือไม่ ฉันจะลองและดีบักการหยุดชะงักเองเป็นปัญหาที่แยกจากกันเนื่องจากนี่เป็นคำถามหลักของฉันในตอนนี้ ฉันใช้ SQL Server 2008 Standard Edition

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.