Поделиться через


Параметры сервера Azure Cosmos DB for PostgreSQL

Область применения: Azure Cosmos DB для PostgreSQL (на базе расширения базы данных Citus до PostgreSQL)

Существуют различные параметры сервера, влияющие на поведение Azure Cosmos DB для PostgreSQL, как из стандартного PostgreSQL, так и для Azure Cosmos DB для PostgreSQL. Эти параметры можно настроить на портале Azure для кластера. В категории Параметры выберите Параметры рабочего узла или Параметры узла координатора. Эти страницы позволяют вам установить параметры для всех рабочих узлов или только для узла координатора.

Параметры Azure Cosmos DB for PostgreSQL

Примечание.

Кластеры под управлением более старых версий расширения Citus могут не предлагать все параметры, перечисленные ниже.

Общая конфигурация

citus.use_secondary_nodes (enum)

Задает политику, используемую при выборе узлов для запросов SELECT. Если для него задано значение always, планировщик запрашивает только узлы, помеченные как "вторичный" noderole в pg_dist_node.

Для этого перечисления поддерживаются следующие значения:

  • never (по умолчанию): все операции чтения происходят на первичных узлах.
  • always: вместо этого чтение выполняется для вторичных узлов, а операторы вставки и обновления отключены.

citus.cluster_name (text)

Сообщает планировщику узлов-координаторов, какой кластер он координирует. После установки cluster_name планировщик запрашивает рабочие узлы в этом кластере только.

citus.enable_version_checks (boolean)

Для обновления Azure Cosmos DB для PostgreSQL требуется перезапуск сервера (для получения новой общей библиотеки), а затем команда ALTER EXTENSION UPDATE. Невыполнение обоих шагов потенциально может вызвать ошибки или сбои. Azure Cosmos DB для PostgreSQL таким образом проверяет версию кода и соответствие расширений, а также ошибки, если они нет.

По умолчанию это значение равно true, и оно действует для координатора. В редких случаях сложные процессы обновления могут требовать установки этого параметра на значение false, что отключит проверку.

citus.log_distributed_deadlock_detection (boolean)

Следует ли записывать в журнал на сервере обработку, связанную с обнаружением распределенной взаимоблокировкой. По умолчанию используется значение false.

citus.distributed_deadlock_detection_factor (floating point)

Устанавливает время ожидания перед проверкой распределенных взаимоблокировок. В частности, время ожидания — это значение, умноженное на параметр deadlock_timeout PostgreSQL. Значение по умолчанию — 2. Значение -1 отключает обнаружение распределенной взаимоблокировки.

citus.node_connection_timeout (integer)

citus.node_connection_timeout GUC устанавливает максимальную продолжительность (в миллисекундах) ожидания установления соединения. Azure Cosmos DB for PostgreSQL вызывает ошибку, если время ожидания истекает до того, как будет установлено хотя бы одно рабочее соединение. Этот GUC влияет на связи координатора с рабочими и рабочих друг с другом.

  • По умолчанию: 5 секунд.
  • Минимум: 10 миллисекунд.
  • Максимум: 1 час.
-- set to 30 seconds
ALTER DATABASE foo
SET citus.node_connection_timeout = 30000;

citus.log_remote_commands (boolean)

Запись всех команд, которые координатор отправляет на рабочие узлы. Например:

-- reveal the per-shard queries behind the scenes
SET citus.log_remote_commands TO on;

-- run a query on distributed table "github_users"
SELECT count(*) FROM github_users;

Выходные данные указывают на несколько запросов, выполняющихся в рабочих ролях, так как один запрос count(*) направлен к координатору.

NOTICE:  issuing SELECT count(*) AS count FROM public.github_events_102040 github_events WHERE true
DETAIL:  on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
NOTICE:  issuing SELECT count(*) AS count FROM public.github_events_102041 github_events WHERE true
DETAIL:  on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
NOTICE:  issuing SELECT count(*) AS count FROM public.github_events_102042 github_events WHERE true
DETAIL:  on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
... etc, one for each of the 32 shards

citus.show_shards_for_app_name_prefixes (текстовое значение)

По умолчанию Azure Cosmos DB для PostgreSQL скрывает сегменты из списка таблиц PostgreSQL, предоставляемых клиентам SQL. Это происходит из-за того, что в каждой распределенной таблице существует несколько сегментов, и эти сегменты могут быть ненужными для клиента SQL.

Параметр GUC citus.show_shards_for_app_name_prefixes позволяет отображать сегменты для выбранных клиентов, которые хотят их просмотреть. Значение этого параметра по умолчанию — ''.

-- show shards to psql only (hide in other clients, like pgAdmin)

SET citus.show_shards_for_app_name_prefixes TO 'psql';

-- also accepts a comma separated list

SET citus.show_shards_for_app_name_prefixes TO 'psql,pg_dump';

Скрытие сегментов можно полностью отключить с помощью параметра citus.override_table_visibility.

citus.override_table_visibility (логическое значение)

Определяет, активен ли параметр citus.show_shards_for_app_name_prefixes. Значение по умолчанию — "true". Если указано значение false, сегменты будут видны всем клиентским приложениям.

citus.use_citus_managed_tables (логическое значение)

Разрешить доступ к новым локальным таблицам с помощью запросов на рабочих узлах. Если этот параметр имеет значение true, все вновь созданные таблицы добавляются в метаданные Citus. Значение по умолчанию — "false".

citus.rebalancer_by_disk_size_base_cost (целое число)

Используя стратегию перебалансирования by_disk_size, каждая группа сегментов получает эту стоимость в байтах, добавленных к фактическому размеру диска. Это значение используется для предотвращения плохого баланса при наличии небольших данных в некоторых сегментах. Предположение заключается в том, что даже пустые сегменты имеют некоторую стоимость, из-за параллелизма и потому, что пустые группы сегментов, вероятно, будут расти в будущем.

Значение по умолчанию — 100MB.

Статистика запросов

citus.stat_statements_purge_interval (integer)

Устанавливает частоту, с которой демон обслуживания удаляет записи из citus_stat_statements, которые не совпадают в pg_stat_statements. Это значение конфигурации устанавливает интервал времени между чистками в секундах со значением по умолчанию 10. Значение 0 отключает очистку.

SET citus.stat_statements_purge_interval TO 5;

Этот параметр действует для координатора и может быть изменен во время выполнения.

citus.stat_statements_max (integer)

Максимальное число строк, сохраняемых в citus_stat_statements. По умолчанию используется значение 50000 и может быть изменено на любое значение в диапазоне 1000 – 100000000. Для каждой строки требуется 140 байт хранилища, поэтому при установке максимального значения в 10 миллионов для stat_statements_max будет использовано 1,4 ГБ памяти.

Изменение этого GUC не вменяется до перезапуска PostgreSQL.

citus.stat_statements_track (enum)

Для записи статистики citus_stat_statements требуются дополнительные ресурсы ЦП. При загрузке базы данных администратор может отключить отслеживание инструкций, установив для noneпараметра значение citus.stat_statements_track .

  • все: (по умолчанию) отслеживание всех инструкций.
  • нет: отключение отслеживания.

citus.stat_tenants_untracked_sample_rate

Частота выборки для новых клиентов в citus_stat_tenants. Частота может быть диапазоном между 0.0 и 1.0. Значение по умолчанию — это 1.0 100 % неуправляемых запросов клиента. Если задать значение ниже, это означает, что уже отслеживаемые клиенты имеют выборку 100 % запросов, но клиенты, которые в настоящее время не отслеживаются, выборка выполняется только по заданной ставке.

Загрузка данных

citus.multi_shard_commit_protocol (enum)

Устанавливает протокол фиксации для использования при выполнении КОПИРОВАНИЯ в распределенной хэш-таблице. В каждом отдельном размещении сегментов копирование выполняется в блоке транзакций, чтобы предотвратить прием данных при возникновении ошибки во время копирования. Однако существует определенный случай сбоя, при котором копирование выполняется успешно во всех местах, но сбой (оборудование) происходит до фиксации всех транзакций. Этот параметр можно использовать для предотвращения потери данных в этом случае путем выбора между следующими протоколами фиксации:

  • 2pc: (по умолчанию): транзакции, в которых выполняется операция копирования COPY для размещения сегментов, сначала подготавливаются с использованием двухфазной фиксации PostgreSQL, а затем фиксируются. Неудачные фиксации можно восстановить вручную или отменить с помощью COMMIT PREPARED или ROLLBACK PREPARED соответственно. При использовании 2pc значение max_prepared_transactions должно быть увеличено для всех рабочих ролей, обычно до того же значения, что и max_connections.
  • 1pc: транзакции, в которых выполняется КОПИРОВАНИЕ для размещения сегментов, совершаются в одном раунде. Данные могут быть потеряны, если фиксация завершается сбоем после успешного выполнения копирования на всех местах размещения (редко).

citus.shard_replication_factor (integer)

Задает коэффициент репликации для сегментов, то есть количество узлов, на которых размещаются сегменты, и по умолчанию — 1. Этот параметр может быть установлен во время выполнения и действует на координаторе. Идеальное значение этого параметра зависит от размера кластера и частоты отказов узлов. Например, этот коэффициент репликации можно увеличить, если вы запускаете большие кластеры и наблюдаете сбои узлов на более частой основе.

Конфигурация планировщика

citus.local_table_join_policy (enum)

Этот GUC определяет, как Azure Cosmos DB для PostgreSQL перемещает данные при соединении между локальными и распределенными таблицами. Настройка политики объединения может помочь уменьшить объем данных, передаваемых между рабочими узлами.

Azure Cosmos DB для PostgreSQL отправляет локальные или распределенные таблицы узлам по мере необходимости для поддержки соединения. Копирование данных таблицы называется преобразованием. Если локальная таблица преобразуется, она отправляется всем рабочим работникам, которым требуются его данные для выполнения соединения. Если распределенная таблица преобразуется, она собирается в координаторе для поддержки соединения. Планировщик Azure Cosmos DB для PostgreSQL отправляет только необходимые строки, выполняя преобразование.

Существует четыре режима, доступные для параметра экспресс-преобразования:

  • auto: (по умолчанию) Azure Cosmos DB для PostgreSQL преобразует все локальные или все распределенные таблицы для поддержки локальных и распределенных соединений таблиц. Azure Cosmos DB для PostgreSQL решает, какой следует преобразовать с помощью эвристики. Он преобразует распределенные таблицы, если они присоединены с помощью постоянного фильтра по уникальному индексу (например, первичному ключу). Преобразование обеспечивает сокращение перемещаемых между рабочими ролями данных.
  • никогда: Azure Cosmos DB для PostgreSQL не разрешает соединения между локальными и распределенными таблицами.
  • prefer-local: Azure Cosmos DB для PostgreSQL предпочитает преобразование локальных таблиц для поддержки локальных и распределенных соединений таблиц.
  • prefer-distributed: Azure Cosmos DB для PostgreSQL предпочитает преобразование распределенных таблиц для поддержки локальных и распределенных соединений таблиц. Если распределенные таблицы имеют большой размер, использование этого параметра может привести к перемещению большого количества данных между рабочими ролями.

Например, предположим, что citus_table — распределенная таблица, распределенная по столбцу x, а postgres_table — локальная таблица:

CREATE TABLE citus_table(x int primary key, y int);
SELECT create_distributed_table('citus_table', 'x');

CREATE TABLE postgres_table(x int, y int);

-- even though the join is on primary key, there isn't a constant filter
-- hence postgres_table will be sent to worker nodes to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x);

-- there is a constant filter on a primary key, hence the filtered row
-- from the distributed table will be pulled to coordinator to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;

SET citus.local_table_join_policy to 'prefer-distributed';
-- since we prefer distributed tables, citus_table will be pulled to coordinator
-- to support the join. Note that citus_table can be huge.
SELECT * FROM citus_table JOIN postgres_table USING (x);

SET citus.local_table_join_policy to 'prefer-local';
-- even though there is a constant filter on primary key for citus_table
-- postgres_table will be sent to necessary workers because we are using 'prefer-local'.
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;

citus.limit_clause_row_fetch_count (integer)

Устанавливает количество строк для выборки для каждой задачи для оптимизации предложения limit. В некоторых случаях выбор запросов с предложениями ограничения может потребоваться получить все строки из каждой задачи для создания результатов. В тех случаях, когда приближение может дать значимые результаты, это значение конфигурации устанавливает количество строк, которые нужно извлечь из каждого осколка. По умолчанию предельные аппроксимации отключены, и для этого параметра установлено значение –1. Это значение может быть установлено во время выполнения и действует для координатора.

citus.count_distinct_error_rate (floating point)

Azure Cosmos DB для PostgreSQL может вычислить приблизительное число (уникальные) с помощью расширения postgresql-hll. Эта запись конфигурации задает требуемую частоту ошибок при вычислении числа (DISTINCT). 0,0, который является значением по умолчанию, отключает приближения для Count (DISTINCT); и 1,0 не предоставляет никаких гарантий относительно точности результатов. Мы рекомендуем установить этот параметр на 0,005 для достижения наилучших результатов. Это значение может быть установлено во время выполнения и действует для координатора.

citus.task_assignment_policy (enum)

Примечание.

Этот GUC применяется только в том случае, если shard_replication_factor больше одного или для запросов к reference_tables.

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

  • жадность: политика жадности используется по умолчанию и направлена на равномерное распределение задач между рабочими.
  • циклический перебор: политика циклического перебора назначает задачи работникам циклически, чередуя разные реплики. Эта политика позволяет лучше использовать кластер, когда количество сегментов для таблицы мало по сравнению с количеством рабочих процессов.
  • первая реплика: политика первой реплики назначает задачи на основе порядка вставки мест размещения (реплик) для сегментов. Другими словами, запрос фрагмента для сегмента назначается работнику, у которого есть первая реплика этого сегмента. Этот метод позволяет иметь надежные гарантии того, какие сегменты используются на узлах (т. е. более строгие гарантии расположения памяти).

Этот параметр может быть установлен во время выполнения и действует на координаторе.

citus.enable_non_colocated_router_query_pushdown (логический)

Включает планировщик маршрутизатора для запросов, ссылающихся на нераспределенные распределенные таблицы.

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

Значение по умолчанию — off.

Промежуточная передача данных

citus.max_intermediate_result_size (integer)

Максимальный размер в КБ промежуточных результатов для CTE, которые не могут быть переданы на рабочие узлы для выполнения, и для сложных подзапросов. По умолчанию это 1 ГБ, а значение –1 означает отсутствие ограничений. Запросы, превышающие ограничение, отменяются и создают сообщение об ошибке.

DDL

citus.enable_schema_based_sharding

Если задано значение ONпараметра, все созданные схемы распределяются по умолчанию. Распределенные схемы автоматически связаны с отдельными группами совместного размещения, таким образом, что таблицы, созданные в этих схемах, преобразуются в совместно размещенные распределенные таблицы без ключа сегментов. Этот параметр можно изменить для отдельных сеансов.

Пример использования этого графического интерфейса см. в статье о разработке микрослужбы.

Конфигурация исполнителя

Общие

citus.all_modifications_commutative

Azure Cosmos DB для PostgreSQL применяет правила коммутативности и получает соответствующие блокировки для операций изменения, чтобы гарантировать правильность поведения. Например, предполагается, что инструкция INSERT находится в другой инструкции INSERT, но не с инструкцией UPDATE или DELETE. Аналогичным образом предполагается, что инструкция UPDATE или DELETE не работает с другой инструкцией UPDATE или DELETE. Эта мера предосторожности означает, что UPDATEs и DELETEs требуются Azure Cosmos DB для PostgreSQL для получения более сильных блокировок.

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

citus.remote_task_check_interval (integer)

Задает частоту, с которой Azure Cosmos DB для PostgreSQL проверяет состояние заданий, управляемых исполнителем средства отслеживания задач. По умолчанию используется значение 10 мс. Координатор распределяет задачи между рабочими ролями, а затем регулярно проверяет ход выполнения каждой задачи. Это значение конфигурации устанавливает временной интервал между двумя последовательными проверками. Этот параметр действует для координатора и может быть установлен во время выполнения.

citus.task_executor_type (enum)

Azure Cosmos DB для PostgreSQL имеет три типа исполнителя для выполнения распределенных запросов SELECT. Чтобы выбрать нужный исполнитель, установите этот параметр конфигурации. Ниже указаны допустимые значения этого параметра.

  • адаптивный: по умолчанию. Он оптимален для быстрых ответов на запросы, которые включают агрегаты и совместные объединения, охватывающие несколько сегментов.
  • средство отслеживания задач: исполнитель средства отслеживания задач хорошо подходит для длительных сложных запросов, требующих перетасовки данных между рабочими узлами и эффективного управления ресурсами.
  • в реальном времени (нерекомендуемый): служит той же цели, что и адаптивный исполнитель, но менее гибок и может вызвать большее давление соединения на рабочие узлы.

Этот параметр может быть установлен во время выполнения и действует на координаторе.

citus.multi_task_query_log_level (enum) {#multi_task_logging}

Устанавливает уровень журнала для любого запроса, который создает более одной задачи (т. е. затрагивает более одного сегмента). Ведение журнала полезно во время многотенантной миграции приложений, так как вы можете выбрать ошибку или предупредить об этих запросах, чтобы найти их и добавить в них фильтр tenant_id. Этот параметр может быть установлен во время выполнения и действует для координатора. Значение по умолчанию для этого параметра — «выкл.».

Для этого перечисления поддерживаются следующие значения:

  • отключение: выключить регистрацию любых запросов, которые генерируют несколько задач (то есть охватывают несколько сегментов)
  • отлаживать: записывает инструкцию на уровне серьезности DEBUG.
  • журнал: записывает инструкцию на уровне серьезности LOG. Строка журнала включает выполняемый SQL-запрос.
  • уведомление: записывает показания в журнал на уровне важности NOTICE.
  • предупреждение: записывает оператор на уровне серьезности WARNING.
  • ошибка: записывает оператор на уровне серьезности ERROR.

Это может быть полезно для использования error во время тестирования разработки и более низкого уровня журнала, например log во время фактического рабочего развертывания. Выбор log приведет к появлению многозадачных запросов в журналах базы данных, причем сам запрос будет отображаться после STATEMENT.

LOG:  multi-task query about to be executed
HINT:  Queries are split to multiple tasks if they have to be split into several queries on the workers.
STATEMENT:  select * from foo;
citus.propagate_set_commands (enum)

Определяет, какие команды SET распространяются от координатора к рабочим ролям. Этот параметр по умолчанию принимает значение «нет».

Поддерживаются такие значения:

  • нет: команды SET не распространяются.
  • локально: распространяются только команды SET LOCAL.
citus.create_object_propagation (перечисление)

Определяет поведение инструкций CREATE в транзакциях для поддерживаемых объектов.

Когда объекты создаются в блоке транзакций с несколькими операторами, Azure Cosmos DB для PostgreSQL переключает последовательный режим, чтобы гарантировать, что созданные объекты видны более поздним операторам сегментов. Однако переключение на последовательный режим не всегда желательно. Переопределяя это поведение, пользователь может пожертвовать производительностью для обеспечения полной согласованности транзакций при создании новых объектов.

Значение этого параметра по умолчанию — 'immediate'.

Поддерживаются такие значения:

  • immediate: вызывает ошибку в транзакциях, в которых используются параллельные операции, такие как create_distributed_table, до вызова CREATE TYPE.
  • automatic: откладывает создание типов при совместном использовании транзакции с параллельной операцией в распределенных таблицах. Может возникнуть некоторое несоответствие между объектами базы данных на разных узлах.
  • deferred: возврат к поведению до версии 11.0, которое похоже на вариант "automatic", но имеет другие нюансы. Мы рекомендуем использовать вариант "automatic" вместо "deferred", если вам не требуется подлинная обратная совместимость.

Пример этого параметра GUC в действии см. в разделе Распространение типов.

citus.enable_repartition_joins (boolean)

Обычно попытка повторного соединения с адаптивным исполнителем завершается ошибкой с сообщением об ошибке. Однако значение citus.enable_repartition_joins true позволяет Azure Cosmos DB для PostgreSQL временно переключаться в исполнителя отслеживания задач для выполнения соединения. По умолчанию используется значение false.

citus.enable_repartitioned_insert_select (boolean)

По умолчанию INSERT INTO... Инструкция SELECT, которая не может быть отправлена вниз, пытается пересекать строки из инструкции SELECT и передавать их между рабочими ролей для вставки. Однако если целевая таблица содержит слишком много сегментов, то, вероятно, повторное секционирование не будет выполнено правильно. Слишком высокие издержки на обработку интервалов сегментирования при определении способа секционирования результатов. Повторное секционирование можно отключить вручную, задав значение false для параметра citus.enable_repartitioned_insert_select.

citus.enable_binary_protocol (boolean)

Установка этого параметра в значение true указывает узлу координатора использовать формат двоичной сериализации PostgreSQL (если применимо) для передачи данных с помощью рабочих ролей. Некоторые типы столбцов не поддерживают двоичную сериализацию.

Включение этого параметра чаще всего необходимо, когда рабочие роли должны возвращать большие объемы данных. Например, когда при запросе большого количества строк строки имеют много столбцов или используют широкие типы, например hll из расширения postgresql hll.

Значение по умолчанию — true. Если задано значение false, все результаты кодируются и передаются в текстовом формате.

citus.max_adaptive_executor_pool_size (integer)

Max_adaptive_executor_pool_size ограничивает подключения рабочих ролей из текущего сеанса. Этот GUC помогает:

  • Предотвращать получения всех рабочих ресурсов одной серверной частью
  • Обеспечивать управление приоритетами: назначение сеансам с низким приоритетом низких значений max_adaptive_executor_pool_size и сеансам с высоким приоритетом более высоких значений

Значение по умолчанию — 16.

citus.executor_slow_start_interval (integer)

Время ожидания в миллисекундах между открытием подключений к одному и тому же рабочему узлу.

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

Для длинных запросов (продолжительнее > 500 мс) медленный запуск может привести к задержке, но для коротких запросов это приведет к ускорению. Значение по умолчанию — 10 мс.

citus.max_cached_conns_per_worker (integer)

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

Значение по умолчанию равно 1. Большее значение, например 2, может оказаться полезным для кластеров, использующих небольшое количество одновременных сеансов, но не стоит увеличивать его еще больше (например, 16 – это слишком много).

citus.force_max_query_parallelization (boolean)

Имитирует устаревший и несуществующий в данный момент исполнитель в реальном времени. Этот параметр используется для открытия максимально возможного количества подключений для максимальной параллелизации запросов.

Если этот GUC включен, Azure Cosmos DB для PostgreSQL заставляет адаптивного исполнителя использовать максимальное количество подключений при выполнении параллельного распределенного запроса. Если этот параметр не включен, исполнитель может использовать меньшее число соединений для оптимизации общей пропускной способности выполнения запросов. На внутреннем уровне установка этого true значения заканчивается одним подключением для каждой задачи.

Одно место, в котором этот параметр полезен, находится в транзакции, первый запрос которой является упрощенным и требует нескольких подключений, а последующий запрос будет использовать больше подключений. Azure Cosmos DB для PostgreSQL решает, сколько подключений, используемых в транзакции на основе первой инструкции, которая может регулировать другие запросы, если только мы не используем GUC для указания.

BEGIN;
-- add this hint
SET citus.force_max_query_parallelization TO ON;

-- a lightweight query that doesn't require many connections
SELECT count(*) FROM table WHERE filter = x;

-- a query that benefits from more connections, and can obtain
-- them since we forced max parallelization above
SELECT ... very .. complex .. SQL;
COMMIT;

По умолчанию используется значение false.

Конфигурация исполнителя трекера задач

citus.task_tracker_delay (integer)

Этот параметр устанавливает время ожидания средства отслеживания задач между циклами управления задачами и по умолчанию составляет 200 мс. Процесс отслеживания задач регулярно просыпается, просматривает все назначенные ему задачи, планирует и выполняет эти задачи. Затем средство регистрации задач находится в спящем режиме за период времени, прежде чем снова проанализировать эти задачи. Это значение конфигурации определяет продолжительность периода сна. Этот параметр действует для рабочих процессов и должен быть изменен в файле postgresql.conf. После редактирования файла конфигурации пользователи могут отправить сигнал SIGHUP или перезапустить сервер, чтобы изменения вступили в силу.

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

citus.max_assign_task_batch_size (integer)

Исполнитель планировщика задач в координаторе синхронно назначает задачи пакетами управляющей программы на рабочих ролях. Этот параметр устанавливает максимальное количество задач, назначаемых в одном пакете. Выбор большего размера пакета позволяет быстрее назначать задачи. Однако если число рабочих ролей большое, то для получения задач может потребоваться больше времени. Этот параметр может быть установлен во время выполнения и действует для координатора.

citus.max_running_tasks_per_node (integer)

Процесс отслеживания задач составляет график и выполняет назначенные ему задачи по мере необходимости. Это значение конфигурации устанавливает максимальное количество задач для одновременного выполнения на одном узле в любой момент времени и по умолчанию равно 8.

Предельное значение ограничивает число задач, одновременно использующих ресурс диска, и помогает избежать конфликтов ввода-вывода на диске. Если ваши запросы обслуживаются из памяти или SSD, вы можете без опасений увеличить значение max_running_tasks_per_node.

citus.partition_buffer_size (integer)

Задает размер буфера, который будет использоваться для операций с разделами, по умолчанию — 8 МБ. Azure Cosmos DB для PostgreSQL позволяет повторно разделить данные таблицы на несколько файлов при присоединении двух больших таблиц. После того как этот буфер раздела заполняется, повторно разбитые на разделы данные сбрасываются в файлы на диске. Эта запись конфигурации может быть установлена во время выполнения и действует для рабочих.

Объяснить выходные данные

citus.explain_all_tasks (boolean)

По умолчанию в Azure Cosmos DB для PostgreSQL отображаются выходные данные одной произвольной задачи при выполнении ИНСТРУКЦИИ в распределенном запросе. В большинстве случаев выходные данные объяснения похожи на задачи. Иногда некоторые задачи планируются по-разному или имеют гораздо более высокое время выполнения. В таких случаях можно включить этот параметр, после чего выходные данные EXPLAIN включают все задачи. Объяснение всех задач может привести к тому, что ОБЪЯСНЕНИЕ займет больше времени.

citus.explain_analyze_sort_method (enum)

Определяет метод сортировки задач в выходных данных EXPLAIN ANALYZE. Значение citus.explain_analyze_sort_method по умолчанию — execution-time.

Поддерживаются такие значения:

  • execution-time: сортировка по времени выполнения.
  • taskId: сортировка по идентификатору задачи.

Управляемые параметры PgBouncer

Следующие управляемые параметры PgBouncer можно настроить на одном узле или координаторе.

имени параметра Description По умолч.
pgbouncer.default_pool_size Присвойте этому параметру значение количества подключений для каждой пары пользователей или базы данных. 295
pgbouncer.ignore_startup_parameters Список через запятую параметров, которые PgBouncer может игнорировать. Например, можно разрешить PgBouncer игнорировать параметр extra_float_digits. Некоторые параметры разрешены, все остальные вызывают ошибку. Эта способность необходима для того, чтобы терпеть чрезмерное число JDBC, желающих безоговорочно задать "extra_float_digits=2" в пакете запуска. Используйте этот параметр, если библиотека использует такие ошибки отчета, как pq: unsupported startup parameter: extra_float_digits. extra_float_digits, ssl_renegotiation_limit
pgBouncer.max_client_conn Значение этого параметра определяет наибольшее число клиентских подключений к PgBouncer, которое требуется поддерживать. 2000
pgBouncer.min_pool_size Если количество подключений к серверу в пуле ниже этого значения, добавляются новые подключения. 0 (отключено)
pgBouncer.pool_mode Задайте для этого параметра значение TRANSACTION, чтобы использовать пул транзакций (рекомендуемый вариант для большинства рабочих нагрузок). ТРАНЗАКЦИЯ
pgbouncer.query_wait_timeout Максимальное время (в секундах), в течение которого запросы могут ожидать выполнения. Если запрос не назначен серверу в течение этого времени, клиент отключается. 20 с
pgbouncer.server_idle_timeout Если подключение к серверу неактивно больше, чем это много секунд, оно закрывается. Если значение 0, это время ожидания отключено. 60 с

Параметры PostgreSQL

  • DateStyle — устанавливает формат отображения значений даты и времени
  • IntervalStyle — устанавливает формат отображения для значений интервала
  • TimeZone — устанавливает часовой пояс для отображения и интерпретации отметок времени
  • application_name — устанавливает имя приложения, которое будет отображаться в статистике и журналах
  • array_nulls — разрешает ввод NULL-элементов в массивы
  • autovacuum — запускает подпроцесс автоочистки
  • autovacuum_analyze_scale_factor — количество вставок, обновлений или удалений кортежей перед анализом как доля повторений
  • autovacuum_analyze_threshold — минимальное количество вставок, обновлений или удалений кортежей перед анализом
  • autovacuum_naptime — время сна между запусками автоочистки
  • autovacuum_vacuum_cost_delay — задержка стоимости вакуума в миллисекундах для автовакуума
  • autovacuum_vacuum_cost_limit — сумма стоимости вакуума, доступная перед сном, для автовакуума
  • autovacuum_vacuum_scale_factor — количество обновлений или удалений кортежей до вакуумирования как доля повторений
  • autovacuum_vacuum_threshold — минимальное количество обновлений или удалений кортежей до очистки
  • autovacuum_work_mem — устанавливает максимальный объем памяти, который будет использоваться каждым рабочим процессом автоочистки
  • backend_flush_after — количество страниц, после которых ранее выполненные операции записи сбрасываются на диск
  • backslash_quote — устанавливает, разрешено ли использование "" в строковых литералах
  • bgwriter_delay — фоновое время сна писателя между раундами
  • bgwriter_flush_after — количество страниц, после которых ранее выполненные операции записи сбрасываются на диск
  • bgwriter_lru_maxpages — фоновый писатель максимального количества страниц LRU, которые нужно сбросить за раунд
  • bgwriter_lru_multiplier — количество свободного буфера, кратное среднему за раунд
  • bytea_output — устанавливает выходной формат для байта
  • check_function_bodies — проверяет тела функций во время CREATE FUNCTION
  • checkpoint_completion_target — время, затраченное на очистку грязных буферов во время контрольной точки, как доля интервала контрольной точки
  • checkpoint_timeout — устанавливает максимальное время между автоматическими контрольными точками WAL
  • checkpoint_warning — включает предупреждения, если сегменты контрольной точки заполняются чаще, чем это
  • client_encoding — устанавливает кодировку набора символов клиента
  • client_min_messages — устанавливает уровни сообщений, отправляемых клиенту
  • commit_delay — устанавливает задержку в микросекундах между фиксацией транзакции и сбросом WAL на диск
  • commit_siblings — устанавливает минимальное количество одновременных открытых транзакций перед выполнением commit_delay
  • constraint_exclusion — позволяет планировщику использовать ограничения для оптимизации запросов
  • cpu_index_tuple_cost — устанавливает оценку планировщиком стоимости обработки каждой записи индекса во время сканирования индекса
  • cpu_operator_cost — устанавливает оценку планировщиком стоимости обработки каждого вызова оператора или функции
  • cpu_tuple_cost — устанавливает оценку планировщиком стоимости обработки каждого кортежа (строки)
  • cursor_tuple_fraction. Задает оценку планировщика доли полученных строк курсора.
  • deadlock_timeout — устанавливает время в миллисекундах для ожидания блокировки перед проверкой тупиковой блокировки
  • debug_pretty_print — отступы для синтаксического анализа и отображения дерева плана
  • debug_print_parse — регистрирует дерево синтаксического анализа каждого запроса
  • debug_print_plan — регистрирует план выполнения каждого запроса
  • debug_print_rewritten — регистрирует переписанное дерево синтаксического анализа каждого запроса
  • default_statistics_target — устанавливает цель статистики по умолчанию
  • default_tablespace — устанавливает табличное пространство по умолчанию для создания таблиц и индексов в
  • default_text_search_config — устанавливает конфигурацию текстового поиска по умолчанию
  • default_transaction_deferrable — устанавливает отложенный статус по умолчанию для новых транзакций
  • default_transaction_isolation — устанавливает уровень изоляции каждой новой транзакции
  • default_transaction_read_only — устанавливает статус по умолчанию для новых транзакций только для чтения
  • default_with_oids — создает новые таблицы с OID по умолчанию
  • effective_cache_size — устанавливает предположение планировщика о размере дискового кэша
  • enable_bitmapscan — позволяет планировщику использовать планы сканирования растровых изображений
  • enable_gathermerge — позволяет планировщику использовать планы слияния сборки
  • enable_hashagg — позволяет планировщику использовать хэшированные планы агрегации
  • enable_hashjoin — позволяет планировщику использовать планы хэш-соединения
  • enable_indexonlyscan — позволяет планировщику использовать планы сканирования только для индекса
  • enable_indexscan — позволяет планировщику использовать планы сканирования индекса
  • enable_material — позволяет планировщику использовать материализацию
  • enable_mergejoin — позволяет планировщику использовать планы объединения слиянием
  • enable_nestloop — позволяет планировщику использовать планы объединения вложенных циклов
  • enable_seqscan — позволяет планировщику использовать планы последовательного сканирования
  • enable_sort — позволяет планировщику использовать явные шаги сортировки
  • enable_tidscan — позволяет планировщику использовать планы сканирования TID
  • escape_string_warning — Предупреждает об экранировании обратной косой черты в обычных строковых литералах
  • exit_on_error — завершает сеанс при любой ошибке
  • extra_float_digits — устанавливает количество цифр, отображаемых для значений с плавающей запятой
  • force_parallel_mode — заставляет использовать средства параллельного запроса
  • from_collapse_limit — устанавливает размер списка FROM, при превышении которого подзапросы не сворачиваются
  • geqo — включает генетическую оптимизацию запросов
  • geqo_effort — GEQO: усилия используются для установки значений по умолчанию для других параметров GEQO
  • geqo_generations — GEQO: количество итераций алгоритма
  • geqo_pool_size — GEQO: количество особей в популяции
  • geqo_seed — GEQO: начальное число для случайного выбора пути
  • geqo_selection_bias — GEQO: избирательное давление среди населения
  • geqo_threshold — устанавливает порог элементов FROM, за которым используется GEQO
  • gin_fuzzy_search_limit — устанавливает максимально допустимый результат для точного поиска по GIN
  • gin_pending_list_limit — устанавливает максимальный размер ожидающего списка для индекса GIN
  • idle_in_transaction_session_timeout — устанавливает максимально допустимую продолжительность любой транзакции холостого хода
  • join_collapse_limit — устанавливает размер списка FROM, за пределами которого конструкции JOIN не сглаживаются
  • lc_monetary — устанавливает языковой стандарт для форматирования денежных сумм
  • lc_numeric — устанавливает языковой стандарт для форматирования чисел
  • lo_compat_privileges — включает режим обратной совместимости для проверки привилегий на больших объектах
  • lock_timeout — устанавливает максимально допустимую продолжительность (в миллисекундах) любого ожидания блокировки. 0 — отключение
  • log_autovacuum_min_duration. Задает минимальное время выполнения, выше которого регистрируются действия автовакуума.
  • log_connections — регистрирует все успешные подключения
  • log_destination — задает назначение для вывода журнала сервера
  • log_disconnections — записывает в журнал конец сеанса, включая длительность
  • log_duration — регистрирует длительность выполнения каждой выполненной инструкции SQL
  • log_error_verbosity — задает уровень детализации сообщений в журнале
  • log_lock_waits — записывает задержки длительных блокировок
  • log_min_duration_statement. Задает минимальное время выполнения (в миллисекундах ), над которыми регистрируются операторы. –1 отключает ведение журнала длительности выполнения инструкций
  • log_min_error_statement — приводит к записи в журнал всех инструкций, создающих ошибку на этом уровне или выше
  • log_min_messages — задает уровни сообщений, которые заносятся в журнал
  • log_replication_commands — регистрирует каждую команду репликации
  • log_statement — задает тип регистрируемых инструкций
  • log_statement_stats — для каждого запроса записывает общую статистику производительности в журнал сервера
  • log_temp_files — заносит в журнал использование временных файлов, размер которых превышает это значение (в килобайтах)
  • maintenance_work_mem — задает максимальный объем памяти, используемый для операций обслуживания
  • max_parallel_workers — задает максимальное число параллельных рабочих ролей, которое может быть активно в один момент времени
  • max_parallel_workers_per_gather — задает максимальное число параллельных процессов на один узел исполнителя
  • max_pred_locks_per_page — задает максимальное число кортежей, заблокированных предикатом на страницу
  • max_pred_locks_per_relation — устанавливает максимальное количество страниц и кортежей с предикатной блокировкой на отношение
  • max_standby_archive_delay — устанавливает максимальную задержку перед отменой запросов, когда сервер горячего резервирования обрабатывает архивные данные WAL
  • max_standby_streaming_delay — устанавливает максимальную задержку перед отменой запросов, когда сервер горячего резервирования обрабатывает потоковые данные WAL
  • max_sync_workers_per_subscription — максимальное количество рабочих синхронизации таблиц на подписку
  • max_wal_size — устанавливает размер WAL, который запускает контрольную точку
  • min_parallel_index_scan_size — устанавливает минимальный объем индексных данных для параллельного сканирования
  • min_wal_size — устанавливает минимальный размер для сжатия WAL до
  • operator_precedence_warning — выдает предупреждение для конструкций, значение которых изменилось, начиная с PostgreSQL 9.4
  • parallel_setup_cost — устанавливает оценку планировщиком стоимости запуска рабочих процессов для параллельного запроса
  • parallel_tuple_cost. Задает оценку планировщика стоимости передачи каждого кортежа (строки) от рабочей роли к главной серверной части.
  • pg_stat_statements.save — сохраняет статистику pg_stat_statements при выключении сервера
  • pg_stat_statements.track — выбирает, какие операторы отслеживаются pg_stat_statements
  • pg_stat_statements.track_utility — выбирает, отслеживаются ли служебные команды pg_stat_statements
  • quote_all_identifiers — при генерации фрагментов SQL все идентификаторы заключаются в кавычки
  • random_page_cost — устанавливает оценку планировщиком стоимости страницы с диска, не получаемой последовательно
  • row_security — включает защиту строк
  • search_path — устанавливает порядок поиска схемы для имен, не уточненных схемой
  • seq_page_cost — устанавливает оценку планировщиком стоимости последовательно извлекаемой страницы с диска
  • session_replication_role — устанавливает поведение сеанса для триггеров и правил перезаписи
  • standard_conforming_strings — заставляет строки '...' буквально обрабатывать обратную косую черту
  • statement_timeout — устанавливает максимально допустимую продолжительность (в миллисекундах) любого оператора. 0 — отключение
  • synchronize_seqscans — обеспечивает синхронизированное последовательное сканирование
  • synchronous_commit — устанавливает уровень синхронизации текущей транзакции
  • tcp_keepalives_count — максимальное количество повторных передач TCP keepalive
  • tcp_keepalives_idle — время между отправкой пакетов поддержки активности TCP
  • tcp_keepalives_interval — время между повторными передачами TCP keepalive
  • temp_buffers — устанавливает максимальное количество временных буферов, используемых каждым сеансом базы данных
  • temp_tablespaces — устанавливает табличное пространство (-а) для использования временных таблиц и файлов сортировки
  • track_activities — собирает информацию о выполнении команд
  • track_counts — собирает статистику по активности базы данных
  • track_functions — собирает статистику на уровне функций по активности базы данных
  • track_io_timing — собирает статистику времени для операций ввода-вывода базы данных
  • transform_null_equals — рассматривает "expr=NULL" как "expr=NULL"
  • vacuum_cost_delay — задержка стоимости очистки в миллисекундах
  • vacuum_cost_limit — сумма стоимости очистки, доступная перед сном
  • vacuum_cost_page_dirty — стоимость очистки страницы, загрязненной очисткой
  • vacuum_cost_page_hit — стоимость очистки страницы, найденной в буферном кэше
  • vacuum_cost_page_miss — стоимость очистки страницы, не найденной в буферном кэше
  • vacuum_defer_cleanup_age — количество транзакций, по которым должна быть отложена очистка и горячая очистка, если они есть
  • vacuum_freeze_min_age — минимальный возраст, при котором ОЧИСТКА должна заморозить строку таблицы
  • vacuum_freeze_table_age — возраст, при котором ОЧИСТКА должна сканировать всю таблицу, чтобы заморозить кортежи
  • vacuum_multixact_freeze_min_age — минимальный возраст, при котором ОЧИСТКА должна заморозить MultiXactId в строке таблицы
  • vacuum_multixact_freeze_table_age — возраст мультиплексирования, при котором ОЧИСТКА должна сканировать всю таблицу, чтобы заморозить кортежи
  • wal_receiver_status_interval — устанавливает максимальный интервал между отчетами о состоянии приемника WAL для основного
  • wal_writer_delay — время между очистками WAL, выполняемыми устройством записи WALL
  • wal_writer_flush_after — количество WAL, записанное устройством записи WAL, которое запускает сброс
  • work_mem — устанавливает объем памяти, который будет использоваться внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы на диске
  • xmlbinary — устанавливает, как двоичные значения должны быть закодированы в XML
  • xmloption — устанавливает, следует ли рассматривать XML-данные в операциях неявного синтаксического анализа и сериализации как документы или фрагменты контента

Следующие шаги