2012-10-11 35 views
6

Tôi có bảng MySQL sử dụng công cụ MyISAM với 6 cột INT, 1 cột SMALLINT, 2 TINYINT và 1 cột FLOAT. Nó có hàng tỷ hàng (tệp dữ liệu là 100GB). Tôi đã cố gắng lập chỉ mục trên tất cả của các cột bằng cách bật khóa nhưng điều đó không bao giờ xảy ra. Cố gắng "myisamchk -r tableName" cho các lỗi sau:Sửa chữa/lập chỉ mục Bảng Lớn và myisam_sort_buffer_size

- recovering (with sort) MyISAM-table 'tableName'        
Data records: 662929483               
- Fixing index 1                 
myisamchk: error: myisam_sort_buffer_size is too small       
MyISAM-table 'tableName' is not fixed because of errors       
Try fixing it by using the --safe-recover (-o), the --force (-f) option or by not using the --quick (-q) flag 

Sử dụng "myisamchk -rov tableName" thay vì phải mất vĩnh viễn một lần nữa (có lẽ vì nó được sử dụng phương pháp keycache, không phải là cách sắp xếp).

Không có ý nghĩa khi tăng myisam_sort_buffer_size trong trường hợp này (Câu trả lời cho myisam_sort_buffer_size vs sort_buffer_size cho thấy việc tăng giá trị không bao giờ có ý nghĩa). Máy có RAM 32GB.

Trả lời

1

Nếu bạn đang xử lý dữ liệu 100GB ngoại tuyến. Tạo các bảng hàng loạt bằng cách tách dữ liệu thành các bảng riêng biệt, mỗi bảng có vài triệu dữ liệu cho nó với công cụ lập chỉ mục và cơ sở dữ liệu thích hợp như innodb.

Nếu bạn đang sử dụng dữ liệu đó trực tuyến trong ứng dụng thời gian thực, vui lòng tham khảo liên kết dưới đây về quản lý khối lượng dữ liệu khổng lồ. What database works well with 200+GB of data?

3

bạn chỉ cần tăng kích thước bộ đệm sắp xếp cho myisamchk.

myisamchk -r -q TABLE.MYI --sort_buffer_size=2G 

tìm thấy nó ở đây: https://ma.ttias.be/mysql-myisamchk-error-myisam_sort_buffer_size-is-too-small/

+0

(lý tưởng?) Giá trị sort_buffer_size sẽ có thể giữ chỉ số + một số chi phí lớn nhất - không phải là tổng của tất cả các chỉ số, nhưng kích thước thuộc loại lớn nhất. Tôi đã gặp lỗi phân đoạn khi bộ đệm không đủ lớn. – user3127882

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