Làm thế nào bạn có thể xác định bao nhiêu không gian đĩa mà một bảng MySQL cụ thể đang chiếm?


145

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.


Trong PHPMyAdmin, bạn có thể thấy việc sử dụng không gian chỉ bằng cách nhấp vào bảng ob.
AR.

Các câu trả lời cho câu hỏi này đã giúp tôi có được giải pháp của mình. Một tìm kiếm kỹ lưỡng về một công cụ có thể giúp tôi mà không cần thực hiện cùng một truy vấn mọi lúc để lấy dữ liệu khiến tôi phải xem qua MONyog , MySQL Enterprise Monitor , bộ công cụ Percona . Tất cả chúng đều cung cấp chi tiết về thông tin đĩa, nhưng cuối cùng đã chọn MONyog cho các biểu đồ đồ họa tốt hơn và GUI dễ dàng.
Mathew

Câu trả lời:


285

Đối với một bảng mydb.mytablechạy này cho:

BYTES

SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

KILOBYTES

SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

MEGABYTES

SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

GÓI

SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

CHUNG

Đâ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 !!!


6
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 mydbcó tên và kích thước, được sắp xếp theo kích thước.
kqw

1
Nối "DESC" vào mệnh đề ORDER BY để xem các bảng tiêu thụ nhiều dung lượng đĩa trước tiên. ;)
mvsagar

Nói chính xác, bạn có thể muốn gọi các đơn vị ki bi byte (KiB), me bi byte (MiB) và gi bi byte (GiB) khi sử dụng tiền tố nhị phân (nhân với lũy thừa 2). Hoặc, Bạn có thể muốn sử dụng tiền tố thập phân (nhân với công suất 1000) và sau đó gọi các đơn vị ki lo byte (KB), me ga byte (MB) và gi ga byte (GB). Xem thêm: vi.wikipedia.org/wiki/Binary_prefix
Márton Tamás

Có ai biết làm thế nào để làm điều tương tự trong MSSQL không?
Ivan Yurchenko

@RolandoMySQLDBA, bạn có thể vui lòng đề xuất về stackoverflow.com/questions/47976837/
davidb

15

Nhanh chóng SQL để có được 20 bảng lớn nhất trong MB.

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

Hy vọng điều đó hữu ích cho ai đó!



2

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


Câu hỏi là hỏi làm thế nào để đo không gian được chiếm bởi một bảng cụ thể .
Flimm

@ShariqueAbdullah điều này sẽ hoạt động nếu bạn đang sử dụng innodb_file_per_table, không phải mặc định, nhưng tôi nghĩ nó rất phổ biến và / hoặc được đề xuất (ai đó có thể dễ dàng chứng minh tôi sai về điều này, chỉ là ấn tượng của tôi).
Seaux

@Seaux, Có thể, nhưng tôi chưa thấy nó được sử dụng trong bất kỳ thiết lập máy chủ được đề xuất nào tôi đã trải qua. Vì vậy, bạn có thể đúng, nhưng vì nó không phải là mặc định anh ta có thể không tìm thấy nó. Ngoài ra, tôi nghĩ các hàm innodb khá khác so với MyISAM. Vì vậy, ngay cả khi bạn có kích thước tệp, nó có thể không chính xác như trong trường hợp của MyISAM. Nhưng bạn đúng đó có thể là một giải pháp. Cá nhân tôi thích sử dụng các lệnh của MySQL để có được thông tin này hơn là đo kích thước tệp.
Sharique Abdullah

2

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ó!


0

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.


Điều này chỉ hoạt động cho cơ sở dữ liệu MyISAM. OP cũng yêu cầu một giải pháp hoạt động với InnoDB.
Bss

0

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';

Điều này giả định phpMyAdmin đã được cài đặt
thebigjc

-1

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

OP yêu cầu không gian đĩa của bảng MySQL cụ thể, không phải toàn bộ cơ sở dữ liệu
machineaddict
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.