Làm thế nào lớn là quá lớn cho tập tin ibdata?


9

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

4
Tập tin ibdata của bạn rất nhỏ.
Jeff Ferland

Việc chia tập tin đó thành các phần nhỏ hơn (giả sử 4G) sẽ tốt hơn hay tệ hơn cho hiệu suất?
nachito

Câu trả lời:


13

Khi điều này có thể là một vấn đề

Nếu bạn chạy show table statustrên một bảng và Data_freetrường chiếm phần lớn ibdata1kí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.

Tại sao điều này thường không phải là một vấn đề

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.


Có vẻ như tôi chỉ được sử dụng dưới 50%. InnoDB free: 7364608 kB
nachito

@nachito Nghe có vẻ ổn. Nếu bạn cảm thấy bạn cần không gian trở lại cho hệ thống tập tin, hãy lấy lại nó. Nếu bạn chỉ lo lắng về hiệu suất, đừng. Ngoài ra, đối với hiệu suất, tốt nhất là giữ các tệp cơ sở dữ liệu của bạn trên phân vùng riêng của chúng, vì vậy nếu bạn tập trung vào hiệu suất, bạn sẽ không thấy một sự đòi lại có thể sử dụng được.
Jeff Ferland

6

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:

  • sao lưu tất cả dữ liệu của bạn, ví dụ như với mysqldump
  • thêm vào chỉ thị my.cnf innodb_file_per_table
  • khởi động lại mysql
  • bỏ tất cả các cơ sở dữ liệu bằng cách sử dụng công cụ innodb
  • dừng mysql
  • xóa tệp ibdata
  • rm ib_logfile [01]
  • khởi động mysql, kiểm tra syslog nếu tất cả đều ổn
  • tải lại bãi rác của 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.


Tôi hiểu rằng nó sẽ không bao giờ thu nhỏ khi đổ và tải lại các bảng. Tuy nhiên, nếu tôi đã bỏ cơ sở dữ liệu InnoDB thì nó có sử dụng không gian "miễn phí" đó trước khi nó bắt đầu phát triển trở lại không?
nachito

1
@nachito Vâng, nó sẽ.
Jeff Ferland


Câu trả lời của bạn chỉ là một gợi ý đơn giản mà không làm phiền vấn đề như câu trả lời của tôi dường như đã được thực hiện. +1 !!!
RolandoMySQLDBA

1
Chà, câu trả lời là một giải pháp để giảm dung lượng được sử dụng bởi các tệp dữ liệu, nhưng đó không phải là một cuộc thảo luận về công đức liên quan đến điều đó, và đó là câu hỏi khi tôi đọc nó. Là một tập tin ibdata 15GB có phải là một vấn đề lớn không?
Jeff Ferland
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.