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

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

DDD
リリース: 2025-01-23 14:46:13
オリジナル
867 人が閲覧しました

Why Are My SQL Server IDENTITY Increments Jumping After a Restart?

SQL Server IDENTITY 列の増分ギャップ: キャッシュについて

一意の行識別子の生成に使用される

SQL Server の IDENTITY 列は、予期しない動作を示す場合があります。サーバーの再起動後、増分は 1 つずつ増加するのではなく、数百単位にジャンプします。これはバグではなく、SQL Server 2012 で導入されたパフォーマンスの最適化の結果です。

SQL Server はパフォーマンスを向上させるために ID 値をキャッシュします。 このキャッシュには通常、1,000 個の int 値または 10,000 個の bigint/numeric 値が保存されます。キャッシュが使い果たされると、新しいバッチが割り当てられます。 ただし、サーバーを再起動すると、未使用のキャッシュされた値はすべて破棄されます。

観察されたジャンプは、最後の 3 桁が一定のまま (例、常に 306 で終わる)、初期割り当て 1,000 の後の残りのキャッシュ値を反映しています。

このキャッシュ メカニズムは IDENTITY シーケンスにギャップを作成しますが、主にパフォーマンスを向上させます。 頻繁に再起動が行われない限り、影響は最小限に抑えられます。 ただし、これを軽減するためのオプションがいくつかあります:

  • シーケンスの使用: IDENTITY 列を SEQUENCE オブジェクトに置き換えて、キャッシュ サイズをより細かく制御できるようにします。
  • トレース フラグ 272 を有効にする: 詳細な分析のために ID 値の割り当てのログを有効にします。
  • ID キャッシュの無効化: 特定のデータベースのキャッシュを無効にするには、ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF; を実行します。

これらの回避策を講じたとしても、同時挿入とトランザクションのロールバックによって依然としてギャップが生じる可能性があることを覚えておくことが重要です。絶対的なシーケンスの連続性を必要とするアプリケーションの場合は、UUID ジェネレーターやカスタム シーケンスの実装などの代替手段を検討してください。

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

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