Một số câu hỏi về SGAM & GAM & IAM & PFS trong SQL Server


8

Có một số câu hỏi về cấu trúc bên trong của SQL Server.

Giả sử rằng chúng ta có một bảng trong cơ sở dữ liệu.

  1. Các trang SGAM & GAM theo dõi các phạm vi được chia sẻ và thống nhất trong một khoảng GAM duy nhất (~ 4GB) và giúp chúng tôi tìm loại mức độ phù hợp khi phân bổ các trang / phạm vi (ban đầu 8 trang được phân bổ từ các phạm vi và vị trí hỗn hợp của các trang đó ghi vào các trang IAM và sau đó từ các phạm vi GAM (phạm vi đồng nhất) và thông tin này được lưu trữ trong trang IAM được xâu chuỗi tiếp theo).

    Giả sử, các trang cho bảng đã được phân bổ và kích thước bảng là hơn 8 trang và đôi khi, các hàng đã bị xóa, để lại một số không gian có thể sử dụng lại. Làm thế nào SQL Server biết rằng phạm vi có không gian trống?

    Các trang có thông tin về kích thước của không gian trống, nhưng quá tốn thời gian để kiểm tra mỗi trang. Các bit trong trang SGAM & GAM không cho chúng tôi biết bất cứ điều gì bên cạnh phần mở rộng được phân bổ hoặc có một số trang miễn phí (toàn bộ trang là miễn phí, không phải một phần).

  2. Các trang tiêu đề tệp & SGAM & GAM & IAM nằm trong số các trang đầu tiên trong một tệp. Cấu trúc dữ liệu nào thực sự chỉ ra chúng?

Câu trả lời:


11

Làm thế nào SQL Server biết rằng phạm vi có không gian trống?

SQL Server theo dõi không gian trống trên trang, trong các bảng heap cũng như trong các trang LOB sử dụng trang PSF bên trong.

Ngoài ra, bạn có thể sử dụng sys.dm_db_file_space_usageDMV để tìm hiểu total_page_count, allocated_extent_page_countcũng như unallocated_extent_page_counttrong cơ sở dữ liệu.

Các trang không gian trống (PFS) của trang ghi lại trạng thái phân bổ của từng trang, cho dù một trang riêng lẻ đã được phân bổ và lượng không gian trống trên mỗi trang. PFS có một byte cho mỗi trang, ghi lại xem trang có được phân bổ hay không và nếu có, nó có trống không, đầy đủ 1 đến 50 phần trăm, đầy đủ 51 đến 80 phần trăm, đầy đủ 81 đến 95 phần trăm hoặc đầy đủ 96 đến 100 phần trăm.

Trang PFS là trang đầu tiên sau trang tiêu đề tệp trong tệp dữ liệu (trang số 1). Tiếp theo là trang GAM (trang số 2) và sau đó là trang SGAM (trang 3). Có một trang PFS có kích thước khoảng 8.000 trang sau trang PFS đầu tiên. Có một trang GAM khác 64.000 phạm vi sau trang GAM đầu tiên trên trang 2 và một trang SGAM khác 64.000 phạm vi sau trang SGAM đầu tiên trên trang 3. Hình minh họa sau đây cho thấy chuỗi các trang được Công cụ cơ sở dữ liệu sử dụng để phân bổ và quản lý phạm vi.

Nhấn vào đây để phóng to - đầu ra bằng TRANG DBCC

nhập mô tả hình ảnh ở đây

Tham khảo: Inside The Storage Engine: GAM, SGAM, PFS và các bản đồ phân bổ khác

Các trang tiêu đề tệp & SGAM & GAM & IAM nằm trong số các trang đầu tiên trong một tệp. Cấu trúc dữ liệu nào thực sự chỉ ra chúng?

Tôi không nhận được câu hỏi này. Đơn vị lưu trữ nhỏ nhất là một trang. Tám trang 8K tạo thành một phạm vi. Dưới đây là những gì bao gồm một trang dữ liệu :

nhập mô tả hình ảnh ở đây

Tôi đặc biệt khuyên bạn nên đọc blog SQLSkills.com trong đó Paul và nhóm của anh ấy viết blog rất nhiều về nội bộ của SQL Server .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.