Column null trong sql server chưa bao nhiêu byte năm 2024

Database gồm nhiều filegroup, mỗi filegroup sẽ có một hoặc nhiều data files, mỗi data file gồm nhiều data pages, mỗi data page sẽ có một hoặc nhiều rows tùy theo kích thước của mỗi row.

Chúng ta biết rằng cơ sở dữ liệu quan hệ [relational database] lưu trữ dữ liệu của người dùng dưới dạng hàng cột – hay gọi là bảng. Mỗi bảng có thể có một hoặc nhiều cột và mỗi cột phải thuộc về một kiểu dữ liệu nào đó như số nguyên [integer], ngày tháng năm [date], chuỗi các ký tự [varchar]… Mỗi dòng [row] sẽ có giá trị cho từng cột. Kích thước của một row chính là tổng kích thước các kiểu dữ liệu của các cột cộng với một số bytes phát sinh của việc tổ chức lưu trữ trong SQL Server.

Những rows này sẽ được gom lại thành các đơn vị lớn hơn gọi là page. Mỗi page có kích thước cố định là 8KB [ 8192 bytes] và các page này nằm liên tiếp trên các data files. Nhằm mục đích hỗ trợ việc cấp phát không gian lưu trữ cho các bảng hiệu quả hơn SQL Server sử dụng đơn vị extent – một extent gồm 8 data pages nằm kế nhau hình thành một khối 64KB. Vậy có thể hình dung các cấp trong việc tổ lưu trữ SQL Server gồm database -> filegroups -> files -> extents -> pages -> rows.

Hình 1: Data file gồm các 8KB data pages liên tiếp nhau.

Mỗi page được định vị bằng địa chỉ FileID:PageID và hoặc là thuộc về một bảng nào đó [có thể là user hoặc system tables] hoặc là page của hệ thống, như dùng để quản lý việc cấp phát không gian lưu trữ. Page đã có bao nhiêu rows, còn trống bao nhiêu bytes,..tất cả những thông tin cần thiết để việc quản lý và truy cập data pages hiệu quả hơn.

Hình 2: Các thành phần trong cấu trúc một data page.

Page header là nơi chứa thông tin quản lý như đề cập ở trên, vùng này chiếm cố định 96 bytes. Tiếp đến là payload – vùng chứa data rows và phía dưới cùng là slot array – mảng các phần tử 2 bytes chỉ vị trí bắt đầu các rows trong page. Số lượng phần tử này tương ứng với số lượng rows và thứ tự của chúng phản ánh thứ tự các rows trong index theo key. Các bạn chú ý, vị trí các data rows trong payload không quan trọng, thứ tự của slot mới quyết định vị trí của chúng trong index.

Để lấy danh sách các pages mà một bảng [clustered/heap table] hoặc một index có thể có, ta sử dụng câu lệnh DBCC IND hoặc undocumented DMF sys.dm_db_database_page_allocations [từ SQL Server 2012 trở lên] với cú pháp như sau.

DBCC IND[,,]

CREATE DATABASE quantricsdulieu GO USE quantricsdulieu GO CREATE TABLE tblTest[ Id INT IDENTITY PRIMARY KEY CLUSTERED, NgayNhap DATETIME, MoTa1 VARCHAR[64], MoTa2 CHAR[1024] ] DECLARE @i INT = 1 BEGIN TRANSACTION WHILE @i

Chủ Đề