Deadlock trong truy vấn cơ sở dữ liệu SQL Server

18:29 18/09/2023

Trong truy vấn cơ sở dữ liệu SQL Server, lập trình viên phải tìm ra các lỗi deadlock để các lệnh có thể kết thúc và giải phóng tài nguyên.

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.

Để tìm ra các lỗi DeadLock trong truy vấn cơ sở dữ liệu của SQL Server, chúng ta có thể sử dụng một trong các phương pháp sau:

  • Thực thi câu lệnh T-SQL SP_LOCK của SQL Server để tìm các trạng thái WAIT cho các phiên đang bị chặn

USE master;

GO

EXEC sp_lock;

GO

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

SELECT * FROM sys.sysprocesses WHERE blocked > 0

  • 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)

  • Đế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’

  • 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 bạn đã biết cách tìm ra các lỗi deadlock trong truy vấn CSDL SQL Server chưa? Hãy đọc kĩ bài này để thực hiện thành công nhé!

Bộ môn Ứng dụng phần mềm
Trường Cao đẳng FPT Mạng cá cược bóng đá cơ sở Hà Nội

Cùng chuyên mục

Đăng Kí học Fpoly 2023