Auto-analyse

Vous pouvez utiliser la fonction d'analyse automatique pour exécuter automatiquement une instruction ANALYZE TABLE sur les tables lorsqu'elle est jugée nécessaire.

L'analyse automatique ne prend en compte une table pour l'analyse que lorsque cette table est impliquée dans un balayage. S'il détermine qu'une table doit être analysée, elle est ajoutée à la file d'attente d'analyse automatique.

Lorsque plus de 50 % des données de la table sont nouvelles ou que la table n'a jamais été analysée, le processus d'analyse automatique exécute l'instruction ANALYZE TABLE. L'analyse automatique utilise un échantillon de 10 % des données du tableau. Si votre table est très grande, vous pouvez exécuter manuellement l'instruction ANALYZE TABLE en spécifiant un pourcentage d'échantillonnage plus faible.

Au moment de l'installation de Db2® Warehouse SaaS, l'analyse automatique est activée pour s'exécuter toutes les 10 minutes avec le programme cron par défaut. Si vous avez besoin d'un horaire différent, vous pouvez modifier l'horaire cron par défaut en utilisant une procédure du planificateur de tâches administratives (ATS) de DB2® nommée SYSPROC.ADMIN_TASK_UPDATE pour mettre à jour la tâche ATS nommée BIGSQL_CHECK_ANALYZE. Pour plus d'informations sur la définition d'un programme de tâches cron, voir le format UNIX cron.

Une tâche d'analyse est également ajoutée à l'ATS lorsque l'analyse automatique détecte qu'une instruction ANALYZE TABLE doit être exécutée. Ces tâches d'analyse sont programmées pour s'exécuter immédiatement et une seule fois.

Pour désactiver l'analyse automatique, modifiez le programme cron pour la tâche ou supprimez la tâche ATS (nommée BIGSQL_CHECK_ANALYZE) qui vérifie les tables à analyser.

Db2 procédures d'auto-analyse

Note : SYSHADOOP.BIGSQL_RUN_ANALYZE et SYSHADOOP.BIGSQL_CHECK_ANALYZE sont des procédures internes destinées à être utilisées uniquement par auto-analyse.
SYSHADOOP.BIGSQL_RUN_ANALYZE
Une tâche d'analyse appelle cette procédure pour exécuter l'instruction ANALYZE TABLE.
SYSHADOOP.BIGSQL_CHECK_ANALYZE
Une tâche planifiée appelle cette procédure pour déterminer si des tables doivent être analysées. Cette procédure a un paramètre :
SYSHADOOP.BIGSQL_CHECK_ANALYZE(maxConcurrentTasks)
maxConcurrentTasks
Spécifie le nombre maximal de tâches exécutées simultanément. La valeur est un nombre entier qui est utilisé pour remplacer le paramètre de la propriété biginsights.stats.auto.analyze.concurrent.max .
SYSHADOOP.BIGSQL_AUTO_ANALYZE_STATUS
Un utilisateur de Db2 appelle cette procédure pour vérifier l'état des tâches d'auto-analyse. Pour plus de détails, consultez la procédure stockée BIGSQL_AUTO_ANALYZE_STATUS.

Propriétés de configuration pour l'auto-analyse

Utilisez les propriétés suivantes pour définir le comportement de l'analyse automatique.
biginsights.stats.auto.analyze.concurrent.max
Spécifie le nombre maximum de tâches d'analyse qui peuvent être extraites en même temps de la file d'attente d'analyse automatique de l'ordonnanceur. Cela équivaut au nombre d'instructions ANALYZE TABLE simultanées qui peuvent être lancées par l'analyse automatique. Ce nombre doit rester faible pour éviter que l'auto-analyse n'utilise trop de ressources, ce qui pourrait nuire aux performances d'autres opérations simultanées. La valeur par défaut est 1.
biginsights.stats.auto.analyze.newdata.min
Spécifie le pourcentage minimum de nouvelles données qui doivent être ajoutées à la table avant qu'une opération d'analyse automatique ne soit déclenchée. La valeur doit être un nombre entier supérieur à 0. La valeur par défaut est 50, ce qui signifie qu'au moins 50 % des données de la table doivent être nouvelles avant que l'auto-analyse ne détermine que la table doit être analysée.
biginsights.stats.auto.analyze.task.retention.time
Spécifie la durée pendant laquelle les tâches d'analyse terminées et leur historique doivent être conservés avant d'être supprimés. Lorsque les historiques sont purgés, le statut des tâches terminées n'est plus disponible. Les valeurs valables sont 1WEEK, 1MONTH, FOREVER, ou NONE. La valeur par défaut est 1MONTH. Si la valeur est NONE, les tâches d'analyse sont supprimées immédiatement après leur achèvement. Lorsque le paramètre est défini sur FOREVER, les tâches d'analyse terminées et leur historique ne sont jamais supprimés. Vous pouvez utiliser la SYSPROC.ADMIN_TASK_REMOVE procédure pour purger manuellement et périodiquement les tâches d'analyse terminées.

Utilisation de plusieurs horaires

Il peut y avoir plusieurs tâches avec des calendriers différents pour l'appel de la procédure SYSHADOOP.BIGSQL_CHECK_ANALYZE, ou des tâches avec des paramètres de tâches concurrentes maximales différents. Ces tâches doivent être ajoutées par l'administrateur de Db2. Pour des exemples, voir Utiliser plusieurs calendriers.

Exemples

  • L'analyse automatique doit être exécutée une fois par jour à minuit :
    CALL SYSPROC.ADMIN_TASK_UPDATE('BIGSQL_CHECK_ANALYZE', NULL, NULL, NULL,'0 0 * * *', NULL, NULL);
  • Désactivez la tâche d'auto-analyse pour qu'elle ne s'exécute pas :
    CALL SYSPROC.ADMIN_TASK_UPDATE('BIGSQL_CHECK_ANALYZE', NULL, NULL, 0, NULL, NULL, NULL);
  • Désactiver l'auto-analyse en supprimant la tâche ATS qui vérifie les tables (uniquement pour l'administrateur Db2 ) :
    CALL SYSPROC.ADMIN_TASK_REMOVE('BIGSQL_CHECK_ANALYZE', NULL);
  • Activer l'auto-analyse en ajoutant une tâche ATS qui vérifie les tables (uniquement pour l'administrateur Db2 ) :
    CALL SYSPROC.ADMIN_TASK_ADD('BIGSQL_CHECK_ANALYZE', NULL, NULL, NULL, '0,10,20,30,40,50 * * * *', 'SYSHADOOP', 'BIGSQL_CHECK_ANALYZE', 'VALUES(0)', NULL, NULL);
  • Désactiver l'auto-analyse en mettant à jour le programme cron de la tâche ATS (uniquement pour l'administrateur Db2 ) :
    CALL SYSPROC.ADMIN_TASK_UPDATE('BIGSQL_CHECK_ANALYZE', NULL, NULL, 0, NULL, NULL, NULL);
  • Activer l'auto-analyse en mettant à jour le programme cron de la tâche ATS (uniquement pour l'administrateur Db2 ). Cet exemple définit la programmation cron pour une vérification toutes les 10 minutes :
    CALL SYSPROC.ADMIN_TASK_UPDATE('BIGSQL_CHECK_ANALYZE', NULL, NULL, NULL, '0,10,20,30,40,50 * * * *', NULL, NULL);
  • Purger manuellement les tâches d'analyse terminées. Dans cet exemple, le nom de la tâche d'analyse ATS est Analyze 1458912222 UIUSER.COUNTRY:
    SYSPROC.ADMIN_TASK_REMOVE('Analyze 1458912222 UIUSER.COUNTRY', NULL);
  • Utilisez plusieurs horaires. Les exemples suivants montrent comment ajouter deux tâches SYSHADOOP.BIGSQL_CHECK_ANALYZE avec des calendriers différents et des paramètres de tâches simultanées maximales différents. La première tâche (pour la journée) s'exécute toutes les 15 minutes de 7h00 à 18h59 et autorise un maximum d'une tâche d'analyse simultanée. La deuxième tâche (pour la nuit) s'exécute toutes les 30 minutes de 00h00 à 06h59 et de 19h00 à 12h59, ce qui permet un maximum de cinq tâches d'analyse simultanées.
    Horaire de jour
    CALL SYSPROC.ADMIN_TASK_ADD('BIGSQL_CHECK_ANALYZE days max 1', NULL, NULL, NULL, '0,15,30,45 7-18 * * *', 'SYSHADOOP', 'BIGSQL_CHECK_ANALYZE', 'VALUES(1)', NULL, NULL);
    Horaire de nuit
    CALL  SYSPROC.ADMIN_TASK_ADD('BIGSQL_CHECK_ANALYZE nights max 5',NULL, NULL,  NULL, '0,30 0-6,19-23 * * *', 'SYSHADOOP','BIGSQL_CHECK_ANALYZE', 'VALUES(5)',NULL,NULL);