W tym poście pokażemy, jak znaleźć nieużywane indeksy w MongoDB, sprawdzić statystyki użytkowania kolekcji indeksów oraz jak usunąć nieużywane indeksy.
Aktywne zarządzanie indeksami bazy danych MongoDB w kilku wersjach aplikacji może być wyzwaniem dla zespołów programistów. Wymagania często zmieniają się z każdą wersją, w której może zostać dodanych kilka nowych indeksów, a stare indeksy mogą zostać porzucone. Z czasem utrudnia to śledzenie, które indeksy MongoDB są używane, a które są teraz niepotrzebne.
Indeksy mają duży wpływ na wydajność zapisu – za każdym razem, gdy następuje zapis do kolekcji, odpowiednie indeksy muszą zostać zaktualizowane. Brak indeksów objawia się natychmiast i spowalnia zapytanie – nieużywane indeksy są bardziej subtelne i należy je aktywnie usuwać, aby poprawić wydajność zapisu. Więcej informacji można znaleźć tutaj – Niebezpieczeństwa związane z budowaniem indeksów w MongoDB.
We wcześniejszych wersjach MongoDB nie było łatwego sposobu ustalenia, czy indeks nie był używany. Jednak począwszy od wersji 3.2, MongoDB dodał obsługę operatora $indexStats, który umożliwia zbieranie statystyk dotyczących wykorzystania indeksu.
Znajdowanie nieużywanych indeksów w MongoDB
Aby sprawdzić statystyki użytkowania określonego indeksu w kolekcji, możesz użyć tego polecenia:
db.collection.aggregate([{$indexStats: {}}, {$match: {"name": "<indexname>"}}])
Aby uzyskać statystyki dla wszystkich indeksów kolekcji:
db.collection.aggregate([{$indexStats:{}}])
Zwrócony dokument będzie wyglądał tak:
{ "name" : "test", "key" : { "key" : 1 }, "host" : "xxx:27017", "accesses" : { "ops" : NumberLong(145), "since" : ISODate("2017-11-25T16:21:36.285Z") } }
Dwa ważne pola, na które należy zwrócić uwagę, to:
-
Operacje
Jest to liczba operacji, które wykorzystały indeks.
-
Od
Jest to czas, od którego MongoDB zbierał statystyki i zazwyczaj jest to ostatni czas rozpoczęcia.
Upuszczanie nieużywanych indeksów w MongoDB
Po zidentyfikowaniu i zweryfikowaniu nieużywanych indeksów MongoDB możesz usunąć indeks, korzystając z poniższego kodu:
db.collection.dropIndex( "<index name>"); or db.collection.dropIndex("{key1:1.....}")
Jak zawsze, przed kontynuowaniem operacji upuszczania proszę sprawdzić, czy upuszczasz właściwy indeks.
Jeśli masz jakiekolwiek pytania dotyczące znajdowania nieużywanych indeksów w MongoDB, zostaw komentarz poniżej lub skontaktuj się z nami pod adresem [email protected].