Cơ sở dữ liệu MySQL sẽ lớn đến mức nào so với tệp kết xuất?


7

Tôi đang khôi phục kết xuất ~ 52GB vào cơ sở dữ liệu MySQL. Tệp ibdata1 đã vượt quá kích thước của tệp kết xuất và quá trình khôi phục vẫn chưa hoàn tất. Có cách nào để ước tính kích thước cuối cùng của tệp ibdata1 nếu kích thước của tệp kết xuất MySQL được biết không?

Câu trả lời:


6

Chỉ từ những từ trong câu hỏi của bạn, tôi nghi ngờ như sau: Rất có thể bạn đã bị vô hiệu hóa innodb_file_per_table .

LƯU Ý: Thông tin sau được dựa trên innodb_file_per_table bị vô hiệu hóa

Khi chèn dữ liệu vào các bảng InnoDB, mọi thứ và bà của nó sẽ nằm trong tệp không gian bảng hệ thống, được gọi là ibdata1. Ibdata1 thực sự chứa gì?

  • Bảng dữ liệu
  • Bảng chỉ mục
  • metadata
  • Thông tin MVCC

Bảng dữ liệu và chỉ mục trong khi ban đầu phình to ibdata1. Siêu dữ liệu chỉ đơn giản là từ điển dữ liệu + danh sách các không gian bảng được gán trên cơ sở mỗi bảng.

Điều gì về MVCC (Điều khiển đồng thời đa biến) ? Điều này thể hiện các đối tượng systrem được thiết kế để hỗ trợ cách ly giao dịch, rollback, hoàn tác nhật ký, chèn bộ đệm cho các chỉ mục secondayr và bộ đệm ghi đôi.

Bạn cần dọn sạch cơ sở hạ tầng InnoDB. Tôi đã viết bài đăng StackExchange về cách và lý do để làm điều này:

Quay trở lại câu hỏi ban đầu của bạn, cách duy nhất để ước tính kích thước của ibdata1 khi tải lại sẽ là chạy truy vấn này trước mysqldump:

SELECT
    data_length/power(1024,3) InnoDBData,
    index_length/power(1024,3) InnoDBIndexes,
    (data_length+index_length)/power(1024,3) InnoDBSize
FROM
    information_schema.tables
WHERE
    engine='InnoDB';

Điều này sẽ báo cáo kích thước của dữ liệu tính bằng GB. Khi tải lại ibdata1 mới (với innodb_file_per_table bị vô hiệu hóa trong trường hợp của bạn), đây sẽ là quy tắc ngón tay cái cho ước tính kích thước.

Từ kích thước tệp kết xuất, thật khó để đánh giá vì tổng kích thước kết hợp của các trang dữ liệu và trang chỉ mục có thể ít hơn nhiều so với kích thước của ibdata1 kết xuất được tạo từ đó. Sự khác biệt đó sẽ có không gian còn sót lại từ sự đầy hơi của các đối tượng hệ thống MVCC (phân đoạn rollback, hoàn tác nhật ký, bộ đệm ghi đôi, bộ đệm chèn chỉ mục phụ). Từ góc độ khác, các trang dữ liệu có thể nhiều hơn các trang chỉ mục và ngược lại. Điều này có thể là do quá nhiều chỉ mục, thiết kế xấu hoặc chỉ là một lượng dữ liệu hợp lý.


1
Tệp kết xuất 50 GB dẫn đến 99 GB ibdata1
aetodd

Innodb_file_per_table của bạn có được bật hay không? Vui lòng chạy: HIỂN THỊ BIỂU TƯỢNG THÍCH 'innodb_file_per_table'; và nói với tôi
RolandoMySQLDBA

@RolandoMySQLDBA Tôi tin rằng câu trả lời chắc chắn là không nếu ibdata1trở nên lớn như vậy trong quá trình khôi phục.
Michael Mior
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.