Compartir a través de


Parámetros de servidor de Azure Cosmos DB for PostgreSQL

SE APLICA A: Azure Cosmos DB for PostgreSQL (con tecnología de la extensión de base de datos de Citus en PostgreSQL)

Hay varios parámetros de servidor que afectan al comportamiento de Azure Cosmos DB for PostgreSQL, tanto de PostgreSQL estándar como específicos de Azure Cosmos DB for PostgreSQL. Estos parámetros se pueden establecer en Azure Portal para un clúster. En la categoría Configuración, seleccione Parámetros del nodo de trabajo o Parámetros del nodo de coordinación. Estas páginas permiten establecer parámetros para todos los nodos de trabajo o solo para el nodo de coordinación.

Parámetros de Azure Cosmos DB for PostgreSQL

Nota:

Los clústeres que ejecutan versiones anteriores de la extensión de Citus podrían no ofrecer todos los parámetros que se enumeran a continuación.

Configuración general

citus.use_secondary_nodes (enumeración)

Establece la directiva que se va a usar al elegir nodos para consultas SELECT. Si se establece en "always", la herramienta de planeamiento solo consulta los nodos marcados como noderole "secundario" en pg_dist_node.

Los valores admitidos para esta enumeración son:

  • never: (valor predeterminado), todas las lecturas se producen en los nodos principales.
  • always: En su lugar, las lecturas se ejecutan en nodos secundarios y se deshabilitan las instrucciones INSERT/UPDATE.

citus.cluster_name (texto)

Informa al planificador del nodo de coordinación qué clúster coordina. Una vez que se establece cluster_name, el planificador únicamente consulta los nodos de trabajo de ese clúster.

citus.enable_version_checks (booleano)

La actualización de la versión de Azure Cosmos DB for PostgreSQL requiere un reinicio del servidor (para seleccionar la nueva biblioteca compartida), seguido del comando ALTER EXTENSION UPDATE. La imposibilidad de ejecutar ambos pasos podría provocar errores o bloqueos. Por tanto, Azure Cosmos DB for PostgreSQL valida que la versión del código y la de la extensión coinciden y, si no es así, se resuelven los errores.

El valor predeterminado es "true" y tiene efecto en el coordinador. En raras ocasiones, es posible que los procesos de actualización complejos requieran que este parámetro se establezca en "false" y, por lo tanto, se deshabilite la comprobación.

citus.log_distributed_deadlock_detection (booleano)

Indica si se va a registrar el procesamiento relacionado con la detección de interbloqueos distribuidos en el registro del servidor. El valor predeterminado es "false".

citus.distributed_deadlock_detection_factor (número de punto flotante)

Establece el tiempo de espera antes de comprobar los interbloqueos distribuidos. En concreto, el tiempo de espera es este valor multiplicado por el valor deadlock_timeout de PostgreSQL. El valor predeterminado es 2. Un valor de -1 deshabilita la detección de interbloqueos distribuidos.

citus.node_connection_timeout (entero)

El GUC citus.node_connection_timeout establece la duración máxima (en milisegundos) que se debe esperar para el establecimiento de la conexión. Azure Cosmos DB for PostgreSQL genera un error si el tiempo de espera transcurre antes de que se establezca al menos una conexión de trabajo. Este GUC afecta a las conexiones del coordinador con los roles de trabajo y de los roles de trabajo entre sí.

  • Valor predeterminado: cinco segundos
  • Mínimo: 10 milisegundos
  • Máximo: una hora
-- set to 30 seconds
ALTER DATABASE foo
SET citus.node_connection_timeout = 30000;

citus.log_remote_commands (booleano)

Registre todos los comandos que el coordinador envía a los nodos de trabajo. Por ejemplo:

-- 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;

La salida muestra varias consultas que se ejecutan en los roles de trabajo debido a la consulta count(*) individual en el coordinador.

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 (texto)

De forma predeterminada, Azure Cosmos DB for PostgreSQL oculta las particiones de la lista de tablas que PostgreSQL proporciona a los clientes SQL. Esto se debe a que hay varias particiones por tabla distribuida, y las particiones pueden distraer al cliente SQL.

El GUC citus.show_shards_for_app_name_prefixes permite mostrar particiones para los clientes seleccionados que quieran verlas. El valor predeterminado es ''.

-- 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';

La ocultación de particiones se puede deshabilitar completamente mediante citus.override_table_visibility.

citus.override_table_visibility (booleano)

Determina si citus.show_shards_for_app_name_prefixes está activo. El valor predeterminado es "true". Cuando se establece en "false", las particiones son visibles para todas las aplicaciones cliente.

citus.use_citus_managed_tables (booleano)

Permitir que las consultas de los nodos de trabajo accedan a las nuevas tablas locales. Agrega todas las tablas recién creadas a metadatos de Citus cuando se habilitan. El valor predeterminado es "false".

citus.rebalancer_by_disk_size_base_cost (entero)

Con la estrategia de reequilibrio by_disk_size, cada grupo de particiones obtiene este costo en bytes agregado a su tamaño de disco real. Este valor se usa para evitar crear un equilibrio incorrecto cuando hay pocos datos en algunas de las particiones. Se supone que incluso las particiones vacías tienen algún costo, debido al paralelismo y porque es probable que los grupos de particiones vacíos crezcan en el futuro.

El valor predeterminado es 100MB.

Estadísticas de consultas

citus.stat_statements_purge_interval (entero)

Establece la frecuencia con la que el demonio de mantenimiento quita los registros de citus_stat_statements que no coinciden en pg_stat_statements. Este valor de configuración establece el intervalo de tiempo entre purgas en segundos, con un valor predeterminado de 10. Un valor de 0 deshabilita las purgas.

SET citus.stat_statements_purge_interval TO 5;

Este parámetro tiene efecto en el coordinador y se puede cambiar en tiempo de ejecución.

citus.stat_statements_max (entero)

El número máximo de filas que se almacenan en citus_stat_statements. El valor predeterminado es 50000 y se puede cambiar a cualquier valor que se encuentre dentro del intervalo de 1000 a 10000000. Cada fila requiere 140 bytes de almacenamiento, por lo que establecer stat_statements_max en su valor máximo de diez millones consumiría 1,4 GB de memoria.

El cambio de este GUC no tiene efecto hasta que se reinicie PostgreSQL.

citus.stat_statements_track (enumeración)

El registro de estadísticas para citus_stat_statements requiere más recursos de CPU. Cuando la base de datos está recibiendo una carga, el administrador puede deshabilitar el seguimiento de instrucciones estableciendo citus.stat_statements_track en none.

  • all: (valor predeterminado) realizar un seguimiento de todas las instrucciones.
  • none: deshabilitar el seguimiento.

citus.stat_tenants_untracked_sample_rate

Frecuencia de muestreo para nuevos inquilinos en citus_stat_tenants. El porcentaje puede oscilar entre 0.0 y 1.0. El valor predeterminado es 1.0 lo que significa que se muestrean el 100 % de las consultas de inquilino sin seguimiento. Si se establece en un valor inferior, se muestreará el 100 % de las consultas de los inquilinos ya supervisados, pero solo se muestrearán las consultas de los inquilinos no supervisados en el porcentaje establecido.

Carga de datos

citus.multi_shard_commit_protocol (enumeración)

Establece el protocolo de confirmación que se va a usar al ejecutar COPY en una tabla con distribución por hash. En cada selección de ubicación de partición individual, la instrucción COPY se ejecuta en un bloque de transacciones para garantizar que no se ingiera ningún dato en caso de error durante la ejecución de dicha instrucción. Sin embargo, hay un caso de error concreto, en el que la instrucción COPY se ejecuta correctamente en todas las selecciones de ubicación, pero se produce un error (hardware) antes de que se confirmen todas las transacciones. Este parámetro se puede usar para evitar la pérdida de datos en ese caso eligiendo entre los siguientes protocolos de confirmación:

  • 2pc: (valor predeterminado) las transacciones en las que COPY se ejecuta en las selecciones de ubicación de partición se preparan primero mediante la confirmación en dos fases de PostgreSQL y luego se confirman. Las confirmaciones que no se realicen se podrán recuperar o anular manualmente mediante COMMIT PREPARED o ROLLBACK PREPARED, respectivamente. Cuando se usa 2pc, max_prepared_transactions debe aumentarse en todos los roles de trabajo, normalmente hasta el mismo valor de max_connections.
  • 1pc: Las transacciones en las que COPY se realiza en las selecciones de ubicación de partición se confirman en una única ronda. Es posible que se pierdan datos si se no se produce una confirmación después de que COPY se ejecute correctamente en todas las selecciones de ubicación (poco frecuentes).

citus.shard_replication_factor (entero)

Establece el factor de replicación para las particiones, es decir, el número de nodos en los que se colocan las particiones, y su valor predeterminado es 1. Este parámetro se puede establecer en tiempo de ejecución y tiene efecto en el coordinador. El valor ideal para este parámetro depende del tamaño del clúster y de la tasa de errores de nodo. Por ejemplo, puede aumentar este factor de replicación si ejecuta clústeres grandes y observa errores de los nodos con mayor frecuencia.

Configuración de del planificador

citus.local_table_join_policy (enumeración)

Este GUC determina la forma en que Azure Cosmos DB for PostgreSQL mueve los datos al realizar una combinación entre tablas locales y distribuidas. La personalización de la directiva de combinación puede ayudarle a reducir la cantidad de datos enviados entre nodos de trabajo.

Azure Cosmos DB for PostgreSQL envía las tablas locales o distribuidas a los nodos según sea necesario para admitir la combinación. La copia de datos de las tablas se conoce como "conversión". Si se convierte una tabla local, se envia a los trabajos que necesiten sus datos para realizar la combinación. Si se convierte una tabla distribuida, se recopila en el coordinador para admitir la combinación. La herramienta de planeamiento de Azure Cosmos DB for PostgreSQL envía solo las filas necesarias que realizan una conversión.

Hay cuatro modos disponibles para expresar las preferencias de la conversión:

  • auto: (valor predeterminado) Azure Cosmos DB for PostgreSQL convierte todas las tablas locales o distribuidas para admitir combinaciones de tablas locales y distribuidas. Azure Cosmos DB for PostgreSQL decide qué convertir mediante una heurística. Convierte las tablas distribuidas si se unen mediante un filtro constante en un índice único (por ejemplo, una clave principal). La conversión garantiza que se mueven menos datos entre los trabajos.
  • never: Azure Cosmos DB for PostgreSQL no permite combinaciones entre tablas locales y distribuidas.
  • prefer-local: Azure Cosmos DB for PostgreSQL prefiere convertir tablas locales para admitir combinaciones de tablas locales y distribuidas.
  • prefer-distributed: Azure Cosmos DB for PostgreSQL prefiere convertir tablas distribuidas para admitir combinaciones de tablas locales y distribuidas. Si las tablas distribuidas son enormes, el uso de esta opción podría provocar el desplazamiento de una gran cantidad de datos entre los roles de trabajo.

Por ejemplo, suponga que citus_table es una tabla distribuida por la columna x y que postgres_table es una tabla local:

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 (entero)

Establece el número de filas que se van a capturar por tarea para la optimización de las cláusulas de límite. En algunos casos, podría ser necesario que las consultas con cláusulas de límite capturan todas las filas de cada tarea para generar resultados. En esos casos, y donde una aproximación produciría resultados significativos, este valor de configuración establece el número de filas de cada partición que se van a capturar. Las aproximaciones de límite están deshabilitadas de forma predeterminada y este parámetro se establece en -1. Este valor se puede establecer en tiempo de ejecución y tiene efecto en el coordinador.

citus.count_distinct_error_rate (número de punto flotante)

Azure Cosmos DB for PostgreSQL puede calcular valores aproximados de recuento (único) con la extensión postgresql-hll. Esta entrada de configuración establece la tasa de errores deseada al calcular valores de recuento (único). 0,0, que es el valor predeterminado, deshabilita los valores aproximados de recuento (único); y 1,0 no ofrece ninguna garantía sobre la exactitud de los resultados. Se recomienda establecer este parámetro en 0,005 para obtener los mejores resultados. Este valor se puede establecer en tiempo de ejecución y tiene efecto en el coordinador.

citus.task_assignment_policy (enumeración)

Nota

Este GUC solo es aplicable cuando shard_replication_factor es mayor que uno o para consultas en reference_tables.

Establece la directiva que se va a usar al asignar tareas a roles de trabajo. El coordinador asigna tareas a los roles de trabajo en función de las selecciones de ubicación de partición. Este valor de configuración especifica la directiva que se va a usar al crear estas asignaciones. Actualmente, hay tres directivas posibles de asignación de tareas que se pueden usar.

  • greedy: La directiva greedy es el valor predeterminado y tiene por objeto distribuir tareas uniformemente entre los roles de trabajo.
  • round-robin: La directiva round-robin asigna tareas a los roles de trabajo de modo Round Robin alternando entre distintas réplicas. Esta directiva permite un mejor uso del clúster cuando el número de particiones de una tabla es bajo en comparación con el número de roles de trabajo.
  • first-replica: la directiva first-replica asigna las tareas en función del orden de inserción de las selecciones de ubicación (réplicas) de las particiones. En otras palabras, la consulta de fragmentos de una partición se asigna al rol de trabajo que tiene la primera réplica de esa partición. Este método permite tener garantías seguras sobre qué particiones se utilizan en cada nodo (es decir, garantías de residencia en memoria más seguras).

Este parámetro se puede establecer en tiempo de ejecución y tiene efecto en el coordinador.

citus.enable_non_colocated_router_query_pushdown (booleano)

Habilita el planificador de enrutadores para las consultas que hacen referencia a tablas distribuidas no colocadas.

El planificador del enrutador solo está habilitado para las consultas que hacen referencia a tablas distribuidas colocadas porque, de lo contrario, es posible que las particiones no estén en el mismo nodo. Habilitar esta marca permite la optimización de las consultas que hacen referencia a estas tablas, pero es posible que la consulta no funcione después de reequilibrar las particiones o modificar el recuento de particiones de esas tablas.

El valor predeterminado es off.

Transferencia de datos intermedios

citus.max_intermediate_result_size (entero)

Tamaño máximo en KB de los resultados intermedios para las CTE que no se pueden insertar en los nodos de trabajo para su ejecución y para las subconsultas complejas. El valor predeterminado es 1 GB y un valor de -1 significa que no hay límite. Las consultas que superan el límite se cancelan y generan un mensaje de error.

DDL

citus.enable_schema_based_sharding

Con el parámetro establecido en ON, todos los esquemas creados se distribuyen de forma predeterminada. Los esquemas distribuidos se asocian automáticamente a grupos de coubicación individuales, de modo que las tablas creadas en esos esquemas se convierten en tablas distribuidas colocadas sin una clave de partición. Esta configuración se puede modificar para sesiones individuales.

Para obtener un ejemplo de uso de esta GUC, consulte cómo diseñar para microservicios.

Configuración del ejecutor

General

citus.all_modifications_commutative

Azure Cosmos DB for PostgreSQL aplica las reglas de conmutabilidad y adquiere los bloqueos adecuados para las operaciones de modificación con el fin de garantizar la corrección del comportamiento. Por ejemplo, se supone que una instrucción INSERT se conmuta por otra instrucción INSERT, pero no por una instrucción UPDATE o DELETE. Del mismo modo, se supone que una instrucción UPDATE o DELETE no se conmutará por otra instrucción UPDATE o DELETE. Esta precaución significa que las instrucciones UPDATE y DELETE requieren Azure Cosmos DB for PostgreSQL para adquirir bloqueos más seguros.

Si tiene instrucciones UPDATE que son conmutativas con sus instrucciones INSERT u otras instrucciones UPDATE, puede rebajar estas suposiciones de conmutabilidad estableciendo este parámetro en "true". Cuando este parámetro se establece en "true", todos los comandos se consideran conmutativos y notifican un bloqueo compartido, lo que puede mejorar el rendimiento global. Este parámetro se puede establecer en tiempo de ejecución y tiene efecto en el coordinador.

citus.remote_task_check_interval (entero)

Establece la frecuencia con la que Azure Cosmos DB for PostgreSQL comprueba los estados de los trabajos administrados por el ejecutor del rastreador de tareas. Su valor predeterminado es 10 ms. El coordinador asigna tareas a los roles de trabajo y luego comprueba regularmente con ellos el progreso de cada tarea. Este valor de configuración establece el intervalo de tiempo entre dos comprobaciones consiguientes. Este parámetro tiene efecto en el coordinador y se puede establecer en tiempo de ejecución.

citus.task_executor_type (enumeración)

Azure Cosmos DB for PostgreSQL tiene tres tipos de ejecutor para ejecutar consultas SELECT distribuidas. El ejecutor deseado se puede seleccionar estableciendo este parámetro de configuración. Los valores aceptables para este parámetro son los siguientes:

  • adaptive: El valor predeterminado. Resulta óptimo para obtener respuestas rápidas a consultas que implican agregaciones y combinaciones coubicadas que abarcan varias particiones.
  • task-tracker: El ejecutor del rastreador de tareas es adecuado para consultas complejas de larga duración que requieren el orden aleatorio de datos entre los nodos de trabajo y una administración de recursos eficaz.
  • real-time: (en desuso) sirve para un propósito similar al del ejecutor adaptable, pero es menos flexible y puede ejercer una mayor presión de conexión en los nodos de trabajo.

Este parámetro se puede establecer en tiempo de ejecución y tiene efecto en el coordinador.

citus.multi_task_query_log_level (enumeración) {#multi_task_logging}

Establece un nivel de registro para cualquier consulta que genere más de una tarea (es decir, que afecte a más de una partición). El registro resulta útil durante la migración de aplicaciones multiinquilino, ya que se puede optar por notificar los errores o advertir de estas consultas, para encontrarlas y agregarles un filtro tenant_id. Este parámetro se puede establecer en tiempo de ejecución y tiene efecto en el coordinador. El valor predeterminado de este parámetro es "off".

Los valores admitidos para esta enumeración son:

  • off: desactiva el registro de las consultas que generan varias tareas (es decir, que abarcan varias particiones)
  • debug: registra la instrucción en el nivel de gravedad de DEBUG.
  • log: registra la instrucción en el nivel de gravedad de LOG. La línea de registro incluye la consulta SQL que se ejecutó.
  • notice: registra la instrucción en el nivel de gravedad de NOTICE.
  • warning: registra la instrucción en el nivel de gravedad de WARNING.
  • error: registra la instrucción en el nivel de gravedad de ERROR.

Podría resultar útil usar error durante las pruebas de desarrollo y un nivel de registro inferior como log durante la implementación de producción real. La elección de log hará que aparezcan consultas de varias tareas en los registros de la base de datos con la propia consulta mostrada después de "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 (enumeración)

Determina qué comandos SET se propagan desde el coordinador a los roles de trabajo. El valor predeterminado de este parámetro es "none".

Los valores admitidos son:

  • none: no se propaga ningún comando SET.
  • local: solo se propagan los comandos SET LOCAL.
citus.create_object_propagation (enum)

Controla el comportamiento de las instrucciones CREATE en transacciones para objetos admitidos.

Cuando se crean objetos en un bloque de transacciones de varias instrucciones, Azure Cosmos DB for PostgreSQL cambia el modo secuencial para asegurarse de que los objetos creados son visibles para las instrucciones posteriores en las particiones. Sin embargo, el cambio al modo secuencial no siempre es conveniente. Al invalidar este comportamiento, el usuario puede equilibrar el rendimiento para lograr una coherencia transaccional completa en la creación de objetos.

El valor predeterminado de este parámetro es "immediate".

Los valores admitidos son:

  • immediate: genera un error en las transacciones en las que se producen operaciones paralelas como create_distributed_table antes de intentar CREAR TYPE.
  • automatic: aplazar la creación de tipos al compartir una transacción con una operación paralela en tablas distribuidas. Podría haber cierta incoherencia entre qué objetos de base de datos existen en distintos nodos.
  • deferred: vuelve al comportamiento anterior a la versión 11.0, que es como automatic, pero con otros casos algo sutiles. Se recomienda la configuración automatic respecto a deferred, a menos que necesite una compatibilidad con versiones anteriores true.

Para obtener un ejemplo de este GUC en acción, vea propagación de tipos.

citus.enable_repartition_joins (booleano)

Normalmente, el intento de realizar combinaciones de volver a particionar con el ejecutor adaptable produce un mensaje de error. Sin embargo, si citus.enable_repartition_joins se establece en "true", se permite a Azure Cosmos DB for PostgreSQL cambiar temporalmente al ejecutor del rastreador de tareas para realizar la combinación. El valor predeterminado es false.

citus.enable_repartitioned_insert_select (booleano)

De forma predeterminada, INSERT INTO... La instrucción SELECT que no se puede insertar intenta volver a crear particiones de las filas desde la instrucción SELECT y transferirlas entre los roles de trabajo para su inserción. Sin embargo, si la tabla de destino tiene demasiadas particiones, es probable que la creación de particiones no funcione bien. La sobrecarga del procesamiento de los intervalos de particiones al determinar cómo crear particiones de los resultados es demasiado grande. La creación de particiones se puede deshabilitar manualmente. Para ello, es preciso establecer citus.enable_repartitioned_insert_select en false.

citus.enable_binary_protocol (booleano)

Al establecer este parámetro en true, se indica al nodo de coordinación que use el formato de serialización binaria de PostgreSQL (si procede) para transferir datos con roles de trabajo. Algunos tipos de columna no admiten la serialización binaria.

La habilitación de este parámetro es especialmente útil cuando los roles de trabajo deban devolver grandes cantidades de datos. Hay ejemplos cuando se solicitan muchas filas, las filas tienen muchas columnas o usan tipos anchos como hll de la extensión postgresql-hll.

El valor predeterminado es true. Cuando se establece en false, todos los resultados se codifican y transfieren en formato de texto.

citus.max_adaptive_executor_pool_size (entero)

Max_adaptive_executor_pool_size limita las conexiones de los roles de trabajo de la sesión actual. Este GUC es útil para:

  • Impedir que un único back-end obtenga todos los recursos del rol de trabajo
  • Proporcionar administración de prioridades: designe sesiones de prioridad baja con un valor de max_adaptive_executor_pool_size bajo y sesiones de prioridad alta con valores más altos.

El valor predeterminado es 16.

citus.executor_slow_start_interval (entero)

Tiempo de espera, en milisegundos, entre la apertura de conexiones al mismo nodo de trabajo.

Cuando las tareas individuales de una consulta de varias particiones tardan poco tiempo, a menudo se pueden finalizar a través de una única conexión (a menudo ya almacenada en caché). Para evitar la apertura redundante de más conexiones, el ejecutor espera entre los intentos de conexión durante el número configurado de milisegundos. Al final del intervalo, aumenta el número de conexiones que se pueden abrir la próxima vez.

En el caso de las consultas largas ( las que tardan más de 500 ms), un inicio lento puede agregar latencia, pero en el caso de las consultas cortas es más rápido. El valor predeterminado es 10 ms.

citus.max_cached_conns_per_worker (entero)

Cada back-end abre conexiones a los roles de trabajo para consultar las particiones. Al final de la transacción, el número configurado de conexiones se mantiene abierto para agilizar los comandos posteriores. El aumento de este valor reduce la latencia de las consultas de varias particiones, pero también aumenta la sobrecarga en los trabajos.

El valor predeterminado es 1. Un valor mayor, como 2, podría ser útil para los clústeres que usan un pequeño número de sesiones simultáneas, pero no es aconsejable ir mucho más allá (por ejemplo, 16 sería excesivo).

citus.force_max_query_parallelization (booleano)

Simula el ejecutor en tiempo real en desuso y ahora inexistente. Este parámetro se usa para abrir tantas conexiones como sea posible para maximizar la paralelización de consultas.

Cuando este GUC esté habilitado, Azure Cosmos DB for PostgreSQL obliga al ejecutor adaptable a usar tantas conexiones como sea posible durante la ejecución de una consulta distribuida paralela. Si no está habilitado, el ejecutor puede optar por usar menos conexiones para optimizar el rendimiento general de la ejecución de consultas. Internamente, establecer este valor en true termina usando una conexión por tarea.

Un lugar en el que este parámetro resulta útil es en aquella transacción cuya primera consulta es ligera y requiere pocas conexiones, mientras que las consultas posteriores se beneficiarían de más conexiones. Azure Cosmos DB for PostgreSQL decide cuántas conexiones usar en una transacción en función de la primera instrucción, lo que puede limitar otras consultas, a menos que usemos GUC para proporcionar una sugerencia.

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;

El valor predeterminado es false.

Configuración del ejecutor del rastreador de tareas

citus.task_tracker_delay (entero)

Este parámetro establece el tiempo de suspensión entre rondas de administración del rastreador de tareas y su valor predeterminado es 200 ms. El proceso del rastreador de tareas se reactiva regularmente, recorre todas las tareas que tiene asignadas y programa y ejecuta esas tareas. Después, el rastreador de tareas se suspende durante un período de tiempo antes de volver a recorrer esas tareas. Este valor de configuración determina la duración del período de suspensión. Este parámetro tiene efecto en los roles de trabajo y debe cambiarse en el archivo postgresql.conf. Después de editar el archivo de configuración, los usuarios pueden enviar una señal SIGHUP o reiniciar el servidor para que el cambio surta efecto.

Este parámetro se puede reducir para recortar el retraso causado por el ejecutor del rastreador de tareas reduciendo el intervalo de tiempo entre las rondas de administración. Reducir el retraso es útil en casos en los que las consultas de particiones son breves y, por tanto, actualizan su estado con regularidad.

citus.max_assign_task_batch_size (entero)

El ejecutor del rastreador de tareas en el coordinador asigna de forma sincrónica tareas en lotes al demonio en los roles de trabajo. Este parámetro establece el número máximo de tareas que se asignan en un solo lote. Elegir un tamaño de lote mayor permite una asignación de tareas más rápida. Sin embargo, si el número de roles de trabajo es grande, es posible que se tarde más para que todos los roles de trabajo obtengan tareas. Este parámetro se puede establecer en tiempo de ejecución y tiene efecto en el coordinador.

citus.max_running_tasks_per_node (entero)

El proceso del rastreador de tareas programa y ejecuta las tareas que se le asignan según corresponda. Este valor de configuración establece el número máximo de tareas que se ejecutan simultáneamente en un nodo en un momento dado y el valor predeterminado es 8.

El límite garantiza que no haya muchas tareas que alcanzan el disco al mismo tiempo y ayuda a evitar la contención de E/S del disco. Si las consultas se envían desde la memoria o desde unidades de estado sólido, se puede aumentar la función max_running_tasks_per_node sin preocuparse.

citus.partition_buffer_size (entero)

Establece el tamaño de búfer que se va a usar para las operaciones de partición y su valor predeterminado es 8 MB. Azure Cosmos DB for PostgreSQL permite volver a particionar los datos de la tabla en varios archivos cuando se combinan dos tablas grandes. Cuando el búfer de esta partición se llene, los datos que se han vuelto a particionar se descargarán en archivos del disco. Esta entrada de configuración se puede establecer en tiempo de ejecución y tiene efecto en los roles de trabajo.

Salida de EXPLAIN

citus.explain_all_tasks (booleano)

De forma predeterminada, Azure Cosmos DB for PostgreSQL muestra la salida de una única tarea arbitraria al ejecutar EXPLAIN en una consulta distribuida. En la mayoría de los casos, la salida de EXPLAIN es similar en todas las tareas. En ocasiones, algunas de las tareas se planean de manera diferente o se producen tiempos de ejecución mucho mayores. En esos casos, puede resultar útil habilitar este parámetro, tras el cual la salida de EXPLAIN incluye todas las tareas. La explicación de todas las tareas podría hacer que EXPLAIN tarde más.

citus.explain_analyze_sort_method (enumeración)

Determina el método de ordenación de las tareas en la salida de EXPLAIN ANALYZE. El valor predeterminado de citus.explain_analyze_sort_method es execution-time.

Los valores admitidos son:

  • execution-time: ordenar por tiempo de ejecución.
  • taskId: ordenar por identificador de tarea.

Parámetros de PgBouncer administrado

Los parámetros de PgBouncer administrado siguientes se pueden configurar en un solo nodo o coordinador.

Nombre de parámetro Descripción Default
pgbouncer.default_pool_size Establezca este valor de parámetro en el número de conexiones por par de usuario/base de datos. 295
pgbouncer.ignore_startup_parameters Lista separada por comas de parámetros que PgBouncer puede omitir. Por ejemplo, puede permitir que PgBouncer omita el parámetro extra_float_digits. Se permiten algunos parámetros, todos los demás generarán un error. Esta capacidad es necesaria para tolerar que un JDBC demasiado entusiasta quiera establecer incondicionalmente "extra_float_digits=2" en el paquete de inicio. Use esta opción si la biblioteca usa errores de informe como pq: unsupported startup parameter: extra_float_digits. extra_float_digits, ssl_renegotiation_limit
pgBouncer.max_client_conn Establezca el valor de este parámetro en el mayor número de conexiones de cliente a PgBouncer que desea admitir. 2000
pgBouncer.min_pool_size Agregue más conexiones de servidor al grupo si está por debajo de este número. 0 (Deshabilitado)
pgBouncer.pool_mode Establezca este valor de parámetro en TRANSACTION para la agrupación de transacciones (que es la configuración recomendada para la mayoría de las cargas de trabajo). TRANSACTION
pgbouncer.query_wait_timeout Tiempo máximo (en segundos) que se permite que esperen las consultas para la ejecución. Si la consulta no se asigna a un servidor durante ese tiempo, el cliente se desconecta. 20 s.
pgbouncer.server_idle_timeout Si una conexión de servidor ha estado inactiva más de este número de segundos, se cierra. Si es 0, este tiempo de espera está deshabilitado. 60 s

Parámetros de PostgreSQL

  • DateStyle: establece el formato de presentación de los valores de fecha y hora
  • IntervalStyle: establece el formato de presentación de los valores de intervalo
  • TimeZone: establece la zona horaria para mostrar e interpretar las marcas de tiempo
  • application_name: establece el nombre de aplicación que se va a indicar en las estadísticas y los registros
  • array_nulls: permite la entrada de elementos NULL en matrices
  • autovacuum: inicia el subproceso de vaciado automático
  • autovacuum_analyze_scale_factor: número de inserciones, actualizaciones o eliminaciones de tupla antes de analizar como una fracción de reltuples
  • autovacuum_analyze_threshold: número mínimo de inserciones, actualizaciones o eliminaciones de tupla antes de analizar
  • autovacuum_naptime: tiempo de suspensión entre ejecuciones de vaciado automático
  • autovacuum_vacuum_cost_delay: retraso de costo de vaciado del vaciado automático en milisegundos
  • autovacuum_vacuum_cost_limit: cantidad de costo de vaciado disponible antes de la suspensión del vaciado automático
  • autovacuum_vacuum_scale_factor: número de actualizaciones o eliminaciones de tupla antes de vaciar como una fracción de reltuples
  • autovacuum_vacuum_threshold: número mínimo de actualizaciones o eliminaciones de tupla antes de vaciar
  • autovacuum_work_mem: establece la memoria máxima que va a usar cada proceso de trabajo de vaciado automático
  • backend_flush_after: número de páginas tras el que las escrituras realizadas previamente se vacían en el disco
  • backslash_quote: establece si se permite """ en literales de cadena
  • bgwriter_delay: tiempo de suspensión del escritor en segundo plano entre rondas
  • bgwriter_flush_after: número de páginas tras el que las escrituras realizadas previamente se vacían en el disco
  • bgwriter_lru_maxpages: número máximo de páginas LRU del escritor en segundo plano que se vacían por ronda
  • bgwriter_lru_multiplier: múltiplo del uso medio del búfer que se va a liberar por ronda
  • bytea_output: establece el formato de salida de bytea
  • check_function_bodies: comprueba los cuerpos de función durante la operación CREATE FUNCTION
  • checkpoint_completion_target: tiempo dedicado a vaciar búferes modificados durante el punto de comprobación, como fracción del intervalo del punto de comprobación
  • checkpoint_timeout: establece el tiempo máximo entre puntos de comprobación automáticos de WAL
  • checkpoint_warning: habilita advertencias si los segmentos del punto de comprobación se rellenan con más frecuencia que esta
  • client_encoding: establece la codificación del juego de caracteres del cliente
  • client_min_messages: establece los niveles de mensajes que se envían al cliente
  • commit_delay: establece el retraso en microsegundos entre la confirmación de una transacción y el vaciado de WAL en el disco
  • commit_siblings: establece el número mínimo de transacciones abiertas simultáneas antes de realizar una operación commit_delay
  • constraint_exclusion: permite al planificador usar restricciones para optimizar consultas
  • cpu_index_tuple_cost: establece la estimación del planificador del costo de procesamiento de cada entrada de índice durante un examen de índice
  • cpu_operator_cost: establece la estimación del planificador del costo de procesamiento de cada llamada de operador o función
  • cpu_tuple_cost: establece la estimación del planificador del costo de procesamiento de cada tupla (fila)
  • cursor_tuple_fraction: establece la estimación del planificador de la fracción de las filas de un cursor que se recuperan.
  • deadlock_timeout: establece la cantidad de tiempo, en milisegundos, que se debe esperar un bloqueo antes de comprobar el interbloqueo
  • debug_pretty_print: aplica sangría a las visualizaciones de árbol de análisis y plan
  • debug_print_parse: registra el árbol de análisis de cada consulta
  • debug_print_plan: registra el plan de ejecución de cada consulta
  • debug_print_rewritten: registra el árbol de análisis reescrito de cada consulta
  • default_statistics_target: establece el destino predeterminado de las estadísticas
  • default_tablespace: establece el espacio de tabla predeterminado en el que se van a crear tablas e índices
  • default_text_search_config: establece la configuración de búsqueda de texto predeterminada
  • default_transaction_deferrable: establece el estado aplazable predeterminado de las nuevas transacciones
  • default_transaction_isolation: establece el nivel de aislamiento de transacción de cada nueva transacción
  • default_transaction_read_only: establece el estado de solo lectura predeterminado de las nuevas transacciones
  • default_with_oids: crea nuevas tablas con OID de manera predeterminada
  • effective_cache_size: establece la suposición del planificador sobre el tamaño de la caché de disco
  • enable_bitmapscan: permite el uso de planes de examen de mapas de bits por parte del planificador
  • enable_gathermerge: permite el uso de planes de combinación de recopilación por parte del planificador
  • enable_hashagg: permite el uso de planes de agregación con hash por parte del planificador
  • enable_hashjoin: permite el uso de planes de combinación con hash por parte del planificador
  • enable_indexonlyscan: permite el uso de planes de examen solo de índice por parte del planificador
  • enable_indexscan: permite el uso de planes de examen de índice por parte del planificador
  • enable_material: permite el uso de materialización por parte del planificador
  • enable_mergejoin: permite el uso de planes de combinación por parte del planificador
  • enable_nestloop: permite el uso de planes de combinación de bucle anidado por parte del planificador
  • enable_seqscan: permite el uso de planes de examen secuencial por parte del planificador
  • enable_sort: permite el uso de pasos de ordenación explícitos por parte del planificador
  • enable_tidscan: permite el uso de planes de examen TID por parte del planificador
  • escape_string_warning: advierte sobre los escapes de barra diagonal inversa en literales de cadena ordinarios
  • exit_on_error: finaliza la sesión en caso de cualquier error
  • extra_float_digits: establece el número de dígitos que se muestra para los valores de punto flotante
  • force_parallel_mode: fuerza el uso de facilidades de consulta paralelas
  • from_collapse_limit: establece el tamaño de la lista FROM más allá del que las subconsultas no se contraen
  • geqo: permite la optimización de consultas genéticas
  • geqo_effort (GEQO): esfuerzo que se usa para establecer el valor predeterminado de otros parámetros de GEQO
  • geqo_generations (GEQO): número de iteraciones del algoritmo
  • geqo_pool_size (GEQO): número de individuos de la población
  • geqo_seed (GEQO): inicialización de la selección de ruta aleatoria
  • geqo_selection_bias (GEQO): presión selectiva dentro de la población
  • geqo_threshold: establece el umbral de elementos FROM más allá del que se usa GEQO
  • gin_fuzzy_search_limit: establece el resultado máximo permitido de la búsqueda exacta por GIN
  • gin_pending_list_limit: establece el tamaño máximo de la lista pendiente del índice de GIN
  • idle_in_transaction_session_timeout: establece la duración máxima permitida de cualquier transacción inactiva
  • join_collapse_limit: establece el tamaño de la lista FROM más allá del que las construcciones JOIN no se acoplan
  • lc_monetary: establece la configuración regional para aplicar formato a las cantidades monetarias
  • lc_numeric: establece la configuración regional para aplicar formato a los números
  • lo_compat_privileges: habilita el modo de compatibilidad con versiones anteriores para las comprobaciones de privilegios en objetos de gran tamaño
  • lock_timeout: establece la duración máxima permitida (en milisegundos) de cualquier espera para un bloqueo. 0 desactiva este parámetro
  • log_autovacuum_min_duration: establece el tiempo de ejecución mínimo por encima del cual se registran las acciones de vaciado automático.
  • log_connections: registra cada conexión correcta
  • log_destination: establece el destino de la salida de los registros del servidor
  • log_disconnections: registra el final de una sesión, incluida la duración
  • log_duration: registra la duración de cada instrucción SQL completada
  • log_error_verbosity: establece el nivel de detalle de los mensajes registrados
  • log_lock_waits: registra las esperas de bloqueos largas
  • log_min_duration_statement: establece el tiempo de ejecución mínimo (en milisegundos) por encima del cual se registran las instrucciones. -1 deshabilita las duraciones de las instrucciones de registro
  • log_min_error_statement: hace que se registren todas las instrucciones que generan un error en este nivel o por encima de él
  • log_min_messages: establece los niveles de mensajes que se registran
  • log_replication_commands: registra cada comando de replicación
  • log_statement: establece el tipo de las instrucciones registradas
  • log_statement_stats: escribe estadísticas de rendimiento acumuladas de cada consulta en el registro del servidor
  • log_temp_files: registra el uso de archivos temporales mayores que este número de kilobytes
  • maintenance_work_mem: establece la memoria máxima que se va a usar para las operaciones de mantenimiento
  • max_parallel_workers: establece el número máximo de trabajos paralelos que pueden estar activos a la vez
  • max_parallel_workers_per_gather: establece el número máximo de procesos paralelos por nodo ejecutor
  • max_pred_locks_per_page: establece el número máximo de tuplas bloqueadas por predicado por página
  • max_pred_locks_per_relation: establece el número máximo de tuplas bloqueadas por predicado y de tuplas por relación
  • max_standby_archive_delay: establece el retraso máximo antes de cancelar consultas cuando un servidor en espera activa está procesando datos de WAL archivados
  • max_standby_streaming_delay: establece el retraso máximo antes de cancelar consultas cuando un servidor en espera activa está procesando datos de WAL en streaming
  • max_sync_workers_per_subscription: número máximo de trabajos de sincronización de tablas por suscripción
  • max_wal_size: establece el tamaño de WAL que desencadena un punto de comprobación
  • min_parallel_index_scan_size: establece la cantidad mínima de datos de índice de un examen paralelo
  • min_wal_size: establece el tamaño mínimo al que reducir WAL
  • operator_precedence_warning: emite una advertencia sobre las construcciones que han cambiado de significado desde PostgreSQL 9.4
  • parallel_setup_cost: establece la estimación del planificador sobre el costo de iniciar procesos de trabajo para consultas paralelas
  • parallel_tuple_cost: establece la estimación del planificador sobre el costo de pasar cada tupla (fila) de un trabajo a un back-end principal
  • pg_stat_statements.save: guarda estadísticas pg_stat_statements entre apagados de servidor
  • pg_stat_statements.track: selecciona las instrucciones de las que pg_stat_statements realiza un seguimiento
  • pg_stat_statements.track_utility: selecciona si pg_stat_statements realiza un seguimiento de los comandos de utilidad
  • quote_all_identifiers: al generar fragmentos de SQL, cita todos los identificadores
  • random_page_cost: establece la estimación del planificador sobre el costo de una página de disco capturada de forma no secuencial
  • row_security: habilita la seguridad de filas
  • search_path: establece el orden de búsqueda de esquema de los nombres que no son aptos para el esquema
  • seq_page_cost: establece la estimación del planificador sobre el costo de una página de disco capturada de forma secuencial
  • session_replication_role: establece el comportamiento de la sesión de los desencadenadores y las reglas de reescritura
  • standard_conforming_strings: hace que las cadenas "..." traten las barras diagonales inversas de forma literal
  • statement_timeout: establece la duración máxima permitida (en milisegundos) de cualquier instrucción. 0 desactiva este parámetro
  • synchronize_seqscans: permite los exámenes secuenciales sincronizados
  • synchronous_commit: establece el nivel de sincronización de la transacción actual
  • tcp_keepalives_count: número máximo de retransmisiones TCP keepalive
  • tcp_keepalives_idle: tiempo entre emisión de retransmisiones TCP keepalive
  • tcp_keepalives_interval: tiempo entre retransmisiones TCP keepalive
  • temp_buffers: establece el número máximo de búferes temporales que usa cada sesión de base de datos
  • temp_tablespaces: establece el espacio de tabla que se va a usar para las tablas temporales y los archivos de ordenación
  • track_activities: recopila información sobre los comandos en ejecución
  • track_counts: recopila estadísticas sobre la actividad de la base de datos
  • track_functions: recopila estadísticas de nivel de función sobre la actividad de la base de datos
  • track_io_timing: recopila estadísticas de tiempo sobre la actividad de E/S de la base de datos
  • transform_null_equals: trata "expr=NULL" como "expr IS NULL"
  • vacuum_cost_delay: retraso de costo de vaciado en milisegundos
  • vacuum_cost_limit: cantidad de costo de vaciado disponible antes de la suspensión
  • vacuum_cost_page_dirty: costo de vaciado de una página modificada por el vaciado
  • vacuum_cost_page_hit: costo de vaciado de una página encontrada en la caché del búfer
  • vacuum_cost_page_miss: costo de vaciado de una página no encontrada en la caché del búfer
  • vacuum_defer_cleanup_age: número de transacciones por las que se debe diferir la limpieza de VACUUM y HOT, si procede
  • vacuum_freeze_min_age: antigüedad mínima en la que VACUUM debe inmovilizar una fila de tabla
  • vacuum_freeze_table_age: antigüedad en la que VACUUM debe examinar una tabla completa para inmovilizar tuplas
  • vacuum_multixact_freeze_min_age: antigüedad mínima en la que VACUUM debe inmovilizar el elemento MultiXactId de una fila de tabla
  • vacuum_multixact_freeze_table_age: antigüedad de multixact en la que VACUUM debe examinar una tabla completa para inmovilizar tuplas
  • wal_receiver_status_interval: establece el intervalo máximo entre informes de estado del receptor de WAL al principal
  • wal_writer_delay: tiempo entre vaciados de WAL realizados en el escritor de WAL
  • wal_writer_flush_after: cantidad de WAL escrita por el escritor de WAL que desencadena un vaciado
  • work_mem: establece la cantidad de memoria que se va a usar en las operaciones de ordenación internas y las tablas hash antes de escribir en los archivos de disco temporales
  • xmlbinary: establece cómo se van a codificar los valores binarios en XML
  • xmloption: establece si los datos XML de las operaciones de análisis y serialización implícitos se consideran como documentos o fragmentos de contenido

Pasos siguientes