Comprendre l’utilisation de l’entrepôt pour les tables dynamiques¶
Les tables dynamiques prennent en charge les entrepôts doubles afin d’optimiser les performances et les coûts de différents types d’opérations d’actualisation. Vous pouvez spécifier un entrepôt dédié pour les Initialisations et les réinitialisations, qui sont généralement plus gourmandes en ressources, alors que vous utilisez un autre entrepôt pour toutes les autres actualisations.
Les initialisations et réinitialisations effectuent des analyses complètes des données et peuvent prendre beaucoup plus de temps que les actualisations incrémentielles. Ces opérations se produisent souvent lors d’événements tels que les basculements, où une table dynamique principale nouvellement promue doit effectuer une réinitialisation complète lors de sa première actualisation. En affectant un entrepôt plus grand ou plus performant à ces opérations, vous pouvez réduire le temps de reprise et respecter les exigences RTO/RPO strictes sans surdimensionner l’entrepôt utilisé pour les actualisations incrémentielles régulières.
Pour plus d’informations sur les coûts d’utilisation de l’entrepôt, voir Understanding costs for dynamic tables.
Exécutez les commandes SQL suivantes pour définir la propriété INITIALIZATION_WAREHOUSE qui dirige les initialisations et les réinitialisations vers un entrepôt dédié. Toutes les autres actualisations utilisent l’entrepôt spécifié par la propriété WAREHOUSE.
CREATE DYNAMIC TABLE : Vous pouvez définir la propriété INITIALIZATION_WAREHOUSE en utilisant l’une des variantes de la commandes CREATE DYNAMIC TABLE.
CREATE DYNAMIC TABLE my_dynamic_table TARGET_LAG = 'DOWNSTREAM' WAREHOUSE = 'XS_WAREHOUSE' INITIALIZATION_WAREHOUSE = '4XL_WAREHOUSE' AS <query>
ALTER DYNAMIC TABLE : Vous pouvez utiliser cette commande pour définir ou désactiver la propriété INITIALIZATION_WAREHOUSE. Lorsque la propriété INITIALIZATION_WAREHOUSE est SET, l’entrepôt spécifié est utilisé pour toutes les initialisations et réinitialisations ; lorsque la propriété est UNSET, la table dynamique utilise l’entrepôt qui est spécifié par la propriété WAREHOUSE pour toutes les actualisations.
ALTER DYNAMIC TABLE my_dynamic_table SET INITIALIZATION_WAREHOUSE = '4XL_WAREHOUSE';
ALTER DYNAMIC TABLE my_dynamic_table UNSET INITIALIZATION_WAREHOUSE;
Si INITIALIZATION_WAREHOUSE n’est pas défini, toutes les actualisations — y compris les initialisations et les réinitialisations — s’exécutent sur l’entrepôt spécifié par WAREHOUSE.
Pour voir l’entrepôt utilisé, vous pouvez utiliser les interfaces suivantes :
Commande SHOW DYNAMIC TABLES
Fonction de table ou vue DYNAMIC_TABLE_REFRESH_HISTORY </sql-reference/functions/dynamic_table_refresh_history></sql-reference/account-usage/dynamic_table_refresh_history>
Snowsight
Vous devez utiliser un rôle qui a reçu le privilège MONITOR sur les tables dynamiques. Pour plus d’informations, voir Liste des tables dynamiques ou vue des informations sur des colonnes spécifiques et Contrôle de vos tables dynamiques à l’aide des fonctions de table de SQL.
Comment les configurations de l’entrepôt affectent-elles les performances des tables dynamiques ?¶
La taille de l’entrepôt n’est pas toujours directement liée au coût d’actualisation des tables dynamiques. Pour trouver la meilleure taille, testez votre requête d’actualisation sur plusieurs tailles d’entrepôt et comparez les performances.
Les grands entrepôts peuvent améliorer les performances de deux manières principales :
Mémoire : Si une requête dépasse la taille de la mémoire de l’entrepôt, elle se déverse sur le stockage local, ce qui augmente la charge de travail et ralentit l’exécution. Un grand entrepôt peut éviter ce genre de désagrément et accélérer considérablement l’actualisation.
Parallélisme : Les grands entrepôts traitent davantage de tâches en parallèle. Si la requête comporte suffisamment de travail en parallèle, l’augmentation de la taille de l’entrepôt réduit généralement la durée d’exécution à un coût à peu près proportionnel ; par exemple, le fait de doubler la taille réduit souvent la durée d’exécution de moitié.
Cependant, au-delà d’un certain point, le parallélisme supplémentaire fournit des rendements décroissants. Un dimensionnement optimal en termes de coût suffit généralement à éviter les déversements de mémoire, sans pour autant être trop important au point de saturer le parallélisme.
Pour les tables dynamiques incrémentielles, l”:ref:`actualisation initiale <label-dynamic_tables_initialization>`nécessite souvent plus de calcul que les actualisations ultérieures. Un processus courant consiste à utiliser INITIALIZATION_WAREHOUSE pour exécuter les actualisations initiales sur une instance plus grande.
Pour plus d’informations sur le dimensionnement des entrepôts et les coûts associés, voir Utilisation du crédit d’entrepôt virtuel.
Limites et considérations lors de l’utilisation d’entrepôts doubles¶
Pour actualiser manuellement la table dynamique, vous pouvez exécuter ALTER DYNAMIC TABLE … REFRESH COPY SESSION. Cette commande exécute l’actualisation dans une copie de la session en cours en utilisant l’utilisateur et l’entrepôt actuels. Lorsque COPY SESSION est spécifié, INITIALIZATION_WAREHOUSE est ignoré, même pour les initialisations et les réinitialisations. L’entrepôt de COPY SESSION a priorité sur WAREHOUSE et INITIALIZATION_WAREHOUSE.