2012-03-20 22 views
22

Tôi muốn biết thêm về các loại ổ khóa khác nhau của Cơ sở dữ liệu.Ổ khóa hàng, trang và bảng là gì? Và khi chúng được mua lại?

    • Row Khóa
    • Trang Locks
    • Bảng Khóa
  1. một trang là gì thực sự? Như tôi biết "hàng" đại diện cho một bản ghi, "bảng" đại diện cho tất cả các bản ghi trong một bảng. Nhưng trang là gì đối với một bảng?
  2. Khi nào các khóa này được cơ sở dữ liệu thu thập (kịch bản)?

Hãy giúp tôi hiểu những khái niệm này.

+2

Đây là một chủ đề lớn, do đó rất khó để trả lời các câu hỏi rất chung chung mà không cần viết câu trả lời rất dài. Nhưng đã có rất nhiều thông tin về nó trong tài liệu: http://msdn.microsoft.com/en-us/library/ms190615.aspx Tôi khuyên bạn nên bắt đầu bằng cách xem lại, sau đó quay lại và đặt câu hỏi cụ thể hơn về các điểm riêng lẻ không rõ ràng. Và vì đây là một trang web lập trình, bạn có thể nhận được câu trả lời 'khái niệm' tốt hơn tại dba.stackechange.com. – Pondlife

+1

Một trang ** ** là một khối lưu trữ đĩa 8K cố định chứa dữ liệu và chỉ mục của bạn và mọi thứ khác. Đó là yếu tố lưu trữ cơ bản nhất của SQL Server. Dữ liệu và chỉ mục luôn được tải vào bộ nhớ SQL Server trong ** trang ** hoàn chỉnh (ngay cả khi bạn muốn đọc một byte đơn, bạn sẽ nhận được trang 8k) –

+0

Đối với khóa - xem [Giới thiệu về Khóa trong SQL Server] (http: //www.sqlteam.com/article/introduction-to-locking-in-sql-server) và nhiều bài viết và bài đăng trên blog khác về khóa (chỉ google hoặc bing cho họ!) –

Trả lời

30

Row Khóa

Một khóa hàng là mức thấp nhất của granularity của khóa có thể trong SQL Server. Điều này có nghĩa là một hoặc nhiều hàng cụ thể sẽ bị khóa và các hàng liền kề vẫn có sẵn để khóa bằng truy vấn đồng thời.

Trang Khóa

Một khóa trang trong SQL Server sẽ khóa 8K giá trị của dữ liệu ngay cả khi truy vấn của bạn chỉ cần 10 byte từ trang. Vì vậy, truy vấn của bạn sẽ khóa dữ liệu bổ sung mà bạn không yêu cầu trong truy vấn của mình.

HOBt Khóa

Khi một bảng được phân chia với "SQL Server Table partitioning" có thể một phân vùng đơn sẽ bị khóa (HOBt là viết tắt của Heap hoặc B-Tree)

Lưu ý: Khóa leo thang tới các khóa HOBT bị tắt theo mặc định. chạy ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) để bật leo thang khóa HOBT.

Bảng Khóa khóa

Một bảng sẽ khóa bảng hoàn chỉnh.

là gì dữ liệu trang

Microsoft SQL Server tổ chức tất cả các dữ liệu của nó trong "Dữ liệu Pages" mà có thể giữ 8K giá trị của dữ liệu. Điều này có nghĩa rằng đối với bất kỳ truy cập dữ liệu nào trong thông tin SQL Server 8K sẽ được đọc.

trang dữ liệu chỉ có thể chứa thông tin từ một bảng và cách bố trí của một trang là well documented on MSDN

Thực tế là SQL Server sẽ luôn đọc một trang dữ liệu hoàn chỉnh cũng cung cấp cho bạn một ý tưởng tại sao nó thích sử dụng ổ khóa cấp độ trang . Ý nghĩa của khóa cấp trang là bạn có thể khóa nhiều dữ liệu hơn bạn nghĩ.

Ví dụ: giả sử chúng tôi có bảng có tổng kích thước bản ghi là 1024 byte với chỉ mục được nhóm trên trường ID.Khi chúng tôi chạy truy vấn sau: SELECT * from MyTable (xlock) where ID = 123 không chỉ bản ghi đó sẽ bị khóa, nhưng (tùy thuộc vào điền trang) tối đa 3 bản ghi bổ sung cũng sẽ bị khóa.

Khi là những ổ khóa mua

Một truy vấn sẽ được phân tích bởi thống đốc truy vấn và các khóa cần thiết sẽ được xác định và yêu cầu từ người quản lý khóa. SQL Server sẽ cố gắng tạo sự cân bằng giữa hiệu suất và tranh chấp để xác định chiến lược khóa.

Máy chủ SQL cũng tuân theo hệ thống "khóa leo thang" sẽ làm giảm độ chi tiết của khóa khi có hơn 5000 khóa thuộc loại nhất định đang được mua. Xem this article on lock escalation để biết thêm thông tin.

Hành vi này có thể được tinh chỉnh bằng khóa gợi ý với sự căng thẳng trên gợi ý, trong một truy vấn mà bạn có thể chỉ định cho mỗi bảng những loại ổ khóa bạn muốn. SQL Server sẽ cố gắng tôn trọng yêu cầu của bạn, nhưng nó vẫn sẽ áp dụng khóa leo thang.

Các vấn đề liên quan