Giống như hầu hết các cơ sở dữ liệu quan hệ, MySQL cung cấp siêu dữ liệu hữu ích về chính cơ sở dữ liệu đó. Trong khi hầu hết các cơ sở dữ liệu khác đề cập đến thông tin này như một catalog
, tài liệu MySQL chính thức đề cập đến INFORMATION_SCHEMA
siêu dữ liệu dưới dạng tables
.
Bất kể tên là gì, điều quan trọng là thông tin được cung cấp bởi INFORMATION_SCHEMA
này những cái bàn. Mọi thứ từ views
và user_privilieges
thành columns
và các bảng tables
có thể được tìm thấy trong INFORMATION_SCHEMA
. Vì mục đích của mình, chúng tôi đặc biệt quan tâm đến tables
siêu dữ liệu mà chúng tôi có thể truy vấn để thực sự trích xuất kích thước của các bảng khác nhau trong hệ thống.
Kích thước bảng danh sách từ một cơ sở dữ liệu duy nhất
Như có thể thấy trong tài liệu chính thức, INFORMATION_SCHEMA.TABLES
bảng chứa khoảng 20 cột, nhưng với mục đích xác định dung lượng ổ đĩa được sử dụng bởi các bảng, chúng tôi sẽ tập trung vào hai cột cụ thể:DATA_LENGTH
và INDEX_LENGTH
.
-
DATA_LENGTH
là chiều dài (hoặc kích thước) của tất cả dữ liệu trong bảng (tính bằngbytes
). -
INDEX_LENGTH
là chiều dài (hoặc kích thước) của tệp chỉ mục cho bảng (cũng tính bằngbytes
).
Được trang bị thông tin này, chúng tôi có thể thực hiện một truy vấn sẽ liệt kê tất cả các bảng trong một cơ sở dữ liệu cụ thể cùng với không gian đĩa (kích thước) của mỗi bảng. Chúng tôi thậm chí có thể tạo ra một chút tưởng tượng và chuyển đổi các giá trị kích thước bình thường từ bytes
thành thứ gì đó hữu ích và dễ hiểu hơn đối với hầu hết mọi người như megabytes
.
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Trong ví dụ này, sử dụng bookstore
cơ sở dữ liệu, chúng tôi đang kết hợp DATA_LENGTH
và INDEX_LENGTH
dưới dạng bytes
, rồi chia nó cho 1024
hai lần để chuyển đổi thành kilobytes
rồi đến megabytes
. Tập hợp kết quả của chúng tôi sẽ giống như sau:
+----------------------------------+-----------+
| Table | Size (MB) |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
Nếu bạn không quan tâm đến tất cả các bảng trong cơ sở dữ liệu và chỉ muốn kích thước của một bảng cụ thể, bạn có thể chỉ cần thêm AND TABLE_NAME = "your_table_name"
đến WHERE
mệnh đề. Ở đây chúng tôi chỉ muốn thông tin về book
bảng:
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Kết quả, như mong đợi, bây giờ là:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| book | 267 |
+-------+-----------+
1 row in set (0.00 sec)
Liệt kê Tất cả Kích thước Bảng Từ TẤT CẢ Cơ sở dữ liệu
Nếu bạn đang gặp phải sự cố trong đó cơ sở dữ liệu của bạn đang tăng kích thước nhưng bạn không biết bảng nào là thủ phạm, có thể hữu ích khi truy vấn kích thước của tất cả bảng trong tất cả cơ sở dữ liệu trong toàn bộ hệ thống. Điều này có thể được thực hiện dễ dàng với truy vấn sau:
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Điều này sẽ trả về không chỉ kích thước của bảng, mà còn trả về tên bảng và cơ sở dữ liệu mẹ mà nó được liên kết.