Tệp ibdata của tôi rất lớn, ít nhất là đối với tôi nó rất lớn. Điều này là quá mức hay không phải là xấu?
-rw-rw---- 1 mysql mysql 15G Apr 18 10:11 ibdata1
Tệp ibdata của tôi rất lớn, ít nhất là đối với tôi nó rất lớn. Điều này là quá mức hay không phải là xấu?
-rw-rw---- 1 mysql mysql 15G Apr 18 10:11 ibdata1
Câu trả lời:
Nếu bạn chạy show table status
trên một bảng và Data_free
trường chiếm phần lớn ibdata1
kích thước tệp của bạn , thì bạn có thể có rất nhiều không gian bị lãng phí. Rất nhiều chèn / xóa sẽ làm cho vấn đề đó. Nếu đó là trường hợp và các phần chèn và xóa tạm thời chiếm phần lớn dữ liệu của bạn, thì bạn có một trường hợp tốt cho tệp trên mỗi bảng.
Tuy nhiên, đó không phải là "có". Có rất nhiều cuộc thảo luận trên thế giới về phân mảnh nội bộ bên trong các tệp InnoDB, nhưng đặt chúng vào một hệ thống tệp dưới dạng tệp trên mỗi bảng chỉ chuyển phân mảnh của bạn sang cấp hệ thống tệp thay vì cấp cơ sở dữ liệu.
Hãy nghĩ về tệp InnoDB của bạn như một hệ thống tệp chứ không phải là tệp. Nếu bạn có nhiều tệp, bạn sẽ cần một hệ thống tệp lớn.
Đối với hầu hết các phần, các hệ thống tệp thực sự rất tốt trong việc mở rộng để xử lý terabyte dữ liệu và số lượng tệp chưa được tiết lộ. Đôi khi, họ gặp phải các vấn đề với việc lập chỉ mục kém (ví dụ: giới hạn số lượng tệp trong một thư mục trước tác động hiệu năng), nhưng đối với hầu hết các hệ thống tệp hiện đại có thể vượt quá phạm vi terabyte.
InnoDB hoạt động theo cùng một cách. Kích thước của tệp dữ liệu của bạn có thể rất lớn ... và giống như các hệ thống tệp lớn, có thể gây ra sự cố khi sao lưu dữ liệu của bạn. Tuy nhiên, giống như việc chia hệ thống tệp của bạn thành nhiều phân vùng không giúp ích gì cho vấn đề này, cũng không cố gắng thao túng innodb. Mặc dù bạn có thể sử dụng innodb_file_per_table , tôi hiếm khi khuyên dùng nó.
Giống như hệ thống tập tin của bạn, câu trả lời tốt hơn là biết các giới hạn bên trong và hoạt động trong đó. Hiểu các chỉ số và áp dụng chúng một cách thích hợp. Đừng cố gắng tách InnoDB, điều đó không có nghĩa.
Vì tôi đang vật lộn để truyền đạt khái niệm một cách xây dựng, đây là một cách đọc nhanh những từ này tốt hơn tôi có thể: Terabyte không phải là dữ liệu lớn, petabyte là .
Tôi nhớ một slide tiếp thị MySQL thực sự cũ, nơi khách hàng đang chạy một kho dữ liệu với một vài terabyte. Nhiều năm về trước. InnoDB hoặc MyISAM, cả hai sẽ hoạt động. Đây là tiêu chuẩn tắt các công cụ MySQL rack.
Đừng đổ mồ hôi cơ sở dữ liệu 15 GB.
InnoDB free: 7364608 kB
Các tệp ibdata không co lại - nếu gần đây bạn đã bỏ một số bảng hoặc xóa rất nhiều hàng - innodb trong cấu hình của bạn sẽ không giải phóng không gian trống trở lại hệ thống tệp. Tôi muốn đề nghị bạn:
bằng cách này, bạn sẽ có thể lấy lại không gian bất cứ khi nào bạn thả bảng / cơ sở dữ liệu innodb - các tệp idb liên quan sẽ bị xóa ngay lập tức.