System table là gì?

Noun Database
Bảng hệ thống

Các bảng hệ thống (system table) trong SQL Server chứa tất cả siêu dữ liệu (metadata) quan trọng. Siêu dữ liệu này bao gồm thông tin về tên bảng (table name), tên cột (column name) và kiểu dữ liệu (data type) để SQL Server có thể xử lý các truy vấn (query) và trả về tập kết quả (result set) một cách chính xác. Bảng hệ thống (system table) chứa thông tin về người dùng hợp lệ và quyền (permissions) của họ.

Cách phổ biến nhất để xác định một bảng hệ thống (system table) là theo tên của nó. Tất cả các bảng hệ thống (system table) đều bắt đầu bằng ba ký tự sys, nhưng không phải mọi thứ bắt đầu bằng sys đều là bảng hệ thống (system table). Một cách khác để xác định bảng hệ thống là bằng object ID, tất cả các bảng hệ thống (system table) có số ID nhỏ hơn 100. Bạn cũng có thể xác định các bảng hệ thống (system table) bằng cách xem cột type trong bảng sysobjects, bảng hệ thống (system table) có type S.

Một loại bảng hệ thống (system table) khác không thực sự là một bảng, đó là một bảng giả (pseudo table). Bảng giả không chiếm dung lượng (space) và không được lưu trữ vĩnh viễn trên đĩa. Thay vào đó, SQL Server xây dựng chúng động mỗi khi bạn truy vấn chúng. Lưu trữ các bảng này trên đĩa thường không có ý nghĩa vì các giá trị của chúng đại diện cho thông tin dễ bay hơi (volatile information) trong SQL Server chỉ tồn tại khi máy chủ (server) đang chạy. Ví dụ lưu trữ syslockinfo trên đĩa sẽ vô nghĩa vì các khóa (lock) không tồn tại trừ khi SQL Server đang chạy. Ngoài ra, thông tin khóa cần được truy cập thường xuyên và nhanh đến mức việc lưu trữ thông tin trong bảng sẽ quá chậm. SQL Server lưu trữ thông tin trong cấu trúc bộ nhớ chính (primary memory) và hiển thị dưới dạng bảng khi bạn yêu cầu. Bạn có thể sử dụng câu lệnh sau để select from syslockinfo như thể nó là một bảng:


SELECT * FROM master..syslockinfo

Bạn có thể tìm ra bảng nào là bảng giả bằng cách xem bảng sysindexes, bảng này chứa thông tin lưu trữ. Mọi cơ sở dữ liệu đều có bảng sysindexes và mọi bảng và chỉ mục (index) đều có một hàng (row) trong sysindexes. Các hàng này cho biết dữ liệu cho bảng hoặc chỉ mục được lưu trữ ở đâu và nó chiếm bao nhiêu dung lượng. Giá trị trong cột id là ID của bảng. Để xem bảng đang sử dụng bao nhiêu dung lượng, hãy xem giá trị trong cột dpages trong hàng của bảng. Bất kỳ giá trị nào lớn hơn 0 có nghĩa là bảng đang chiếm một số dung lượng. Truy vấn sau đây trả về thông tin sử dụng dung lượng cho tất cả các bảng có số ID nhỏ hơn 100 — nói cách khác, các bảng hệ thống:


SELECT name = convert(char(30),o.name), rows, dpages,o.id, type
FROM sysindexes i JOIN sysobjects o ON o.id = i.id
WHERE o.id 
Learning English Everyday