Variables de la session NPS

Il existe trois catégories de variables de session NPS® qui s'appliquent à la réplication : les variables spécifiques à la réplication, les variables répliquées et les variables non répliquées.

Pour définir les variables de session NPS, utilisez la commande SQL SET. Vous pouvez afficher les variables de session définies par l'utilisateur à l'aide de la commande \set sans arguments, comme le montre l'exemple suivant :
SALES.USER1(USER1)=> \set

Variables de session NPS spécifiques à la réplication

Les variables spécifiques à la réplication commencent par le préfixe REPL. Deux variables s'appliquent uniquement à la réplication :
RÉPLIQUER_TOUJOURS_PAR_VALEUR

L'état de la variable de session REPLICATE_ALWAYS_BY_VALUE détermine si la réplication se fait uniquement par valeur ou à la fois par valeur et by-sql. Le réglage par défaut et de loin le plus courant est OFF. Lorsque la variable est désactivée (OFF), le système détermine si une instruction d'une transaction comprend des fonctions non déterministes. Si une déclaration contient des fonctions non déterministes, elles sont traitées en utilisant la réplication par valeur (valeur de modification). Si une déclaration ne les contient pas, elle est traitée en utilisant la réplication by-SQL (déclaration SQL).

Lorsque la variable REPLICATE_ALWAYS_BY_VALUE est activée, le logiciel utilise la réplication par valeur pour toutes les transactions. Certaines charges de travail contiennent des fonctions non déterministes et gagneraient à être toujours répliquées par valeur. Le cas le plus courant est celui des transactions à énoncés multiples qui effectuent des charges déterministes importantes, suivies d'énoncés contenant des appels de fonctions non déterministes ou d'autres déclencheurs de valeurs partielles. Ceux-ci peuvent générer de grandes quantités de trafic sur le disque et le réseau, qui sont dupliquées lorsque le système choisit la réplication par valeur. Les données de charge sont transférées au gestionnaire de file d'attente de réplication, ce qui nécessite de l'espace disque et de la bande passante. Cependant, en raison de la réplication par valeur, les mêmes lignes sont déchargées des tables et dupliquées. Si vous attribuez la valeur ON à la variable REPLICATE_ALWAYS_BY_VALUE, les fichiers de chargement ne sont pas copiés dans le gestionnaire de file d'attente de réplication ou sur le réseau, ce qui permet d'économiser des ressources. L'exemple suivant utilise des séquences non déterministes :

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 (obsolète)
La variable REPLICATION_NONDETERM_CHECK contrôle les actions qui sont prises sur les modifications de données répliquées qui utilisent un langage SQL non déterministe. Cette variable a une portée de session et vous pouvez la spécifier dans le fichier de configuration de postgresql.conf Postgres.
La variable n'est plus nécessaire car le logiciel de réplication traite automatiquement toutes les fonctions non déterministes par valeur ; la variable est maintenue pour des raisons de compatibilité ascendante.
La variable REPLICATION_NONDETERM_CHECK utilise la syntaxe suivante :

SET REPLICATION_NONDETERM_CHECK [ TO | = ] [ERROR | WARN | IGNORE ]
SHOW REPLICATION_NONDETERM_CHECK
Où :
ERREUR
Spécifie que la transaction qui contient le code SQL non déterministe est rejetée sur le primaire avec une erreur. Cette option permet d'éviter les divergences entre les données répliquées sur les nœuds de l'ensemble de réplication.
AVERTISSEMENT
Spécifie que la transaction est répliquée avec un AVIS consigné dans les journaux POSTGRES, ce qui indique un code SQL non déterministe.
IGNORE (par défaut)
Spécifie que si le système détermine qu'une charge de travail est potentiellement non déterministe, la transaction est répliquée par valeur, sans erreur ni préavis. Si la transaction est déterministe, ce paramètre n'affecte pas la sélection de la méthode de réplication by-SQL ou by-value.

Variables de session NPS répliquées

Un sous-ensemble de variables de contrôle de la session NPS n'est pas reproduit. La plupart des variables ne sont pas répliquées car aucun état de session n'est préservé entre le primaire et le réplica. Les variables suivantes sont reproduites :
  • enable_dsid_joins
  • enable_factrel_planner
  • enable_random_table_distribute
  • enable_restore_mode
  • enable_sequence_cachesize
  • factrel_size_threshold
  • max_table_versions

Variables de session NPS non répliquées

Toutes les variables de session NPS qui ne figurent pas dans l'une ou l'autre des sections précédentes ne sont pas répliquées et n'affectent pas la réplication.