Làm thế nào để tăng giới hạn dữ liệu đệm?


16

Trong Ubuntu tôi đã tạo một bộ sưu tập MongoDB Db chứa 1 triệu bản ghi và khi thử chạy một lệnh sắp xếp chống lại nó, tôi gặp phải lỗi sau:

 "$err" : "Runner error: Overflow sort stage buffered data usage of 33555002 bytes exceeds internal limit of 33554432 bytes",
 "code" : 17144

Xin vui lòng bất cứ ai có thể mô tả làm thế nào để tăng giới hạn nội bộ để tôi có thể thực hiện điều này và một số lệnh quy mô lớn khác đối với dữ liệu?


Tôi nghi ngờ bạn có thể. Vấn đề có lẽ là với tuyên bố của bạn: EXPLAIN có cho thấy bạn đang sử dụng INDEX không? Nếu không, bạn cần thêm INDEX vào bảng của mình.
Rinzwind

Xin chào Rinzwind. Tôi đang cố gắng so sánh hiệu suất, vì vậy tôi đang tìm cách chạy các loại dữ liệu bằng cách sử dụng noindex, chỉ mục chính và chỉ mục phụ. Bạn có gợi ý rằng không thể chạy một loại thang đo này mà không có chỉ mục?
Jon295087

Ah. Vâng, tôi có xu hướng kiểm tra hiệu suất bằng cách sử dụng EXPLAIN (ngay khi EXPLAIN không cung cấp cho tôi số lượng bản ghi thấp, hiệu suất rất tệ). Bạn có thể sẽ cần phải giới hạn hồ sơ của bạn nếu bạn muốn làm điều đó như thế này.
Rinzwind

Tôi đã thấy rằng MongoDB sẽ xử lý khoảng 25000 tài liệu trong bộ dữ liệu này, nhưng lại gặp phải bất cứ điều gì lớn hơn ... Tôi đoán đó chỉ là một hạn chế của cơ sở dữ liệu? Cảm ơn bạn đã bình luận của bạn.
Jon295087

Câu trả lời:


23

Điều này có thể xảy ra do một lỗi như SERVER-13611 (vì vậy hãy chắc chắn rằng bạn đang ở phiên bản mới nhất) hoặc do bạn đang cố gắng sắp xếp theo một chỉ mục thưa thớt trong 2.6 , nhưng thông thường hơn là vì bạn chỉ đang cố gắng sắp xếp nhiều bản ghi trong bộ nhớ mà không có chỉ mục.

Giới hạn cụ thể mà bạn đang đạt được là có chủ ý và được ghi lại ở đây - không thể thay đổi, vì vậy bạn cần giảm tập kết quả hoặc sử dụng chỉ mục, v.v. để thực hiện sắp xếp.

Cập nhật (tháng 11 năm 2014): Bản phát hành 2.8 sắp tới (2.8.0-RC0 khi viết bài này) hiện cho phép điều chỉnh cài đặt này, như sau:

db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: <limit in bytes>})

Giá trị mặc định là 32MiB (33554432 byte) và cần được điều chỉnh cẩn thận - các loại trong bộ nhớ lớn có thể khiến cơ sở dữ liệu của bạn bị đình trệ (đó là lý do tại sao có giới hạn ở vị trí đầu tiên).


"errmsg": "không tìm thấy tùy chọn nào để đặt, sử dụng trợ giúp: true để xem các tùy chọn"
Mohammad Efazati

1
có khả năng bạn đang sử dụng một phiên bản khác xa so với câu trả lời này dành cho mục đích này, điều này đã được viết cách đây khá lâu
Adam C

2

Tôi cũng gặp vấn đề khi sắp xếp và phân trang các hồ sơ 200K +. Giải pháp đơn giản nhất dường như là thêm một chỉ mục (cho các thuộc tính bạn đang sắp xếp.

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.