Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn cách tìm các chỉ mục không sử dụng trong MongoDB, kiểm tra thống kê sử dụng trên bộ sưu tập chỉ mục của bạn và cách loại bỏ các chỉ mục không sử dụng.
Chủ động quản lý chỉ mục cơ sở dữ liệu MongoDB qua một số bản phát hành ứng dụng có thể là một thách thức đối với các nhóm phát triển. Các yêu cầu thường thay đổi với mỗi bản phát hành, trong đó một số chỉ mục mới có thể được thêm vào và các chỉ mục cũ có thể bị bỏ rơi. Theo thời gian, điều này gây khó khăn cho việc theo dõi chỉ mục MongoDB nào đang được sử dụng và chỉ mục nào hiện không cần thiết.
Chỉ mục có tác động lớn đến hiệu suất ghi - mỗi khi có bản ghi vào bộ sưu tập, các chỉ mục liên quan cần được cập nhật. Việc thiếu chỉ mục biểu hiện ngay lập tức và làm chậm truy vấn - các chỉ mục không được sử dụng thường phức tạp hơn và cần được loại bỏ tích cực để cải thiện hiệu suất ghi. Có thể tìm thêm thông tin tại đây - Nguy cơ xây dựng chỉ mục trên MongoDB.
Trong các phiên bản trước đó của MongoDB, không có cách nào dễ dàng để xác định xem một chỉ mục có đang được sử dụng hay không. Tuy nhiên, bắt đầu từ phiên bản 3.2, MongoDB đã thêm hỗ trợ cho toán tử $ indexStats cho phép bạn thu thập thống kê về việc sử dụng chỉ mục của mình.
Tìm Chỉ mục không được sử dụng trong MongoDB
Để kiểm tra thống kê sử dụng của một chỉ mục cụ thể trên một bộ sưu tập, bạn có thể sử dụng lệnh sau:
db.collection.aggregate([{$indexStats: {}}, {$match: {"name": "<indexname>"}}])
Để nhận thống kê cho tất cả các chỉ mục của một bộ sưu tập:
db.collection.aggregate([{$indexStats:{}}])
Tài liệu trả về sẽ giống như sau:
{ "name" : "test", "key" : { "key" : 1 }, "host" : "xxx:27017", "accesses" : { "ops" : NumberLong(145), "since" : ISODate("2017-11-25T16:21:36.285Z") } }
Hai trường quan trọng cần lưu ý ở đây là:
-
Hoạt động
Đây là số thao tác đã sử dụng chỉ mục.
-
Kể từ
Đây là thời gian mà MongoDB thu thập số liệu thống kê và thường là thời gian bắt đầu cuối cùng.
Bỏ chỉ mục không sử dụng trong MongoDB
Khi bạn đã xác định và xác minh các chỉ mục MongoDB không sử dụng, bạn có thể loại bỏ chỉ mục bằng cách sử dụng mã bên dưới:
db.collection.dropIndex( "<index name>"); or db.collection.dropIndex("{key1:1.....}")
Như mọi khi, vui lòng xác minh rằng bạn đang thả đúng chỉ mục trước khi tiến hành thao tác thả.
Nếu bạn có bất kỳ câu hỏi nào về việc tìm các chỉ mục chưa sử dụng trong MongoDB, hãy để lại nhận xét bên dưới hoặc liên hệ với chúng tôi theo địa chỉ [email protected].