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

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

2
การอัพเดตดัชนีเซิร์ฟเวอร์ SQL หยุดชะงัก
ฉันมี 2 แบบสอบถามซึ่งเมื่อทำงานในเวลาเดียวกันจะทำให้เกิดการหยุดชะงัก แบบสอบถาม 1 - อัปเดตคอลัมน์ซึ่งรวมอยู่ในดัชนี (ดัชนี 1): update table1 set column1 = value1 where id = @Id ใช้ X-Lock บน table1 จากนั้นลอง X-Lock บน index1 แบบสอบถาม 2: select columnx, columny, etc from table1 where {some condition} นำ S-Lock ไปที่ index1 จากนั้นลอง S-Lock บน table1 มีวิธีการป้องกันการหยุดชะงักในขณะที่รักษาข้อความค้นหาเดียวกันหรือไม่ ตัวอย่างเช่นฉันสามารถใช้ X-Lock ในดัชนีในธุรกรรมการปรับปรุงก่อนการปรับปรุงเพื่อให้แน่ใจว่าการเข้าถึงตารางและดัชนีอยู่ในลำดับเดียวกัน …

1
SQL Extended Events Session สำหรับการตรวจจับการชะงักงัน
มีวิธีในการเพิ่มขนาดของ<inputbuf>องค์ประกอบในการหยุดชะงัก XML ที่บันทึกโดยเซสชันเหตุการณ์ที่เพิ่มขึ้นของการหยุดชะงักหรือไม่? เราต้องการดูแบบสอบถามที่สมบูรณ์เพื่อช่วยระบุปัญหาในรหัสแอปพลิเคชัน ดูเหมือนว่าจะถูก จำกัด ที่ 1024 อักขระ +/- จะเพิ่มขึ้นได้ไหม ดูตัวอย่าง XML ด้านล่าง คุณจะเห็นว่าข้อความค้นหาใน<inputbuf>องค์ประกอบนั้นถูกตัดกลางรายการที่เลือก: <deadlock> <victim-list> <victimProcess id="processc9c0829848" /> </victim-list> <process-list> <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" …

2
แบบสอบถามทั้งสองนี้จะส่งผลให้เกิดการหยุดชะงักหากดำเนินการตามลำดับหรือไม่
นี่เป็นสาเหตุของคำถามอื่น ๆ ของฉันแต่ฉันคิดว่ามันคุ้มค่าที่จะแยกทั้งสองออกจากกันเนื่องจากฉันมีสมมติฐานตามบันทึกต่อไปนี้ที่ฉันชอบที่จะปลอมแปลงหรือตรวจสอบ สมมติฐานของฉันคือว่าการหยุดชะงักอื่น ๆเป็นผลมาจากการสอบถามต่อไปนี้โดยมีการซ่อนแบบสอบถามดั้งเดิมที่อยู่บนพื้นฐานของความเข้าใจของฉันสถานะ Innodb แสดงเฉพาะธุรกรรมล่าสุด (ถูกต้องหรือไม่) จากบันทึกฉันได้ตรวจสอบรหัสของเราและพบว่ามีการค้นหาสองรายการต่อไปนี้ตามลำดับ: db.Execute("UPDATE people SET iphone_device_id=NULL WHERE iphone_device_id=@0 AND people_id<>@1", DeviceID, m_User.people_id); // I have hard coded this query in this snippet to simplify things db.Execute("UPDATE people SET company_id = 444, name = 'Dad', password = '<pass>', temp_password = NULL, reset_password_hash = NULL, …

1
ความหมายของ 'ล็อคบันทึก แต่ไม่ต้องรอช่องว่าง' ในรายงานการหยุดชะงัก
เกี่ยวกับความหมายของlocks rec but not gap waitingในธุรกรรม (1) ข้อใดที่ถูกต้อง? ได้รับการล็อคช่องว่างรอดัชนี X คลัสเตอร์อยู่หรือไม่ ได้รับดัชนีดัชนี X lock แล้วรอการล็อคช่องว่างอยู่หรือไม่ ธุรกรรมมี 31 แถว (1) ความหมายของแถวเหล่านั้นคืออะไร? สิ่งนี้แสดงถึงการล็อคช่องว่างหรือไม่? 0: len 4; hex 800c20d6; asc ;; .... 29: SQL NULL; 30: SQL NULL; รายงาน DEADLOCK ที่ตรวจพบล่าสุด LATEST DETECTED DEADLOCK ------------------------ 2015-09-25 15:27:24 1b8084000 *** (1) TRANSACTION: TRANSACTION 5226928, …
12 mysql  deadlock 

1
ดูการหยุดชะงักหลายครั้งที่ผ่านมา
ฉันเห็นว่าฉันสามารถดูการหยุดชะงักล่าสุดใน mysql / innodb แต่มีวิธีดูการหยุดชะงักที่ผ่านมาหรือไม่ เรามีปัญหาการหยุดชะงักสองประการประเด็นหนึ่งมีความสำคัญ การหยุดชะงักที่สำคัญน้อยกว่าเกิดขึ้นวันละหลายครั้งดังนั้นจึงกลายเป็นการหยุดชะงัก "ล่าสุด"

2
เหตุผลที่ดีในการใช้ SELECT ... ด้วย XLOCK
ฉันกำลังเผชิญหน้ากับการหยุดชะงักที่เกิดขึ้นอีกครั้งหนึ่งในนั้นคือ Keylock และมีการสืบค้น SELECT พร้อมคำใบ้ XLOCK ที่กลายเป็นเหยื่อการหยุดชะงัก คำสั่งอื่น ๆ คือการแทรกลงในหนึ่งในตารางที่เป็นส่วนหนึ่งของมุมมองของแบบสอบถามแรก ดู: create view dbo.viewE as select * from dbo.E where myValue > 13000 เลือกคำค้นหา: select * from dbo.viewE with (XLOCK) where A > GETUTCDATE() คำสั่ง INSERT: INSERT INTO [dbo].[E] (myValue,A) VALUES (10,GetDate()) ตารางต้นแบบ dbo.E มีพื้นที่ประมาณ 3 ล้านแถวในประมาณ 20 คอลัมน์บางส่วนเป็น ntext …

1
การหยุดชะงักในการลบคำชี้แจง
ฉันได้รับการหยุดชะงักเมื่อ SQL Server Job ทำงาน การหยุดชะงักเกิดขึ้นกับคำสั่ง DELETE ง่าย ๆ ฉันคิดว่าจะต้องมีคิวรี SELECT / UPDATE ที่ทำงานอยู่เพื่อให้เกิดการหยุดชะงักหรือไม่ แต่ดูเหมือนว่าจะเป็นการหยุดชะงัก / DELETE ... สิ่งที่ฉันกำลังมองหาคือสาเหตุที่ฉันได้รับการหยุดชะงักของ DELETE / DELETE มันคือ (ความรู้ของฉัน) ผ่านในพารามิเตอร์ที่แตกต่างกัน ความคิดใด ๆ ขอบคุณ deadlock-list 2014-05-20 07:30:09.66 spid25s deadlock victim=process409048 2014-05-20 07:30:09.66 spid25s process-list 2014-05-20 07:30:09.66 spid25s process id=process409048 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127294 waittime=4352 ownerId=629860973 transactionname=DELETE …

1
SQL Server Deadlock สำหรับการอัพเดตสองครั้งเนื่องจากคำสั่งล็อคดัชนี
ฉันมีการอัปเดตสองครั้ง - หนึ่งล็อค CI ก่อนจากนั้น NCI (ตามสถานะ) เนื่องจากคอลัมน์สถานะกำลังอัปเดตด้วย อีกคนหนึ่งเป็นเจ้าของล็อค U บน NCI เพราะรู้ว่ามันกำลังเปลี่ยนแปลงและพยายามดึง U ล็อคบน CI วิธีที่ง่ายที่สุดในการบังคับให้สิ่งเหล่านี้เป็นอันดับคืออะไร ดูเหมือนแปลกที่จะใช้คำใบ้ระดับ Table เนื่องจากนี่เป็นปัญหาการจัดทำดัชนีภายใน - มีเพียงหนึ่งตารางที่เกี่ยวข้อง - UPDLOCK จะ HOLDLOCK จะใช้กับดัชนีทั้งหมดที่จำเป็นในตารางนั้นโดยอัตโนมัติหรือไม่ นี่คือแบบสอบถาม: UPDATE htt_action_log SET status = 'ABORTED', CLOSED = GETUTCDATE() WHERE transition_uuid = '{F53ADDDA-E46B-4726-66D8-D7B640B66597}' AND status = 'OPEN'; X ตัวนั้นล็อกแถวใน CI (บนคอลัมน์ CREATED) …

1
เหตุใดจึงมีรายการที่ตกเป็นเหยื่อบนกราฟการหยุดชะงัก
ฉันพยายามเรียนรู้วิธีการวิเคราะห์กราฟการหยุดชะงักของ SQL Server 2008และฉันค้นหารายการจำนวนมากด้วย<victim-list>โหนดว่าง ฉันไม่เข้าใจสิ่งที่รายการเหล่านี้เป็นตัวแทน: หากไม่มีเหยื่อฉันจะระบุแหล่งรอที่ทำให้เกิดการหยุดชะงักได้อย่างไร ผลงานเหล่านี้หมายถึงอะไร นี่คือตัวอย่างย่อของรายการที่ฉันเห็น: <deadlock-list> <deadlock> <victim-list /> <process-list> <process id="processd2b6508" taskpriority="0" logused="10000" waittime="31" schedulerid="63" kpid="9104" status="suspended" spid="69" sbid="0" ecid="184" priority="0" trancount="0" lastbatchstarted="2012-07-30T01:10:45.550" lastbatchcompleted="2012-07-30T01:10:45.550" clientapp=".Net SqlClient Data Provider" hostname="XXXXXXX" hostpid="3648" isolationlevel="read committed (2)" xactid="30461033" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="" line="1" sqlhandle="0x020000002340c50225c17d0eec9bf7c51129348edffd1c70" /> <!--About 2 …

5
วิธีการตรวจสอบการหยุดชะงัก
คุณเริ่มแก้ไขปัญหาการหยุดชะงักของ SQL Server 2005/2008 เมื่อใดและอย่างไร การแจ้งเตือนถูกเปิดใช้งาน SSMS ผ่านการแจ้งเตือนสภาพประสิทธิภาพของ SQL Server, วัตถุ -> SQLServer: ล็อค, Counter-> ล็อค Waits / Sec, อินสแตนซ์: _Total, การแจ้งเตือนหากตัวนับ: เพิ่มขึ้นสูงกว่าค่า 3 นี่เป็นวิธีเชิงรุก ค่าที่ยอมรับได้คืออะไร? ฉันขอขอบคุณที่คุณช่วย ขอขอบคุณ!!!

2
เหตุใดแบบสอบถามนี้ทำให้เกิดการหยุดชะงัก
เหตุใดแบบสอบถามนี้ทำให้เกิดการหยุดชะงัก UPDATE TOP(1) system_Queue SET [StatusID] = 2, @ID = InternalID WHERE InternalID IN ( SELECT TOP 1 InternalID FROM system_Queue WHERE IsOutGoing = @IsOutGoing AND StatusID = 1 ORDER BY MessageID ASC, InternalID ASC) เพิ่มกราฟการหยุดชะงัก: <keylock hobtid="72057594236436480" dbid="9" objectname="Z.dbo.system_Queue" indexname="PK_system_Queue" id="lock5b25cc80" mode="X" associatedObjectId="72057594236436480"> <owner-list> <owner id="processc6fe40" mode="X"/> </owner-list> <waiter-list> …

6
สถานการณ์ที่ดีที่สุดในการใช้ระดับการแยก READ UNCOMMITTED
ดังที่เราทุกคนทราบกันดีว่าการอ่านไม่ได้รับการยอมรับนั้นเป็นระดับการแยกต่ำสุดที่สิ่งต่าง ๆ เช่นการอ่านสกปรกและการอ่าน phantom อาจเพิ่มขึ้น เวลาที่ดีที่สุดในการใช้ระดับการแยกนี้เมื่อใดและด้วยเหตุผลใดบ้างที่ควรใช้ ที่จริงฉันอ่านคำตอบก่อนหน้านี้ แต่ฉันไม่สามารถเข้าใจได้อย่างสมบูรณ์เพราะมีตัวอย่างไม่เพียงพอ

2
หากการหยุดชะงักของเหตุการณ์ Parallelism Exchange นั้นน้อยกว่าเหยื่อจะเป็นปัญหาหรือไม่?
เราเห็นจำนวนDeadlocks แบบขนานภายในเธรดเหล่านี้จำนวนมากในสภาพแวดล้อมการผลิตของเรา (SQL Server 2012 SP2 - ใช่ ... ฉันรู้ ... ) อย่างไรก็ตามเมื่อดู Deadlock XML ที่ถูกบันทึกผ่าน Extended Events รายการเหยื่อนั้นว่างเปล่า <victim-list /> deadlocking ปรากฏอยู่ระหว่าง 4 กระทู้สองกับสองกับWaitType="e_waitPipeNewRow"WaitType="e_waitPipeGetRow" <resource-list> <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19"> <owner-list> <owner id="process4649868" /> </owner-list> <waiter-list> <waiter id="process40eb498" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21"> <owner-list> <owner id="process368ecf8" /> </owner-list> …

2
คำใบ้ Tablock ทำให้เกิดการหยุดชะงัก
ฉันใส่ชุดข้อมูลสองชุดโดยใช้การบันทึกขั้นต่ำลงในตาราง heap ที่ว่างโดยใช้ Execute SQL Tasks สองชุดที่ทำงานแบบขนานและ SQL ในรูปแบบต่อไปนี้ INSERT INTO Table (TABLOCK) SELECT FROM ... หลังจากงานหยุดทำงานหนึ่งในงาน SQL กลายเป็นเหยื่อการหยุดชะงัก ด้านล่างคือเอาต์พุต XML ของกราฟเดดล็อก ใครสามารถอธิบายสิ่งที่เกิดขึ้นภายใต้ประทุนได้หรือไม่? <resource-list> <objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746"> <owner-list> <owner id="process9609dc8" mode="Sch-S"/> <owner id="process9609dc8" mode="IX"/> </owner-list> <waiter-list> <waiter id="process5e13048" mode="X" requestType="convert"/> </waiter-list> </objectlock> <objectlock lockPartition="0" …

1
SQL Server จะรับการล็อคเมื่อใด
รายการระดับการแยกใน SQL Server พบได้ที่นี่ระบุว่าการล็อกการเขียนที่ได้รับภายในธุรกรรมถูกเก็บไว้จนกว่าจะสิ้นสุดการทำธุรกรรม อย่างไรก็ตามมันไม่ได้พูดถึงอะไรเกี่ยวกับเวลาที่ได้รับล็อคเหล่านี้ การล็อกตามค่าเริ่มต้นได้มาเมื่อเริ่มต้นธุรกรรมหรือเมื่อจำเป็น หากหลังเป็นจริงจึงเป็นประโยชน์ในการทำธุรกรรมขนาดใหญ่เพื่อดำเนินการเขียนให้ช้าที่สุดเพื่อลดระยะเวลาที่ล็อค X ไว้หรือไม่

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