UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

identityの値で大幅な誤差がでる範囲を理解する


identityの値で大幅な誤差がでる範囲を理解する


0.改訂履歴

  • 2002.08.14新規作成

1.はじめに

 このドキュメントでは,Sybaseで,identityを含むテーブルで,連番の誤差が発生する範囲について説明する.

 なお,使用しているSybaseは,RedHat Linux 7.2上で稼働しているSybase SQL Server 11.0.3.3である.

2.identityは大きく誤差が発生する可能性がある

  • Sybase ASEが異常終了した場合,次にINSERTしたデータのidentityの値が大きく狂う事がある.
  • たとえば,次のような感じ.
    • 1
    • 2
    • 3
    • 異常終了
    • 5001
    • 5002
    • 5003
  • これは,Sybase ASEの中で次に発行するidentityの値をメモリ内に持っているため,Sybaseの異常終了によってその値が失われる.
  • 失われるが,データベースの中では発行済みの値なので,次の値が飛んでしまう.

3.誤差の範囲について

  • identityの値で誤差がでる範囲は,次のサーバパラメータによって制御されている.

identity burning set factor

  • このパラメータのデフォルトの設定値を確認してみる.

1> sp_configure "identity burning set factor"
2> go
 Parameter Name                 Default     Memory Used Config Value Run Value   
 ------------------------------ ----------- ----------- ------------ ----------- 
 identity burning set factor           5000           0        5000         5000 
(return status = 0)
1>

  • この場合,絡むの桁数の0.05%(0.0005)の誤差がでる.
  • つまり,numeric(10,0) identityで定義しているフィールドだと,誤差は500,000となる.
  • このサーバパラメータを100と設定すると,誤差は10,000になる.
  • ただし,値をメモリに持たない分,処理が遅くなる.(微々たるものではないかなぁ?)



広告スペース
Google