Amélioration des performances de stagingprop

L'utilitaire stagingprop est capable de traiter de grandes quantités de données.

Propagation de grandes quantités de donnée

Optimisation des paramètres -transaction et -batchsize

Une clé pour maximiser la performance est la capacité à traiter de grandes quantités de données. Au fur et à mesure que l'entreprise se développe, la quantité de données qui doit être déplacée depuis un environnement de création/transfert vers un environnement de production augmente en conséquence. Pour prendre en charge le mouvement de grandes quantités de données en utilisant stagingprop, pensez à utiliser des transactions de grande taille et des lots de grande taille lorsque vous propagez des données.
transaction
Indique le nombre d'enregistrements pour chaque transaction. Ce nombre d'enregistrements est le nombre de modifications qui sont propagées avant l'émission d'une validation sur les bases de données de production et de transfert. Chaque transaction peut inclure plusieurs lots qui sont validés lorsque le nombre d'enregistrements spécifié est atteint ou dépassé. La logique améliorée de l'utilitaire stagingprop suppose que cette valeur est élevée, tout en respectant les des deux bases de données pour pouvoir déplacer plus rapidement les données. Si vous ne spécifiez pas de valeur pour ce paramètre, les journaux des modifications sont validés comme une transaction unique.
batchsize
Indique le nombre d'enregistrements consolidés à inclure dans un lot. Comme pour le paramètre transaction, définissez une valeur élevée pour ce paramètre. En définissant le paramètre batchsize sur une valeur élevée, vous pouvez mettre en mémoire tampon de grandes quantités de données de propagation dans la machine JVM avant que les données soient envoyées à la base de données de production en un seul envoi. La valeur par défaut est "100".
Il est recommandé d'utiliser à la fois les paramètres transaction et batchsize si vous devez propager de grandes quantités de données.
Remarque : Lorsque vous utilisez les deux paramètres, le nombre d'enregistrements que vous définissez pour le paramètre transaction peut être dépassé en fonction de la valeur que vous définissez pour le paramètre batchsize. Par exemple, si vous définissez la valeur de paramètre transaction sur "10000" et les valeurs de paramètre batchsize sur "3000", la relation entre les paramètres peut se présenter comme le diagramme suivant.

Avec cette relation, les modifications qui sont propagées à la base de données de production sont validées tous les 4 lots. Les enregistrements ne sont validés que lorsque le quatrième lot est complet. Dans ce scénario, le nombre d'enregistrements qui sont validés dans chaque transaction peut être 120000, même si la valeur du paramètre transaction est uniquement "100000".
Lorsque vous optimisez les paramètres batchsize et transaction, prenez en compte les paramètres recommandés suivants :
  • Pour des performances optimales, assurez-vous que la valeur du paramètre transaction est un multiple de la valeur pour le paramètre batchsize. Le rapport recommandé entre la valeur du paramètre batchsize et la valeur du paramètre transaction est de 1:10. Par exemple, dans le scénario présenté dans le diagramme ci-dessus, la valeur de paramètre transaction est "10000". Pour que la valeur du paramètre batchsize utilise le rapport recommandé, la valeur doit être "1000". Si la valeur du paramètre batchsize doit rester "3000", alors la valeur du paramètre transaction doit être "30000".
  • Pour résoudre les problèmes de performances généraux, affectez des valeurs plus élevées aux deux paramètres. Les valeurs optimales pour des tests internes IBM étaient "100000" pour le paramètre batchsize et "1000000" pour le paramètre transaction. Cependant, gardez à l'esprit que plus la taille des lots est importante, plus le segment de mémoire qui est nécessaire doit être important pour contenir les instructions SQL en mémoire avant une validation. Vous pourriez avoir besoin d'ajuster votre segment de mémoire JVM lorsque vous définissez une valeur élevée du paramètre batchsize.
  • Si l'utilitaire stagingprop met du temps pour effectuer la propagation des données, pensez à configurer les paramètres pour traiter moins de données à la fois. Si vous propagez trop d'enregistrements à la fois, envisagez d'exécuter l'utilitaire à des intervalles plus fréquents. L'augmentation de la fréquence avec laquelle vous propagez les données peut entraîner moins d'enregistrements par propagation.
  • Pour faciliter l'identification et la résolution des incidents lorsque l'utilitaire stagingprop ne parvient pas à propager des données, ajustez la valeur du paramètre batchsize. Par exemple, si vous ne définissez pas une valeur pour ce paramètre, la valeur est "100", ce qui peut compliquer les recherches des enregistrements qui sont à l'origine des erreurs. En définissant la valeur de paramètre sur "0", vous pouvez désactiver la création de lots JDBC, ce qui peut vous aider à identifier les enregistrements qui sont à l'origine d'une erreur.

mémoire dynamique d'exécution de la machine virtuelle Java

Vous pouvez augmenter les contraintes de la base de données de transfert et de production pour améliorer les performances. Toutefois, il peut aussi être nécessaire d'ajuster les contraintes de la machine virtuelle Java. Dans ce cas, de stagingprop et le pilote JDBC mettent en mémoire tampon de grandes quantités de données en mémoire pendant les phases de consolidation et de propagation.

Vous pouvez augmenter la quantité maximale de segment de mémoire d'exécution qui peut être utilisée par la JVM en indiquant la combinaison de l'argument et de la valeur de -Xmx<n> pour l'appel de stagingprop dans le fichier stagingprop.sh ou stagingprop.bat.

Dans utilities_root/bin/stagingprop.sh:
  1. Localisez la ligne de code suivante :
    ${JAVA_EXE?} ... -Dwclogdir=$WCLOGDIR ...  com.ibm.commerce.staging.StagingProp $* $DEFAULTLOG $DBTYPE
    
  2. Mettez à jour la ligne de code à l'aide du code suivant :
    ${JAVA_EXE?} ... -Dwclogdir=$WCLOGDIR -Xmx3072m ... com.ibm.commerce.staging.StagingProp $* $DEFAULTLOG $DBTYPE

Dans les exemples ci-dessus, la quantité maximum de la mémoire dynamique d'exécution utilisable par la machine virtuelle Java pendant l'appel de stagingprop passe à 3 giga-octets.

Si vous définissez le paramètre -actionOnError, il peut être nécessaire d'ajuster la taille de la pile réservée à la machine virtuelle Java pendant l'appel lorsque certains pilotes JDBC sont utilisés. Cet ajustement peut être effectué de la même façon dans la mémoire dynamique d'exécution mais avec la combinaison de l'argument et de la valeur -Xss<n>. Par exemple, si vous indiquez -Xss1280k, la taille de la pile de la machine virtuelle Java est ajustée à 1,25 mégaoctet.
Remarque : Avec cet ajustement, si vous modifiez les arguments -Xmx et -Xss de la machine virtuelle Java, assurez-vous que vous n'utilisez pas une valeur trop élevée. cela détournerait des ressources de mémoire qui pourraient être nécessaires ailleurs.
A titre de référence, dans les tests sur les grandes quantités de données réalisés pendant le développement, les valeurs de machine virtuelle Java suivantes sont utilisées :
  • -Xmx3072m
  • -Xss1280k
Si vous effectuez ces modifications, vous pouvez utiliser 100000 comme valeur possible pour le paramètre -batchsize et 1000000 pour le paramètre -transaction.