Как применить / выбрать getPlanCache () и hint () в зависимости от ситуации - PullRequest
0 голосов
/ 30 сентября 2018

Я уже прочитал официальную документацию, чтобы получить основную информацию о getPlanCache () и hint ().

  • getPlanCache ()

Отображает кэшированные планы запросов дляуказанная форма запроса.

Оптимизатор запросов кэширует планы только для тех форм запросов, которые могут иметь более одного жизнеспособного плана.

Официальная документация: https://docs.mongodb.com/manual/reference/method/PlanCache.getPlansByQuery/

  • hint ()

Оператор $ hint заставляет оптимизатор запросов использовать определенный индекс для выполнения запроса.Укажите индекс либо по имени индекса, либо по документу.

Официальная документация: https://docs.mongodb.com/manual/reference/operator/meta/hint/

MyQuestion

Если я могу убедиться, что конкретныйколлекция может кэшировать план, мне не нужно использовать подсказку () для обеспечения оптимизированной производительности.Это правильно?

1 Ответ

0 голосов
/ 09 октября 2018

Я уже прочитал официальную документацию, чтобы понять основную информацию о getPlanCache () и hint ().

Чтобы было понятно: это средства устранения неполадок для исследования производительности запросов.Планировщик запросов MongoDB выбирает наиболее эффективный план, доступный на основе меры «работы», связанной с выполнением заданной формы запроса.Если существует только один жизнеспособный план, нет необходимости кэшировать выбор плана.Если для одной формы запроса доступно несколько планов запросов, планировщик запросов будет периодически оценивать производительность и, при необходимости, обновлять выбор кэшированных планов.

Методы кэширования плана запросов позволяют проверятьи очистить информацию в кеше плана.Как правило, вы хотите очистить кэш плана только при исследовании проблем в среде разработки / промежуточной среды, поскольку это может оказать заметное влияние на занятое развертывание.

Если я смогу убедиться, что конкретная коллекция может кэшироватьсяплан, мне не нужно использовать подсказку () для обеспечения оптимизированной производительности.Это правильно?

Как правило, следует избегать использования hint (вне планов тестирования), поскольку это обходит планировщик запросов и вынуждает использовать подсказку, даже если существует более эффективныйиндекс доступен.

Если конкретный запрос не выполняется должным образом, explain() output является наилучшей отправной точкой для понимания процесса планирования запросов.Если вы не знаете, как оптимизировать конкретный запрос, я бы предложил разместить вопрос на DBA StackExchange , включая вывод explain(true) (подробное объяснение) и версию вашего сервера MongoDB.

Для полезной презентации см .: Чтение выходных данных .explain () - Чарли Свансон (июнь 2017 г.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...