Có cách nào nhanh chóng để xác định dung lượng đĩa mà một bảng MySQL cụ thể đang chiếm không? Bảng có thể là MyISAM hoặc Innodb.
Có cách nào nhanh chóng để xác định dung lượng đĩa mà một bảng MySQL cụ thể đang chiếm không? Bảng có thể là MyISAM hoặc Innodb.
Câu trả lời:
Đối với một bảng mydb.mytable
chạy này cho:
SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
Đây là một truy vấn chung trong đó hiển thị đơn vị tối đa là TB (TeraBytes)
SELECT
CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
FROM
(
SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
FROM information_schema.tables
WHERE table_schema='mydb'
AND table_name='mytable'
) AA
) A,(SELECT 'B KBMBGBTB' units) B;
Hãy thử một lần !!!
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;
để có được danh sách tất cả các bảng mydb
có tên và kích thước, được sắp xếp theo kích thước.
Điều này sẽ không chính xác cho các bảng InnoDB. Kích thước trên đĩa thực sự lớn hơn kích thước được báo cáo qua truy vấn.
Vui lòng xem liên kết này từ Percona để biết thêm thông tin.
https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/
Trong linux với mysql được cài đặt theo mặc định:
[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>
dựa trên vị trí db mys của NIXCRAFT
Dựa trên câu trả lời của RolandMySQLDBA, tôi nghĩ rằng chúng ta có thể sử dụng ở trên để lấy kích thước của mỗi lược đồ trong một bảng:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUP BY table_schema;
Thực sự thích nó!
Bạn có thể có thể nhìn vào kích thước của các tập tin ...
Mỗi bảng được lưu trữ trong một vài tệp riêng biệt trong một thư mục được đặt tên bất cứ thứ gì bạn gọi là cơ sở dữ liệu của mình. Các thư mục này được lưu trữ trong thư mục dữ liệu mysql.
Từ đó bạn có thể thực hiện 'du -sh. *' Để lấy kích thước của bảng trên đĩa.
Lấy từ Làm cách nào để kiểm tra dung lượng đĩa mà cơ sở dữ liệu của tôi đang sử dụng?
Bạn có thể kiểm tra kích thước bảng MySQL bằng cách nhìn vào
phpMyAdmin
bảng điều khiển của mình bằng cách nhấp vào tên cơ sở dữ liệu ở khung bên trái và đọc kích thước cho các bảng trong đó ở khung bên phải.
Các truy vấn dưới đây cũng sẽ giúp có được thông tin tương tự trong bytes
select SUM(data_length) + SUM(index_length) as total_size
from information_schema.tables
where table_schema = 'db_name'
and table_name='table_name';
Tôi sẽ chỉ sử dụng công cụ ' mysqldiskusage ' như sau
$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.
# Database totals:
+------------+----------------+
| db_name | total |
+------------+----------------+
| mydbaname | 5,403,033,600 |
+------------+----------------+
Total database disk usage = 5,403,033,600 bytes or 5.03 GB