Làm thế nào để có được kích thước thật của cơ sở dữ liệu MySQL?


144

Tôi muốn biết cơ sở dữ liệu MySQL của tôi sử dụng bao nhiêu dung lượng để chọn máy chủ web. Tôi đã tìm thấy lệnh SHOW TABLE STATUS LIKE 'table_name'nên khi tôi thực hiện truy vấn, tôi nhận được một cái gì đó như thế này:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • số được làm tròn.

Vậy tôi có 362000 hay 400 * 362000 = 144800000 byte dữ liệu cho bảng này không? Và chỉ số Chiều dài có nghĩa là gì? Cảm ơn !


bạn có 362000 + 66560. Dữ liệu_Lạng + Độ dài chỉ mục
mandza


Trang này sẽ cung cấp cho bạn câu trả lời chính xác rathishkumar.in/2017/12/ Khăn
Rathish

Câu trả lời:


281

Từ S. Prakash, được tìm thấy tại diễn đàn MySQL :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

Hoặc trong một dòng duy nhất để dán sao chép dễ dàng hơn:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 

7
Không gian trống trong MB có nghĩa là gì? Tôi có 100 GB GB miễn phí nhưng nó báo cáo dưới 1 GB miễn phí.
Barth

1
@Barth theo tài liệu này có nghĩa là "không gian trống tính bằng byte cho các bảng InnoDB". Thật không may, không có lời giải thích điều đó có nghĩa là gì: - \
ckujau

13
Không gian trống tính bằng byte có nghĩa chính xác là như vậy - điều đó có nghĩa là lượng không gian có thể được thu hồi nếu bạn TỐI ƯU HÓA bảng hoặc xây dựng lại bảng từ đầu. Khi cơ sở dữ liệu lưu trữ thông tin trên đĩa, họ phân bổ nó theo khối; xóa một bản ghi thường giải phóng một khối giữa các khối đã sử dụng và rất tốn kém để chuyển tất cả các khối khác xung quanh để sử dụng khoảng trống đó để nó được đánh dấu là "miễn phí". Không gian có thể được sử dụng sau đó bởi chính công cụ cơ sở dữ liệu hoặc có thể được lấy lại bằng cách sử dụng OPTIMIZE TABLE foo(MyISAM) hoặc tạo lại + phân tích cho các bảng InnoDB.
đánh bại

92

Bạn có thể lấy kích thước của cơ sở dữ liệu Mysql của mình bằng cách chạy lệnh sau trong máy khách Mysql

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"

30

Nếu bạn sử dụng phpMyAdmin, nó có thể cho bạn biết thông tin này.

Chỉ cần đi đến "Cơ sở dữ liệu" (menu trên cùng) và nhấp vào "Bật thống kê".

Bạn sẽ thấy một cái gì đó như thế này:

Ảnh chụp màn hình phpMyAdmin

Điều này có thể sẽ mất một số độ chính xác khi kích thước tăng lên, nhưng nó phải đủ chính xác cho mục đích của bạn.


Tôi hiện đang sử dụng 000webhost. Nó có phpMyAdmin nhưng tôi không thể tìm thấy hộp kiểm "kích hoạt số liệu thống kê". Có (có thể) một truy vấn cho điều đó?
marvin

1
@marvin Chà, có thể webhost đã cài đặt phiên bản phpMyAdmin cũ hơn. Tôi không biết phiên bản này được giới thiệu.
Radu Murzea

Trong thanh bên của bạn, nhấp vào biểu tượng Trang chủ ở trên cùng sẽ đưa bạn đến trang chủ. Ở đó trong cửa sổ bên phải, nhấp vào 'Cơ sở dữ liệu'. Nó hiển thị một bảng cơ sở dữ liệu, bên dưới là liên kết có tên 'Kích hoạt thống kê'
VeeK

8

nếu bạn muốn tìm nó trong MB, hãy làm điều này

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 

Đoạn mã SQL của câu trả lời này dường như là một bản sao của stackoverflow.com/a/1733523/1200542
Ariel Allon

3

Về cơ bản có hai cách: truy vấn DB (chiều dài dữ liệu + độ dài chỉ mục) hoặc kiểm tra kích thước tệp. Độ dài chỉ mục có liên quan đến dữ liệu được lưu trữ trong các chỉ mục.

Tất cả mọi thứ được mô tả ở đây:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/


Vâng, trang này là nguồn câu hỏi của tôi. Nhưng theo truy vấn này, tôi có 0,5 MB, điều này khiến tôi khá an toàn. Tôi hy vọng nó là sự thật :) Cảm ơn!
marvin

0

Không có câu trả lời nào bao gồm kích thước trên đầu và kích thước siêu dữ liệu của các bảng.

Dưới đây là một ước tính chính xác hơn về "không gian đĩa" được phân bổ bởi cơ sở dữ liệu.

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'

5
Bạn có thể giải thích? Đặc biệt là hằng số của bạn 300150?
Melebius

Xin vui lòng, bạn có thể giải thích?
Allan Andrade

0

SUM(Data_free) có thể có hoặc không có giá trị . Nó phụ thuộc vào lịch sử của innodb_file_per_table. Nhiều cuộc thảo luận được tìm thấy ở đây .



0

Nếu bạn đang sử dụng MySql Workbench, rất dễ dàng để có được tất cả các chi tiết về kích thước Cơ sở dữ liệu, từng kích thước bảng, kích thước chỉ mục, v.v.

  1. Nhấp chuột phải vào Schema
  2. Chọn tùy chọn Schema Inspector

    nhập mô tả hình ảnh ở đây

  3. Nó hiển thị tất cả các chi tiết về kích thước Schema

  4. Chọn Bàn Tab để xem kích thước của mỗi bảng.

    nhập mô tả hình ảnh ở đây

  5. Kích thước bảng được phân loại trong cột Lenght dữ liệu


0

Nếu bạn muốn tìm kích thước của tất cả các cơ sở dữ liệu MySQL, hãy sử dụng lệnh này, nó sẽ hiển thị kích thước tương ứng của chúng tính bằng megabyte;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Nếu bạn có cơ sở dữ liệu lớn, bạn có thể sử dụng lệnh sau để hiển thị kết quả tính bằng gigabyte;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

Ví dụ: nếu bạn muốn hiển thị kích thước của một cơ sở dữ liệu cụ thể YOUR_DATABASE_NAME, bạn có thể sử dụng truy vấn sau;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
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.