KB2986423 - CORRECTIF : l’ajout de nouvelles colonnes à un tableau prend beaucoup de temps lorsque la taille de ligne dépasse la taille maximale autorisée

S’applique à
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Symptômes

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

Cause

Le problème se produit car, lorsque la taille totale de la ligne est proche de la taille maximale autorisée, SQL Server effectue une analyse complète de la table pour s’assurer que l’ajout d’une nouvelle colonne n’enfreint pas l’intégrité des données. Les versions antérieures à SQL Server 2012 n’effectuent pas cette case activée, ce qui accélère l’exécution du langage de définition des données (DDL). Toutefois, ce comportement entraîne l’échec des opérations ultérieures, telles que la mise à jour ou la réduction de la ligne, si la taille de la ligne dépasse la taille autorisée.

Résolution

La mise à jour cumulative introduit un nouvel indicateur de trace 647 pour le comportement de compatibilité descendante.
Le problème a été résolu pour la première fois dans la mise à jour cumulative suivante de SQL Server.

Mise à jour cumulative 5 pour SQL Server 2014 /en-us/help/3011055

Mise à jour cumulative 12 pour SQL Server 2012 SP1 /en-us/help/2991533

Mise à jour cumulative 2 pour SQL Server 2012 SP2 /en-us/help/2983175

À propos des mises à jour cumulatives pour SQL Server

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous 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 trace 647 en utilisant le paramètre startup. Pour plus d’informations, consultez Options de démarrage du service de moteur de base de données.

  • Vous pouvez exécuter la requête suivante (remplacez <le nom> de la table par le nom réel de votre table) 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, votre table est sujette à ce problème. En outre, si vous avez supprimé des colonnes, vous devez modifier la table avec l’option de reconstruction. La reconstruction de la table peut faire en sorte que la requête retourne 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 ajouter des colonnes de longueur variable ou des colonnes éparses lorsque votre application ajoute fréquemment de nouvelles colonnes à la table. Il s’agit d’une opération utilisant uniquement les métadonnées même si la taille totale de toutes les colonnes dépasse 8 060 octets.

      

État

Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».