ホームページ > データベース > mysql チュートリアル > 再起動後に SQL Server ID の増加が急激に増加するのはなぜですか?

再起動後に SQL Server ID の増加が急激に増加するのはなぜですか?

Barbara Streisand
リリース: 2025-01-23 14:51:08
オリジナル
555 人が閲覧しました

Why Does My SQL Server Identity Increment Jump After Restarts?

SQL Server データベースでの ID 増分例外

SQL Server データベースでは、「Fee」テーブルの「ReceiptNo」列の ID 増分が一貫性のない動作を示し、再起動後に増分値が急上昇します。

この異常現象は主に次の 3 つのシナリオに反映されます。

  1. 「ReceiptNo」が 1205446 の場合は、1206306 にジャンプします。
  2. 「ReceiptNo」が 1206321 の場合、1207306 にジャンプします。
  3. 「ReceiptNo」が 1207314 の場合は、1208306 にジャンプします。

これらのジャンプ中、最後の 3 桁 (306) が同じままであることに注意してください。さらに、この問題はコンピュータの再起動後にのみ発生します。

原因分析:

この動作は、SQL Server 2012 で導入されたパフォーマンスの最適化の直接の結果です。データベースは、IDENTITY 値を整数列に割り当てるときに、1000 のキャッシュ サイズを使用するようになりました。サービスを再起動すると、キャッシュ内の未使用の値は失われます。

この微妙な点は SQL Server のドキュメントに記載されており、キャッシュが原因で ID 値のギャップが発生し、データベースの障害やサーバーの再起動時に問題が発生する可能性があると記載されています。

解決策:

このようなギャップが望ましくない場合は、次の回避策を検討してください:

  1. NOCACHE オプションを指定して SEQUENCE ジェネレーターを使用します。
  2. トレース フラグ 272 を有効にして IDENTITY 割り当てをログに記録し、2008 R2 以前の動作をエミュレートします。
  3. 特定のデータベースの ID キャッシュを無効にするには、「ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF」を使用します。

重要な注意事項:

これらのソリューションはいずれも完全にギャップがないことが保証されているわけではないことに注意することが重要です。 ID の増分には本質的に、同時トランザクションや潜在的な挿入エラーによるギャップのリスクが伴います。真にギャップのないソリューションを実現するには、他のアプローチを採用する必要があります。

以上が再起動後に SQL Server ID の増加が急激に増加するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート