Sử dụng cột identity làm Clustered Key đáp ứng tốt cho hầu hết trường hợp, nhưng nó có khả năng mở rộng tốt, một ví dụ điển hình là có nhiều user khác nhau cùng lúc insert dữ liệu vào bảng, nó sẽ xảy ra tranh chấp ở phần cuối của Clustered Index.
Nói chi tiết hơn, khi nhiều user khác nhau insert data vào bảng, do tất cả insert đều dồn vào cuối Clustered Index, tại một thời điểm 1 user hay 1 thread chỉ được quyền thao tác, nó đặt khóa lên trang đó gọi là Exclusive Latch (EX), những user hay thread khác phải chờ đến khi EX được giải phóng mới được thao tác, tức mỗi thời điểm chỉ có một user được thao tác, nó không được read hay write gì cả, cho nên trường hợp này table này có tính mở rộng không cao.
Để khắc phục tình huống này có cách là tìm cách chia các insert ra khắp cây index, tức là không dùng Clustered Key dạng Identity nữa, mà dùng Identifier chẳng hạn...
http://www.sqlpassion.at/archive/2014/04/15/an-ever-increasing-clustered-key-value-doesnt-scale/
24/04/2014
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment