KB2986423-FIX : il faut longtemps pour ajouter de nouvelles colonnes à une table lorsque la taille de la ligne dépasse la taille maximale autorisée.

Symptômes

Supposez que vous ajoutez une colonne à une table dans Microsoft SQL Server 2012 ou SQL Server 2014. Lorsque la taille de la ligne est proche de la taille maximale autorisée de 8 060 octets, l’opération d’ajout peut prendre un certain temps.

Cause

Le problème se produit car, lorsque la taille totale de la ligne est proche de la taille de ligne maximale autorisée, SQL Server effectue une analyse complète de la table afin de garantir que l’ajout d’une nouvelle colonne ne viole pas l’intégrité des données. Les versions antérieures à SQL Server 2012 n’effectuent pas cette vérification, ce qui rend le langage de définition de données (DDL) s’exécuter plus vite. Toutefois, ce comportement entraîne l’échec de l’exécution d’opérations ultérieures telles que la mise à jour de ligne ou la réduction de la taille de la ligne.

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs et les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :

Informations supplémentaires

  • Vous pouvez activer l’indicateur de suivi 647 à l’aide du paramètre Startup. Pour plus d’informations, consultez options de démarrage du service du moteur de base de données.

  • Vous pouvez exécuter la requête suivante (remplacez <nom de la table> par votre nom de table réel) pour tester la table particulière avant l’opération sur un système de production et planifier l’effet de ce problème. Si le résultat est supérieur à 8 060, le tableau est soumis à ce problème. Par ailleurs, si vous avez interrompu des colonnes, vous devez modifier le tableau à l’aide de l’option de reconstruction. La reconstitution du tableau peut faire en sorte que la requête renvoie des résultats corrects.

    select  1+1+2 + 2 +  (case  when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end)  +  ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 +  sum( case when max_length=-1 then 24 else max_length end)  from sys.system_internals_partition_columns   col join sys.partitions par on col.partition_id = par.partition_id  where object_id = object_id ('<table name>')  and  index_id in (0,1) and partition_number =1 
  • Vous pouvez envisager d’ajouter des colonnes de longueur variable ou des colonnes clairsemées lorsque votre application ajoute fréquemment de nouvelles colonnes à la table. Il s’agit d’une opération de métadonnées uniquement, même si la taille totale de toutes les colonnes dépasse 8 060 octets.

Statut

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×