• Type: Icon: Epic Epic
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Component/s: None
    • None
    • To Do
    • Hidden Indexes
    • 100
    • Hide

      Following the completion of this project:

      • An index can be marked as "hidden", meaning that it is not available for consideration by the planner. While hidden, the index cannot be used by any active index filters, and any operations which hint the index will return an exception to the user. TTL indexes which are hidden will be unavailable for queries, but will continue to facilitate deletion of outdated documents.
      • An index can be hidden in one of two ways:
        • The "createIndexes" command now allows a new boolean option, "hidden", to be included with each index spec. If true, then the index will be marked hidden as soon as it has completed building.
        • An existing index can be hidden or unhidden using the "collMod" command's "index" parameter, whose argument (a document of options) now permits a new boolean field called "hidden".
      Show
      Following the completion of this project: An index can be marked as "hidden", meaning that it is not available for consideration by the planner. While hidden, the index cannot be used by any active index filters, and any operations which hint the index will return an exception to the user. TTL indexes which are hidden will be unavailable for queries, but will continue to facilitate deletion of outdated documents. An index can be hidden in one of two ways: The "createIndexes" command now allows a new boolean option, "hidden", to be included with each index spec. If true, then the index will be marked hidden as soon as it has completed building. An existing index can be hidden or unhidden using the "collMod" command's "index" parameter, whose argument (a document of options) now permits a new boolean field called "hidden".

      Downstream Change Summary

      TBD when the project completes.

      Description of Linked Ticket

      Epic Summary

      Summary

      This project implements functionality to allow indexes to be hidden from the query planner.

      Motivation

      As MongoDB users evolve schemas and tune performance, they are often in a position where dropping an index could improve query performance and reduce collection overhead. However, dropping an index comes with the risk that an application or script may depend on an index for acceptable performance and recreating can take substantial time.

      Allowing users to hide an index provides the opportunity to evaluate impact on user workloads. Restoring the index can then be done quickly, without having to undergo the time and expense of a full index build.

      Additionally, adding an index can cause a negative change in performance, if the query planner starts using the new index over a preferable existing index. Creating an index that is hidden on build completion allows users to make it visible at a suitable time for evaluation.

      Hiding an index only allows for plan selection evaluation and does not reduce the cost of maintenance. Index removal will still be required to reclaim disk space and improve write performance.

      Cast of Characters

      • Product Owner: Katya Kamenieva
      • Project Lead: James Wahlin
      • Program Manager: Craig Homa

      Documentation

      Scope Document
      Technical Design Document

       

      Specs commit: https://github.com/mongodb/specifications/commit/fafb0076e3c2ee8c35497bd1260c1cfc672c4919

            Assignee:
            Unassigned Unassigned
            Reporter:
            backlog-server-pm Backlog - Core Eng Program Management Team
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: