Variables de sesión NPS

Existen tres clases de variables de sesión NPS® que se aplican a la replicación: variables específicas de replicación, variables replicadas y variables no replicadas.

Para establecer las variables de sesión de NPS, utilice el comando SQL SET. Puede mostrar las variables de sesión actuales definidas por el usuario utilizando el comando \set sin argumentos, como se muestra en el siguiente ejemplo:
SALES.USER1(USER1)=> \set

Variables de sesión NPS específicas de la replicación

Las variables específicas de la replicación comienzan con el prefijo REPL. Hay dos variables que sólo se aplican a la replicación:
REPLICAR_SIEMPRE_POR_VALOR

El estado de la variable de sesión REPLICATE_ALWAYS_BY_VALUE determina si la replicación se realiza únicamente by-value o tanto by-value como by-sql. La configuración por defecto y, con mucho, la más común es OFF. Cuando la variable está en OFF, el sistema determina si alguna sentencia de una transacción incluye funciones no deterministas. Si una sentencia contiene funciones no deterministas, se procesan utilizando la replicación por valor (valor de cambio). Si una sentencia no los contiene, se procesa utilizando la replicación by-SQL (sentencia SQL).

Cuando la variable REPLICATE_ALWAYS_BY_VALUE está en ON, el software utiliza la replicación por valor para todas las transacciones. Hay ciertas cargas de trabajo que contienen funciones no deterministas y se beneficiarían de estar siempre replicadas por valor. El caso más común involucra transacciones de múltiples sentencias que realizan grandes cargas deterministas que son seguidas por sentencias que contienen llamadas a funciones no deterministas u otros disparadores by-value. Estos pueden generar grandes cantidades de tráfico de disco y de red que se duplica cuando el sistema opta por la replicación por valores. Los datos de carga se transfieren al gestor de colas de replicación, lo que requiere espacio en disco y ancho de banda de red. Sin embargo, debido a la replicación por valores, las mismas filas se descargan de las tablas y se duplican. Si establece el valor de la variable REPLICATE_ALWAYS_BY_VALUE en ON, los archivos de carga no se copian en el gestor de colas de replicación ni a través de la red, lo que permite ahorrar recursos. El siguiente ejemplo utiliza secuencias no deterministas:

begin;
INSERT INTO replTable SELECT * FROM external table ... ;
INSERT INTO replTable1 SELECT * FROM external table ... ;
...
INSERT INTO replTableN SELECT * FROM external table ... ;
UPDATE replTable set c1 = NEXT VALUE FOR mySeq;
commit;
REPLICATION_NONDETERM_CHECK (obsoleto)
La variable REPLICATION_NONDETERM_CHECK controla las acciones que se toman en las modificaciones de datos replicados que utilizan SQL no determinista. Esta variable tiene ámbito de sesión y puede especificarse en el archivo de configuración de Postgres postgresql.conf.
La variable ya no es necesaria porque el software de replicación gestiona automáticamente cualquier función no determinista por valor; la variable se mantiene por compatibilidad con versiones anteriores.
La variable REPLICATION_NONDETERM_CHECK utiliza la siguiente sintaxis:

SET REPLICATION_NONDETERM_CHECK [ TO | = ] [ERROR | WARN | IGNORE ]
SHOW REPLICATION_NONDETERM_CHECK
Donde:
ERROR
Especifica que la transacción que contiene el SQL no determinista es rechazada en el primario con un error. Esta opción evita divergencias entre los datos replicados en los nodos del conjunto de replicación.
AVISO
Especifica que la transacción se replica con un AVISO registrado en los registros POSTGRES, indicando SQL no determinista.
IGNORAR (por defecto)
Especifica que si el sistema determina que una carga de trabajo es potencialmente no determinista, la transacción se replica por valor, sin error ni aviso. Si la transacción es determinista, la configuración no afecta a si se selecciona el método de replicación by-SQL o by-value.

Variables de sesión NPS replicadas

Un subconjunto de variables de control de la sesión NPS no se reproducen. La mayoría de las variables no se replican porque no se conserva el estado de la sesión entre el primario y la réplica. Se reproducen las siguientes variables:
  • enable_dsid_joins
  • enable_factrel_planner
  • enable_random_table_distribute
  • enable_restore_mode
  • enable_sequence_cachesize
  • factrel_size_threshold
  • max_table_versions

Variables de sesión NPS no replicadas

Todas las variables de sesión de NPS que no aparecen en ninguna de las secciones anteriores no se replican y no afectan a la replicación.