Partager via


Statistiques pour des tableaux Memory-Optimized

L’optimiseur de requête utilise des statistiques sur les colonnes pour créer des plans de requête qui améliorent les performances des requêtes. Les statistiques sont collectées à partir des tables de la base de données et stockées dans les métadonnées de la base de données.

Les statistiques sont créées automatiquement, mais peuvent également être créées manuellement. Par exemple, les statistiques sont créées automatiquement pour les colonnes clés d’index lors de la création de l’index. Pour plus d’informations sur la création de statistiques, consultez Statistiques.

Les données de table changent généralement au fil du temps à mesure que les lignes sont insérées, mises à jour et supprimées. Cela signifie que les statistiques doivent être mises à jour régulièrement. Par défaut, les statistiques sur les tables sur disque sont mises à jour automatiquement lorsque l’optimiseur détermine qu’ils peuvent être obsolètes.

Les statistiques sur les tables mémoire optimisées ne sont pas mises à jour par défaut. Au lieu de cela, vous devez les mettre à jour manuellement. Utilisez UPDATE STATISTICS (Transact-SQL) pour les colonnes, index ou tables individuels. Utilisez sp_updatestats (Transact-SQL) pour mettre à jour les statistiques pour toutes les tables utilisateur et interne de la base de données.

Lorsque vous utilisez CREATE STATISTICS (Transact-SQL) ou UPDATE STATISTICS (Transact-SQL) , vous devez spécifier NORECOMPUTE pour désactiver la mise à jour automatique des statistiques pour les tables optimisées en mémoire. Pour les tables sur disque, sp_updatestats (Transact-SQL) met uniquement à jour les statistiques si la table a été modifiée depuis la dernière sp_updatestats (Transact-SQL). Pour les tables optimisées en mémoire, sp_updatestats (Transact-SQL) génère toujours des statistiques mises à jour. sp_updatestats (Transact-SQL) est une bonne option pour les tables optimisées en mémoire ; sinon, vous devez savoir quelles tables ont des modifications significatives afin de pouvoir mettre à jour les statistiques individuellement.

Les statistiques peuvent être générées en échantillonnant les données ou en effectuant une analyse complète. Les statistiques échantillonées utilisent uniquement un exemple de données de table pour estimer la distribution des données. Les statistiques de fullscan analysent la table entière pour déterminer la répartition des données. Les statistiques d’analyse complète sont généralement plus précises, mais prennent plus de temps à calculer. Les statistiques échantillonnée peuvent être collectées plus rapidement.

Par défaut, les tables basées sur disque utilisent des statistiques échantillonées. Les tables optimisées en mémoire prennent uniquement en charge les statistiques de balayage intégral. Lorsque vous utilisez CREATE STATISTICS (Transact-SQL) ou UPDATE STATISTICS (Transact-SQL) , vous devez spécifier l’option FULLSCAN pour les tables optimisées en mémoire.

Considérations supplémentaires relatives aux statistiques sur les tables mémoire optimisées :

  • Les index des tables optimisées pour la mémoire sont créés en même temps que la table. Les statistiques sur les colonnes clés d’index sont créées lorsque la table est vide. Par conséquent, ces statistiques doivent être mises à jour une fois que les données sont chargées dans la table.

  • Pour les procédures stockées compilées en mode natif, les plans d’exécution des requêtes de la procédure sont optimisés lorsque la procédure est compilée. Cela se produit uniquement lorsque la procédure est créée et lorsque le serveur redémarre, et non lorsque les statistiques sont mises à jour. Par conséquent, les tables doivent contenir un ensemble représentatif de données et de statistiques doivent être up-to-date avant la création des procédures. (Les procédures stockées compilées en mode natif sont recompilées si la base de données est mise hors connexion et ramenée en ligne, ou s’il existe un redémarrage du serveur.)

Instructions relatives aux statistiques lors du déploiement de tables Memory-Optimized

Pour vous assurer que l’optimiseur de requête a up-tostatistiques de date lors de la création de plans de requête, déployez des tables optimisées en mémoire en procédant comme suit :

  1. Créez des tables et des index. Les index sont spécifiés dans les CREATE TABLE instructions.

  2. Chargez des données dans les tables.

  3. Mettez à jour les statistiques sur les tables.

  4. Créez des procédures stockées qui accèdent aux tables.

  5. Exécutez la charge de travail, qui peut contenir un mélange de procédures stockées compilées et interprétées en mode natif Transact-SQL, ainsi que des lots ad hoc.

La création de procédures stockées compilées en mode natif après avoir chargé les données et mis à jour les statistiques garantit que l’optimiseur dispose de statistiques disponibles pour les tables optimisées en mémoire. Cela garantit des plans de requête efficaces lorsque la procédure est compilée.

Instructions pour la maintenance des statistiques sur les tables Memory-Optimized

Pour conserver les statistiques up-to-date, mettez régulièrement à jour les statistiques sur les tables optimisées en mémoire.

Si les données changent fréquemment, vous devez fréquemment mettre à jour les statistiques. Par exemple, mettez à jour les statistiques de table après une mise à jour par lot. Après avoir mis à jour les statistiques, supprimez et recréez les procédures stockées compilées en mode natif afin qu’elles puissent tirer parti des statistiques mises à jour.

.

Ne mettez pas à jour les statistiques pendant les pics de charge de travail.

Pour mettre à jour les statistiques :

Pour mettre à jour les statistiques d’une table à mémoire optimisée unique (myschema). Mytable), exécutez le script suivant :

UPDATE STATISTICS myschema.Mytable WITH FULLSCAN, NORECOMPUTE  

Pour mettre à jour les statistiques de toutes les tables mémoire optimisées dans la base de données active, exécutez le script suivant :

DECLARE @sql NVARCHAR(MAX) = N''  
  
SELECT @sql += N'  
   UPDATE STATISTICS ' + quotename(schema_name(schema_id)) + N'.' + quotename(name) + N' WITH FULLSCAN, NORECOMPUTE'  
FROM sys.tables WHERE is_memory_optimized=1  
  
EXEC sp_executesql @sql  

Pour mettre à jour les statistiques de toutes les tables de la base de données, exécutez sp_updatestats (Transact-SQL).

Les exemples suivants indiquent quand les statistiques sur les tables mémoire optimisées ont été mises à jour pour la dernière fois. Ces informations peuvent vous aider à décider si vous devez mettre à jour les statistiques.

select t.object_id, t.name, sp.last_updated as 'stats_last_updated'  
from sys.tables t join sys.stats s on t.object_id=s.object_id cross apply sys.dm_db_stats_properties(t.object_id, s.stats_id) sp  
where t.is_memory_optimized=1  

Voir aussi

Memory-Optimized tables