Avatar
0
Nguyễn Thái Sơn Professional
Nguyễn Thái Sơn Professional
deadlock thực tế
Hôm trước em có bài toán Transaction bị deadlock nhưng lần này em chia sẻ cụ thể hơn <p> </p> <p> Ở cùng 1 thời điểm, có 2 transaction A và B xảy ra đồng thời </p> <p> </p> <p> A sẽ update record có id = 1 ở bảng user sau đó update record có id = 2 ở bảng address </p> <p> </p> <p> B sẽ update record có id = 2 ở bảng address và update record có id = 1 ở bảng user </p> <p> </p> <p> Vậy là deadlock, để tránh thì đơn giản em sẽ quy ước trong Transaction gọi bảng nào trước bảng nào để tránh deadlock, nhưng như vậy quá khó vì 1 hệ thống có trăm bảng, không thế nhớ hết như vậy được. Nếu là anh, anh sẽ làm gì </p>
Answer
Avatar
1
Nguyễn Thái Sơn Professional
Nguyễn Thái Sơn Professional
tránh deadlock với Transaction trong Database
Anh ơi, khi 1 ứng dụng có 2 thread Update  2 bảng A đến B và B đến A với cùng 1 record sẽ xảy ra deadlock, điều này không tránh khỏi. 2 thread sẽ chờ nhau nhả khoá dẫn đến cả 2 transaction không bao giờ được commit. Vậy khi gặp trường hợp này anh làm cách nào ngoài việc restart Database. Để tránh deadlock, đa số mọi người sẽ khuyên các thao tác update Database trong 1 transaction luôn cùng thứ tự, ví dụ như A đến B như trong ví dụ trên. Như vậy với 1 hệ thống hàng chục, hàng trăm bảng khi ta làm việc với Transaction, muốn tránh deadlock thì  dev phải quy ước phải update bảng nào trước bảng nào, như vậy liệu có ổn không ạ. Người developer sẽ phải ghi nhớ, kiểm tra nên update bảng nào trước, bảng nào. Anh có phương án nào cho việc này không ạ
Answer