Trogn bài viết này, có một quan điểm cho rằng không nên sử dụng nolock trong câu lệnh update hay delete trong SQL Server, vì nó có thể dẫn đến kết quả sai, ví dụ sau đây sẽ chứng minh điều đó.
Như trong hình bên dưới, có 2 transaction, transacion #2 thực hiện update data, nhưng data này đã bị transaction #1 update trước đó, nhưng chưa được commit. Do transaction #2 sử dụng with (nolock), nó sẽ đọc dữ liệu được sử dụng ở transaction #1, làm kết quả câu lệnh update bị sai.
Thế nhưng trong 2 công ty của Mỹ tôi đã từng làm việc, một trong những rule họ áp đặt đối với các Developer là luôn sử dụng nolock khi viết câu lệnh SQL. Có lẽ trong môi trường của họ, việc sử dụng nolock là an toàn và không mắc phải tình huống minh họa như trên.
Tham khảo: http://www.codeproject.com/Articles/458019/SQL-Server-Why-we-should-avoid-the-NOLOCK-table-hi
10/01/2014
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment