4.1. AQO (адаптивная оптимизация запросов)

AQO — это расширение Shardman, которое использует статистику выполнения запросов для улучшения оценки количества строк, что может способствовать выбору лучшего плана и, как следствие, ускорению запросов.

Для включения AQO выполните следующие шаги:

  1. Добавьте aqo в параметр shared_preload_libraries в sdmspec.json.

  2. Создайте расширение aqo на всех узлах.

    SET shardman.broadcast_ddl TO ON;
    CREATE EXTENSION aqo;
    RESET shardman.broadcast_ddl;
  3. Установите для aqo.mode значение learn и выполняйте запросы, которые вы хотите оптимизировать, с помощью EXPLAIN ANALYZE, пока план не перестанет меняться.

    BEGIN;
    SET aqo.mode = 'learn';
    EXPLAIN ANALYZE <query>
    RESET aqo.mode;
    COMMIT;

    Обратите внимание, что статистика aqo собирается отдельно для каждого узла в кластере Shardman. Поэтому вам придётся повторить этот процесс на каждом узле в кластере. В качестве альтернативы можно установить для aqo.mode значение learn и дать приложению поработать в этом режиме некоторое время, а затем вернуть его в режим по умолчанию (controlled).

Примечание

AQO не будет работать для запросов, содержащих меньшее количество соединений, чем указано в aqo.join_threshold (по умолчанию 3).

Полную документацию по AQO можно найти здесь.