Deadlock SQL là gì

DeadLock là hiện tượng tranh chấp tài nguyên giữa hai hay nhiều lệnh trong đó lệnh này giữ tài nguyên mà lệnh kia cần dẫn tới việc không lệnh nào có thể kết thúc để giải phóng tài nguyên.
Ví dụ:

  • Giao dịch T1 giữ được tài nguyên R1, nhưng cần tài nguyên R2 để kết thúc và giải phóng R1
  • R2 lại đang bị T2 giữ và T2 cần R1 để kết thúc và sau đó giải phóng R2.
  • Trong trường hợp này cả T1 và T2 không thể kết thúc. Trường hợp này trong SQL Server sẽ phải chọn kill một trong hai giao dịch.

Xem thêm bài //timoday.edu.vn/phan-tich-deadlock-trong-co-so-du-lieu-va-cach-phong-tranh/ Trong bài này chúng tôi giới thiệu các cách khác nhau để tìm ra các lỗi DeadLock trong truy vấn cơ sở dữ liệu của SQL Server

1. Sử dụng câu lệnh T-SQL SP_LOCK

Thực thi câu lệnh T-SQL SP_LOCK của SQL Server, bạn có thể tìm các status là WAIT cho các phiên đang bị chặn.

USE master; GO EXEC sp_lock; GO


Xem thêm tại đây

2. Sử dụng câu lệnh truy vấn với sys.sysprocesses

SELECT * FROM sys.sysprocesses WHERE blocked > 0

3. Sử dụng trình DVM (Dynamic Management Views)

SELECT der.blocking_session_id AS BlockingSessionID ,dest.text AS BlockingStatement FROM sys.dm_exec_connections AS sdec INNER JOIN sys.dm_exec_requests AS der ON sdec.session_id = der.blocking_session_id INNER JOIN sys.dm_os_waiting_tasks AS dowt ON der.session_id = dowt.session_id CROSS APPLY sys.dm_exec_sql_text(sdec.most_recent_sql_handle) AS dest

4. Sử dụng sys.dm_tran_locks

SELECT request_session_id AS SPID ,DB_NAME(resource_database_id) AS DatabaseName ,resource_type AS LockedResource ,request_mode AS LockType FROM sys.dm_tran_locks

5. Bật cờ theo dõi bắt buộc để ghi thông tin liên quan đến DeadLock trong Tracefile

DBCC TRACEON (1204, -1) DBCC TRACEON (1222, -1)

6. Đếm tổng số lần xảy ra DeadLock

SELECT cntr_value AS TotalNumberOfDeadLocks FROM sys.dm_os_performance_counters WHERE counter_name = 'Number of Deadlocks/sec' AND instance_name = '_Total'

7. Sử dụng Extended Events và đoạn script bên dưới để tạo một Extended Event cho theo dõi DeadLock

CREATE EVENT SESSION [Deadlock_Monitor] ON SERVER ADD EVENT sqlos.scheduler_monitor_deadlock_ring_buffer_recorded, ADD EVENT sqlserver.lock_deadlock, ADD EVENT sqlserver.lock_deadlock_chain, ADD EVENT sqlserver.xml_deadlock_report ADD TARGET package0.event_file(SET filename=N'C:\Temp\Deadlock_Monitor.xel') WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON) GO

Bạn có thể sử dụng SSMS để tạo Extended Events cho DeadLock, và có thể theo dõi trạng thái trực tiếp của server.

Xem kết quả khi xảy ra DeadLock:

8. Sử dụng SQL Server Profiler

SQL Server Profiler có ba kiểu sự kiện khác nhau để bắt DeadLock:

  • Deadlock graph
  • Lock: Deadlock
  • Lock: Deadlock Chain
    Bước 1: Chọn Template là Blank

    Bước 2: Chọn kiểu Events là Locks để bắt các sự kiện liên quan đến DeadLock

Các thẻ: DeadLockSQL ServerT-SQL

Các hệ cai quản trị đại lý dữ liệu bảo đảm an toàn tài nguyên ổn trong database bao gồm tính đồng hóa (consistency), có nghĩa là cùng một dữ liệu sẽ không thể phát âm ghi tại cùng một thời điểm. Vấn đề này đang mang đến hiện tượng kỳ lạ những câu lệnh đang lock cho nhau. ví dụ như như:

Lệnh Select vẫn xung chợt cùng với những lệnh Update, Insert, Delete. Vì những lệnh Update, Insert, Delete làm chuyển đổi dữ liệu của một table vấn đề đó dẫn đến sự việc câu lệnh Select đã không hề đúng đắn nữa vào ngôi trường thích hợp sẽ Select thì đại lý dữ liệu lại bị thay đổi mất.Các câu lệnh Select sẽ không còn lochồng nhauCác câu lệnh Update, Insert, Delete vẫn chỉ lochồng bên trên thuộc 1 row tài liệu chứ không cần bên trên cùng 1 bảng. Tức là mặc dù các câu lệnh thuộc xẩy ra bên trên 1 bảng tuy nhiên nếu ko tranh con chấp 1 row thì sẽ không còn lock lẫn nhau => vẫn thực hiện thông thường.quý khách đã xem: Deadlock là gì

Deadlock

Những lệch lạc Lúc làm việc với database hay giữ lại đầy đủ hậu quả khôn cùng rất lớn, cần lock là một trong kế hoạch rất tốt nhằm giảm phòng ngừa hiện tượng lạ này (mặc dù có tác động tí chút đến performance bởi vì các lệnh đang chờ nhau để thực hiện tuần tự).Nhưng Deadlochồng lại không giống, nó dẫn cho ko 1 câu lệnh như thế nào được tiến hành.

Bạn đang xem: Deadlock là gì

Dưới cơ chế quản lý thường thì, một quy trình có thể sử dụng một tài nguim chỉ trong sản phẩm từ bỏ sau:

Yêu cầu: trường hợp đòi hỏi tất yêu được gán tức tốc (thí dụ, tài nguyên đang được sử dụng vày quá trình khác) thì quy trình đang yêu thương cầu yêu cầu chờ cho đến lúc nó hoàn toàn có thể nhận được tài nguyên.Sử dụng: quy trình hoàn toàn có thể quản lý và điều hành tài nguyênGiải phóng: quy trình giải phóng tài nguyên ổn.

Deadlock là hiện tượng lạ tranh ma chấp tài nguim thân nhì giỏi nhiều lệnh trong những số đó lệnh này giữ lại tài ngulặng cơ mà lệnh cơ bắt buộc mang tới câu hỏi không lệnh như thế nào rất có thể hoàn thành nhằm giải phóng tài nguim. Nếu ko được xử lý sẽ dẫn mang đến hiện tượng các câu lệnh đã hóng nhau và không 1 quy trình làm sao sẽ tiến hành triển khai tiếp.

Xem thêm: Sơ Ri Tiếng Anh Là Gì ? Trái Anh Đào Hay Trái Sơri



Cách giảm tđọc năng lực xẩy ra deadlock

Một phương thức nhằm rời deadloông xã là áp dụng logic nhất quán vào cả áp dụng. Trong ví dụ đang cho sinh hoạt trên, Transaction truy vấn students với grades buộc phải luôn truy cập vào những bảng theo và một trang bị từ bỏ.Theo cách này, trong kịch phiên bản được biểu đạt ngơi nghỉ bên trên, đưa sử nlỗi máy trường đoản cú truy vấn thắt chặt và cố định của 2 bảng là students -> grades. Trong trường hợp này thì T2 đã buộc phải ngóng T1 giải phóng tài nguim trên bảng students thì mới có thể bắt đầu (Tức là T2 sẽ không loông chồng tài nguyên của bảng grades) cho nên vì vậy T1 vẫn tiến hành 1 cách thông thường rồi T2 bắt đầu triển khai với deadloông chồng sẽ không còn xẩy ra.

Cách phạt hiện Deadlock

Các hệ cửa hàng tài liệu cần phải có phương pháp nhằm có thể phạt hiển thị khi nào deadloông xã xảy ra, rời dẫn tới việc khối hệ thống bị đình trệ vượt lâu. Thậm chí hệ các đại lý tài liệu cần được theo dõi và quan sát tiến trình loông chồng tài liệu cho dù nó có dẫn mang lại deadloông xã hay không

Wait-for graph là một Một trong những phương pháp để vạc hiện deadloông xã. Phương pháp này tương xứng với đại lý dữ liệu nhỏ rộng. Trong cách thức này, một biểu trang bị được vẽ dựa vào Transaction với lock chúng trên tài nguim. Nếu trang bị thị được sinh sản có một vòng khxay bí mật hoặc một chu kỳ, thì có một deadloông xã.

lấy một ví dụ về 1 biểu thiết bị lúc xẩy ra deadlochồng dựa vào cách thức Wait-for graph


Một số xem xét về áp dụng Transaction

Việc thực hiện transaction cần phải hiểu ý nghĩa và không nên lạm dụng quá. Yếu tố đặc biệt của transaction là nhằm bảo đảm chuỗi câu lệnh trong những số ấy giả dụ gồm một câu lệnh không hoàn thình thì tổng thể transaction sẽ không được ngừng.Nhưng giả dụ có một nghiệp vụ cập nhật thông báo làm hồ sơ mang lại học viên khác như sau:

Lệnh 1: update tuổi bảng profile

Lệnh 2: update điểm bảng grades

Rõ ràng nhằm tiến hành nghiệp vụ trên cần được tiến hành cả nhì hành động trên, cơ mà không Có nghĩa là giả dụ lệnh 2 ko thành công xuất sắc thì lệnh 1 ko được triển khai, vày sau đó ta trọn vẹn rất có thể khám nghiệm là lệnh 1 nhưng xúc tiến rồi thì chỉ tiến hành lệnh 2, việc ko triển khai bên cạnh đó nhì lệnh bên trên không làm cho sai nhiệm vụ của khối hệ thống.

Tránh áp dụng transaction về tối nhiều bao gồm thểTransaction càng nlắp càng tốt

Tmê man khảo:

//www.geeksforgeeks.org/deadlock-in-dbms/

//medium.com/saurav200892/what-is-deadlock-and-how-to-avoid-it-ab5eff4feff1

Video liên quan

Chủ đề