Một số vấn đề xuất hiện khi có hai transaction cùng hoạt động trong MS SQL Server

Giả sử có 2 transaction đang truy xuất đồng thời trên 1 đơn vị dữ liệu. Có tất cả 4 trường hợp sau:

Trong connection C1 có một transaction như sau: Trong connection C2 có transaction như sau: Nhận xét
Đọc Đọc Không có tranh chấp
Đọc Ghi Xảy ra tranh chấp
Ghi Đọc Xảy ra tranh chấp
Ghi Ghi HQT chỉ cho phép có đúng 1 transaction được ghi trên đơn vị dữ liệu tại một thời điểm.

Như vậy khi có 2 transaction (của 2 connection khác nhau) có ít nhất 1 thao tác ghi trên cùng một đơn vị dữ liệu sẽ xảy ra tình trạng tranh chấp. Nếu để tình trạng tranh chấp này xảy ra sẽ dẫn đến những sai sót trên CSDL.


Để giải quyết các vấn đề tranh chấp nêu trên, hệ quản trị cơ sở dữ liệu cần sử dụng các phương thức khóa, nhờ vậy mà khi có tranh chấp xảy ra hệ quản trị cơ sở dữ liệu có thể quyết định transaction nào được thực hiện và transaction nào phải chờ.

Trong môi trường truy xuất đồng thời, có thể xảy ra một số vấn đề như sau:
  • Mất dữ liệu cập nhật (Lost update)
    • Tình trạng này xảy ra khi có nhiều hơn một giao tác cùng thực hiện cập nhật trên 1 đơn vị dữ liệu. Khi đó, tác dụng của giao tác cập nhật thực hiện sau sẽ đè lên tác dụng của thao tác cập nhật trước.
  • Đọc dữ liệu chưa commit (Uncommitted data, Dirty read)
    • Xảy ra khi một giao tác thực hiện đọc trên một đơn vị dữ liệu mà đơn vị dữ liệu này đang bị cập nhật bởi một giao tác khác nhưng việc cập nhật chưa được xác nhận.
  • Giao tác đọc không thể lặp lại (Unrepeatable data)
    • Tình trạng này xảy ra khi một giao tác T1 vừa thực hiện xong thao tác đọc trên một đơn vị dữ liệu (nhưng chưa commit) thì giao tác khác (T2) lại thay đổi (ghi) trên đơn vị dữ liệu này. Điều này làm cho lần đọc sau đó của T1 không còn nhìn thấy dữ liệu ban đầu nữa.
  • Bóng ma (Phantom)
    • Là tình trạng mà một giao tác đang thao tác trên một tập dữ liệu nhưng giao tác khác lại chèn thêm các dòng dữ liệu vào tập dữ liệu mà giao tác kia quan tâm. 





No comments:

Post a Comment