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 можно найти здесь.

4.1. AQO (Adaptive Query Optimization) #

AQO is a Shardman extension that uses query execution statistics for improving cardinality estimation, which can optimize execution plans and, consequently, speed up query execution.

To turn on AQO:

  1. Add aqo to the shared_preload_libraries parameter in sdmspec.json.

  2. Create extension aqo on all nodes.

    SET shardman.broadcast_ddl TO ON;
    CREATE EXTENSION aqo;
    RESET shardman.broadcast_ddl;
    

  3. Set aqo.mode for learn and run queries that you want to optimize with EXPLAIN ANALYZE until the plan stops changing.

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

    Note that aqo statistics is collected separately on all nodes in a Shardman cluster. So you need to repeat this process on each node in the cluster. Alternatively, you can set aqo.mode to learn and run your application for some time and later turn it back to the default mode (controlled).

Note

AQO will not be activated if you join less than aqo.join_threshold relations (3 by default).

Complete aqo documentation can be found here.

FAQ