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