Partager via


Statistiques pour les tables optimisées en mémoire

L'optimiseur de requête utilise des statistiques sur les colonnes dans l'optique de créer des plans de requête qui améliorent les performances des requêtes. Les statistiques sont collectées dans les 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 elles peuvent également être créées manuellement. Par exemple, des statistiques sont créées automatiquement pour les colonnes clés d'index lorsque l'index est créé. Pour plus d'informations sur la création de statistiques, consultez Statistics.

Les données de table sont généralement modifiées au fil du temps, à mesure que des 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'elles sont obsolètes.

Les statistiques sur les tables mémoire optimisées ne sont pas mises à jour par défaut. Vous devez les mettre à jour manuellement. Utilisez UPDATE STATISTICS (Transact-SQL) pour des colonnes, des index ou des tables individuelles. Utilisez sp_updatestats (Transact-SQL) pour mettre à jour les statistiques de 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 de désactiver la mise à jour automatique des statistiques pour les tables à mémoire optimisée. Pour les tables basées sur disque, sp_updatestats (Transact-SQL) met à jour les statistiques uniquement si la table a été modifiée depuis la dernière sp_updatestats (Transact-SQL). Pour les tables à mémoire optimisée, sp_updatestats (Transact-SQL) génère toujours des statistiques mises à jour. sp_updatestats (Transact-SQL) est une bonne option pour les tables à mémoire optimisée ; 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 lors de l'échantillonnage des données ou d'une analyse complète. Les statistiques échantillonnées n'utilisent qu'un échantillon des données de la table pour estimer la distribution des données. Les statistiques d'analyse complète analysent la table entière pour déterminer la distribution des données. Les statistiques d'analyse complète sont généralement plus précises, mais prennent plus temps pour le calcul. Les statistiques échantillonnées sont collectées plus rapidement.

Par défaut, les tables sur disque utilisent des statistiques échantillonnées. Les tables mémoire optimisées prennent uniquement en charge les statistiques d'analyse complète. Lorsque vous utilisez CREATE STATISTICS (Transact-SQL) ou UPDATE STATISTICS (Transact-SQL), vous devez spécifier l’option pour les FULLSCAN tables à mémoire optimisée.

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

  • Les index sur les tables mémoire optimisées sont créés avec 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 après que les données ont été chargées dans la table.

  • Pour les procédures stockées compilées en mode natif, les plans d'exécution de requêtes dans 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 au redémarrage du serveur, et non pas lorsque les statistiques sont mises à jour. Par conséquent, les tables doivent contenir un jeu représentatif de données et les statistiques doivent être à jour avant de pouvoir créer les 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, puis remise en ligne, ou en cas de redémarrage du serveur.)

Instructions relatives aux statistiques lors du déploiement de tables mémoire optimisées

Pour garantir que l'optimiseur de requête dispose de statistiques à jour lorsque vous créez des plans de requête, déployez les tables mémoire optimisées à l'aide de ces cinq étapes :

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

  2. Chargez des données dans les tables.

  3. Mettez à jour les statistiques des tables.

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

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

La création de procédures stockées compilées en mode natif après que vous avez chargé les données et mis à jour les statistiques garantit que l'optimiseur dispose de statistiques pour les tables mémoire optimisées. De cette façon, les plans de requête sont efficaces lorsque la procédure est compilée.

Instructions relatives à la gestion des statistiques de tables mémoire optimisées

Pour conserver les statistiques à jour, mettez régulièrement à jour les statistiques de tables mémoire optimisées.

Si les données sont modifiées fréquemment, mettez à jour les statistiques fréquemment. Par exemple, mettez à jour les statistiques de tables 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 de façon à ce qu'elles puissent tirer parti des statistiques mises à jour.

.

Ne mettez pas à jour les statistiques au cours d'une charge importante.

Pour mettre à jour les statistiques :

Pour mettre à jour les statistiques d’une seule table à mémoire optimisée (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

Tables à mémoire optimisée