높은 속도로 SQL 2005 Server 데이터베이스 (XP SP3)에 데이터를 삽입하는 프로그램을 실험하고 있습니다. (이것은 타이밍 데이터를 수집하기위한 것이기 때문에 디자인의 여러 측면을 평가할 수 있습니다).SQL Getdate의 정밀도?
내 기본적인 셋업은 같은 테이블에 데이터를 삽입 관련된 다음 (그냥 페이로드 필드를 지정하는 SP 사용) : 두 날짜 필드뿐만 아니라 그들에 UNIQUE 제약 조건을 가지고
create table data
(
Id int PRIMARY KEY Identity,
payload datatime not null,
inserted datetime default (getdate()) not null
)
주 .
클라이언트 프로그램에서 필자는 .Net DateTime.Now 값의 정밀도에 문제가 있었고 (따라서 스레드도 잠자기 상태 였기 때문에) 페이로드의 고유 한 제약 조건을 위반하는 등의 엄격한 루프에서 SP를 호출했습니다. 나는 스톱워치 변수, Thread.Sleep()의 비트와 "페이로드"데이터를 수동으로 생성하여 SQL DateTime 필드 (3.3 mS)의 해상도를 위반하지 않도록했습니다.
그러나 삽입물은 5mS에서 10mS 사이의 속도로 생성됩니다. 고유 한 키 위반에 대해 행이 정기적으로 거부되는 SQL 쪽의 "삽입 됨"필드에 문제가 발생하기 시작했습니다. 이 문제가 사라지는 것은 15 번이나 그 이상으로 삽입 속도를 늦추는 경우에만 해당됩니다. 이 속도는 .Net DateTime.Now (내가 어딘가에 게시물에 16mS를 읽었습니다)와 같은 정밀도 문제와 유사하므로 SQL Getdate() 함수의 실제 정밀도가 무엇인지 궁금합니다.
그래서 누군가 GetDate()를 뒷받침하는 것을 말해 줄 수 있으며 .Net DateTime.Now 값과 동일한 소스에 묶여 있을까요? 그리고 그것으로부터 어떤 종류의 정밀도를 기대해야합니까?
SQL 2008 서버의 DATETIME2 형식에 대해 알고 있으므로 해당 시스템의 GetDate()에 대한 정밀도가 무엇인지에 대한 질문이 제기됩니다.
왜 삽입 된 열에 고유 제한 조건이 필요합니까? 식별 열에는 삽입 된 순서가 표시됩니다.나는 데이터베이스 생성 시간이 동시 활동으로 인해 삽입 요청을 처리 할 수있는 빈도의 자연적 변화에 취약 할 것이라고 추측합니다. 이전 삽입이 페이지 분할을 야기했는지 여부와 상관없이 어쨌든 그렇게 의미를 가질 수는 없습니다. 그런 제약을 보증하라. –
@martin .. 유일성과 질서가 같은 것은 아닙니다. 같은 시간에 두 개의 행을 삽입 할 수 없다는 생각에 빠져있었습니다. 그러나 getdate의 정밀도가 잘못되었습니다. 그러나 나는 내가하고있는 일이 세상에서 가장 똑똑한 일이라고 제안하지는 않습니다! –