Trong MySQL, Overhead, ý nghĩa của nó là gì, có gì xấu về nó và làm thế nào để khắc phục nó?


157

Câu hỏi đơn giản, nhưng nó đã cằn nhằn tôi một lúc rồi ....

"chi phí" trong MySQL là gì và tôi có nên lo lắng không?

nhấp vào "tối ưu hóa bảng" có khắc phục được sự thật không?

Câu trả lời:


147

Dường như không gian đĩa tạm thời là cơ sở dữ liệu được sử dụng để chạy một số truy vấn, vì vậy bạn chỉ nên lo lắng nếu điều này thực sự cao.

Bạn có thể so sánh 'Tối ưu hóa bảng' với việc chống phân mảnh ổ cứng của bạn.

Tôi trích dẫn:

Mỗi cơ sở dữ liệu, theo thời gian, sẽ yêu cầu một số hình thức bảo trì để giữ cho nó ở mức hiệu suất tối ưu . Thanh lọc các hàng đã xóa, sắp xếp lại, nén, quản lý đường dẫn chỉ mục, chống phân mảnh, v.v. là những gì được gọi là TỐI ƯU HÓA trong mysql và các thuật ngữ khác trong cơ sở dữ liệu khác. Ví dụ, IBM DB2 / 400 gọi nó là THÀNH VIÊN TẬP TIN VẬT LÝ.

Nó giống như thay dầu trong xe hơi của bạn hoặc điều chỉnh. Bạn có thể nghĩ rằng bạn thực sự không cần phải làm vậy, nhưng bằng cách đó, chiếc xe của bạn chạy tốt hơn nhiều, bạn sẽ tiết kiệm xăng hơn, v.v. Một chiếc xe có nhiều quãng đường đòi hỏi phải điều chỉnh thường xuyên hơn. Một cơ sở dữ liệu được sử dụng nhiều đòi hỏi như nhau. Nếu bạn đang thực hiện nhiều thao tác CẬP NHẬT và / hoặc XÓA, và đặc biệt nếu các bảng của bạn có các cột có chiều dài thay đổi (VARCHAR, TEXT, v.v.), bạn cần tiếp tục điều chỉnh.


1
@Jasper Các bảng có bị khóa hoàn toàn (không thể đọc / ghi) trong suốt thời gian tối ưu hóa không?
Pacerier

4
Câu nói đó bắt nguồn từ đâu? Tôi đang tìm thấy rất nhiều kết quả trong Google.
Ian Hunter

Làm thế nào để chúng ta biết nguyên nhân gây ra chi phí nhiều lần?
mahen3d

cảm ơn bạn vì ví dụ hoàn hảo và dễ dàng, bất kể các thuật ngữ kỹ thuật kỳ dị.
shyammakwana.me

1
Điều gì được coi là "Thực sự cao"?
TV-C-15

87

Nếu bạn đang nói về thứ phpMyAdmingọi overhead, thì đó là kích thước thực của một tệp dữ liệu bảng so với kích thước lý tưởng của cùng một tệp dữ liệu (như thể khi được khôi phục từ bản sao lưu).

Vì lý do hiệu năng, MySQLkhông nén các tệp dữ liệu sau khi xóa hoặc cập nhật các hàng.

Điều này overheadkhông tốt cho quét bảng, tức là khi truy vấn của bạn cần chạy trên tất cả các giá trị bảng, nó sẽ cần xem xét nhiều không gian trống hơn.

Bạn có thể thoát khỏi overheadbằng cách chạy OPTIMIZE TABLEsẽ thu gọn bảng và chỉ mục của bạn.


7
Kích thước tài liệu mysql cho biết "Nên sử dụng BẢNG TỐI ƯU nếu bạn đã xóa một phần lớn của bảng hoặc nếu bạn đã thực hiện nhiều thay đổi đối với bảng có các hàng có độ dài thay đổi", đây là trường hợp của tôi, cảm ơn :)
boclodoa

8

Chi phí là Data_free của bảng, đó là Số byte được phân bổ nhưng không được sử dụng. Chúng ta có thể tìm thấy nó bằng lệnh SQL SHOW TABLE STATUS . Đó là không gian trống trong kích thước được phân bổ cho bảng của bạn.


1

Tối ưu hóa bảng có thể rất có vấn đề. Ví dụ: nếu bảng được sử dụng nhiều trên một trang web.

http://dev.mysql.com/doc/refman/5.1/en/optizes-table.html

Sau khi xóa một phần lớn của bảng MyISAM hoặc ARCHIVE hoặc thực hiện nhiều thay đổi đối với bảng MyISAM hoặc ARCHIVE với các hàng có độ dài thay đổi (các bảng có các cột VARCHAR, VARBINARY, BLOB hoặc TEXT). Các hàng đã xóa được duy trì trong một danh sách được liên kết và các hoạt động INSERT tiếp theo sử dụng lại các vị trí hàng cũ. <

Tôi tin rằng tôi đã xác nhận hành vi này. Và nó chắc chắn sẽ rất hữu ích.

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.