Могу ли я использовать Zcatalogs Query Plan для оптимизации запросов каталога?


Мне интересно, могу ли я использовать информацию, предоставленную вкладками отчет о запросах и план запросов в каталоге портала. Можно ли оптимизировать запросы ZCatalog на основе отчета о запросах? Чем отличается план запроса ZCatalogs от плана запроса базы данных SQL?

1 3

1 ответ:

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

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

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

В целом, для больших приложений неплохо сохранить план запроса; в одном проекте мы сбрасываем кэш информация перед остановкой экземпляров и перезагрузка после повторного запуска, включая план запроса каталога:

plan = site.portal_catalog.getCatalogPlan()
with open(PLAN_PATH, 'w') as out:
    out.write(plan)

И по нагрузке:

if os.path.exists(PLAN_PATH):
    from Products.ZCatalog.plan import PriorityMap
    try:
        PriorityMap.load_from_path(PLAN_PATH)
    except Exception:
        pass