2012-02-19 35 views
10

Trong cơ sở dữ liệu MySQL của tôi, tôi thấy những thống kê này:Làm cách nào để giảm chi phí của MySQL như được hiển thị trong phpMyAdmin?

Type Usage 
Data 16,384 Bytes 
Index 32,768 Bytes 
Overhead 405,0 MB 
Effective -424,624,128 Bytes 
Total 49,152 Bytes 

Khi tôi cố gắng các lệnh check table, ALTER TABLE 'mytable' ENGINE = INNODB, OPTIMIZE TABLE, không có gì xảy ra đối với các chi phí.

Tại sao không có gì xảy ra, tôi có nên lo lắng không và khi nào tôi nên lo lắng? Tôi đã nhìn thấy những câu hỏi khác mà nhà nước 'lo lắng khi chi phí quá lớn'. Cái gì quá lớn?

+2

Tôi nghĩ rằng chạy một TABLE TỐI ƯU nên sửa chữa chi phí. Và tôi không chắc chắn nhưng tôi nghĩ rằng nó không áp dụng cho InnoDB. Đây có vẻ là bản sao của http://stackoverflow.com/questions/565997/in-mysql-what-does-overhead-mean-what-is-bad-about-it-and-how-to-fix-it – Abhay

+0

Câu hỏi này phải làm gì với phpMyAdmin? – Mchl

+0

@Mchl Các lệnh có thể thực thi trong phpMyAdmin. – nhaarman

Trả lời

11

Chi phí đầu vào trong PHPMyAdmin được tính bằng cột 'Data_free' được trả về bởi SHOW TABLE STATUS. Nó thực sự được giải thích trong tài liệu MySQL: http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

Data_free: Số lượng byte được phân bổ nhưng chưa sử dụng.

Bắt đầu với MySQL 5.1.24, thông tin này cũng được hiển thị cho InnoDB bảng (trước đây, đó là giá trị Comment). Bảng InnoDB báo cáo không gian trống của vùng bảng mà bảng đó thuộc về. Đối với một bảng nằm trong vùng bảng dùng chung, đây là không gian trống của không gian bảng được chia sẻ . Nếu bạn đang sử dụng nhiều không gian bảng và bảng có không gian bảng riêng của nó, không gian trống chỉ dành cho bảng đó. Miễn phí không gian có nghĩa là số lượng khoảng cách 1MB hoàn toàn miễn phí trừ đi an toàn lề. Ngay cả khi không gian trống hiển thị là 0, thì có thể chèn hàng miễn là không cần phân bổ các vùng mới.

Tuy nhiên đối với InnoDB này là rất quan trọng "các bảng InnoDB báo cáo dung lượng trống của bảng mà bàn thuộc. Đối với một bảng nằm trong tablespace chia sẻ, đây là không gian trống của tablespace chia sẻ.". Vì vậy, với một thiết lập InnoDB điển hình ('innondb_file_per_table' không được thiết lập), bạn sẽ nhận được không gian trống cho tất cả các bảng chứ không phải cho một bảng duy nhất. Đó có lẽ là lý do tại sao phpMyAdmin bỏ qua/loại bỏ thông tin hoặc trên bảng Optimize không có gì xảy ra.

Bạn nên đọc số này post, giải thích rõ cách tối ưu hóa bảng trong bảng màu.

7

Run:

OPTIMIZE TABLE table_name; 

Trên mỗi bảng bạn muốn sửa chữa - điều này sẽ làm giảm chi phí. Tùy chọn khác đang sử dụng lệnh này:

/usr/bin/mysqlcheck --auto-repair --check --optimize --all-databases 

Điều này sẽ kiểm tra, sửa chữa và tối ưu hóa tất cả các bảng trong tất cả cơ sở dữ liệu.

Các vấn đề liên quan