Applies ToSQL 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

現象

Microsoft SQL Server 2012 または SQL Server 2014 でテーブルに列を追加することを前提とします。 行のサイズが最大許容サイズである8060バイトに近い場合、追加操作に時間がかかることがあります。

原因

この問題が発生するのは、行の合計サイズが許可されている最大行数に近い場合、SQL Server はテーブルの完全なスキャンを実行し、新しい列の追加がデータの整合性に違反しないようにするためです。 SQL Server 2012 より前のバージョンでは、このチェックは行われません。そのため、データ定義言語 (DDL) の実行速度が速くなります。 ただし、この動作により、行のサイズが許可されているサイズを超えると、行の更新や縮小などの後続の操作が失敗することになります。

SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。

詳細情報

  • トレースフラグ647は、スタートアップパラメーターを使用して有効にすることができます。 詳細については、「 データベースエンジンサービスの起動オプション」を参照してください。

  • 次のクエリを実行できます (テーブル名> <実際のテーブル名に置き換えてください)。この問題の影響を計画し、この問題の影響を計画します。 結果が8060よりも大きい場合、テーブルにはこの問題の対象となります。 また、列を削除した場合は、再構築オプションを使用してテーブルを変更する必要があります。 テーブルを再作成すると、クエリが正しい結果を返すようになります。

    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 
  • アプリケーションで頻繁に新しい列をテーブルに追加する場合は、可変長列またはスパース列を追加することを検討してください。 すべての列の合計サイズが8060バイトを超える場合でも、メタデータのみの操作です。

状態

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。