2011-01-11 40 views
19

Tôi đã xem qua trang trong SQL Server 2008 và có phần nhầm lẫn về nó. Tôi hiện đang đọc MCTS Self-Paced Training Kit (Exam 70-433): Microsoft SQL Server 2008-Database Development, nơi tác giả thảo luận về khái niệm này, nhưng theo một cách hạn chế.Một trang trong SQL Server là gì và tôi có cần phải lo lắng không?

Từ MSDN "Understanding Pages and Extents" Tôi nhận được câu trả lời không thực sự hữu ích. Trang web mô tả kích thước (8kb) của một trang và cách các hàng được lưu trữ trong trang và cách các cột sẽ được tự động di chuyển (bởi SQL Server) nếu các hàng không phù hợp trong trang.

Nhưng tôi vẫn tự hỏi liệu cấp trang có phải là thứ tôi nên chú ý khi thiết kế cơ sở dữ liệu với sơ đồ ER, bảng và loại dữ liệu không? Hoặc, tôi chỉ nên dựa vào đó SQL Server xử lý các trang tự động và theo cách tốt nhất có thể?

alt text

Thanx để nghe!

+1

Tài liệu MS chủ yếu là BS. Bạn không cô đơn. –

Trả lời

30

CÓ! Trang là phần tử lưu trữ cơ bản nhất trong SQL Server.

Trong số 8192 byte trên trang, xấp xỉ. 8060 có sẵn cho bạn với tư cách là người dùng. Nếu bạn có thể quản lý để phù hợp với các hàng dữ liệu của bạn trên trang độc đáo, chúng sẽ chiếm ít dung lượng hơn.

Nếu hàng dữ liệu của bạn, ví dụ: dài 4100 byte, chỉ một hàng duy nhất sẽ được lưu trữ trên một trang (và phần còn lại của trang - 3960 byte - là không gian bị lãng phí). Điểm quan trọng là: những trang đó không chỉ có liên quan trên đĩa, mà còn trong bộ nhớ chính của SQL Server -> bạn muốn cố gắng tránh các vùng không gian lớn không thể chứa bất kỳ thông tin hữu ích nào trên một trang.

Nếu bạn có thể quản lý để giảm hàng của bạn để mất 4000 byte, sau đó đột nhiên bạn có thể lưu trữ hai hàng trên một trang, và do đó làm giảm đáng kể chi phí của không gian lãng phí (xuống đến 60 byte mỗi trang).

+1

Thanx Marc! Đó chỉ là những gì tôi cần biết.Vì vậy, lớn hơn các hàng dữ liệu, quan trọng hơn nó là để biết có bao nhiêu byte nó chứa - để đảm bảo không gian được sử dụng tốt trên SQL Server. Câu trả lời chính xác! –

+0

+1 Marc, Và làm thế nào anh ta có thể tránh những đốm màu lãng phí? –

+0

@marc_s bạn nói: _you muốn cố gắng tránh những đốm màu lãng phí lớn._ HOw tôi có thể giảm thiểu những đốm màu lãng phí đó không? (nghe như lệnh ALIKE chống phân mảnh) –

7

Bạn không cần phải lo lắng về cấu trúc trang 8 KB cho đến khi bạn gặp vấn đề về hiệu suất. Nhưng trong trường hợp bạn muốn biết nội bộ của trang 8 KB, dưới đây là video của youtube http://www.youtube.com/watch?v=He8MRttysmY minh họa cách trang 8 KB trông như thế nào.

enter image description here

1.Page cửa hàng tiêu đề thông tin về trang như loại trang, bên cạnh và trang trước nếu nó là một trang chỉ mục, không gian trống trong trang, vv

2.After dữ liệu tiêu đề trang phần hàng sau. Đây là nơi dữ liệu của bạn thực sự được lưu trữ.

3. Thông tin bù đắp được lưu trữ ở cuối trang, tức là sau phần hàng dữ liệu. Mỗi hàng dữ liệu có một hàng bù và kích thước của hàng bù đắp là 2 byte cho mỗi hàng. Hàng bù đắp lưu trữ thông tin về khoảng cách hàng từ đầu trang.

Nói một cách đơn giản, phương trình trang hoàn chỉnh sẽ hiển thị như hình bên dưới.

Trang (8 KB/8192 bytes) = Tiêu đề trang (96 byte) + Dữ liệu thực tế (Dù byte) + Hàng bù (2 byte mỗi hàng).

+0

Khi nào tôi bắt đầu lo lắng về các vấn đề về hiệu suất liên quan đến trang? Bạn có thể cho tôi một số ví dụ không? –

+2

-1 b/c của "Bạn không cần phải lo lắng về cấu trúc trang 8 KB cho đến khi bạn gặp vấn đề về hiệu năng". Tôi hiện đang cố gắng sửa chữa một máy chủ sql sản xuất với một bảng có chứa 173 triệu hàng. Hiệu suất (và do đó kích thước trang) nên được xem xét tại thời điểm thiết kế. – ray

+0

Mặc dù câu trả lời này là thông tin, tôi không tin rằng nó là thông minh để chỉ bỏ qua kích thước trang cho đến khi một vấn đề phát sinh. –

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