programing

Oracle Sequence nextval이 앞뒤로 점프하는 숫자입니다.

powerit 2023. 9. 20. 20:49
반응형

Oracle Sequence nextval이 앞뒤로 점프하는 숫자입니다.

나는 새로운 테이블과 새로운 시퀀스를 만들었고, 나는 두 개의 C# 웹 서비스가 이 테이블에 동일한 쿼리를 사용하여 레코드를 삽입하려고 합니다.mySequence.nextval(네, 여러 번 확인했습니다. 둘 다 사용합니다.mySequence.nextval).

두 웹 서비스가 테이블에 행을 삽입하고 있지만,mySequence.nextval번호를 순서에 맞지 않게 돌려주는 것입니다.

다음은 기록이 생성된 방법입니다.PrimaryKey그것의 가치를 얻는 것은mySequence.nextval

1 21 22 23 2 3 24 25 4 27 28 5

지금까지 중복된 것은 없지만 왜?mySequence.nextval앞뒤로 뛰어다니면서? 그리고 내가 그것에 대해 걱정해야 할까요?

업데이트 : cache_size = 20으로 시퀀스가 생성됩니다.

데이터베이스에서 RAC(Real Application Cluster)를 실행하고 있다고 장담합니다.이 경우와 모든 기본 설정으로 시퀀스를 생성한다고 가정하면 예상되는 동작입니다.

기본 설정은 20개의 값을 캐시하는 것입니다.RAC 클러스터의 각 노드는 기본적으로 별도의 캐시를 가집니다.두 개의 노드 A와 B를 가진 클러스터가 있다고 가정할 때, 처음으로 a.nextvalA에서 요청되며, A는 1-20 값을 캐시하고 1 값을 반환합니다.다음 요청이 있을 경우nextvalB에서 만들어지며, B는 21-40 값을 캐시하고 21 값을 반환합니다.여기서 얻을 수 있는 값은 연결이 실행 중인 노드에 따라 달라집니다.

일반적으로, 이것은 문제가 되지 않습니다.시퀀스는 고유한 숫자를 생성합니다.일반적으로 숫자가 연속적일 필요는 없습니다.시퀀스 생성된 값으로 "처음" 또는 "마지막" 행을 결정하는 등의 작업을 수행하기 때문에 값을 순차적으로 반환해야 하는 경우에는ORDER순서대로 값을 반환하도록 강제하는 시퀀스를 만들 때 절.그러나 이는 반환되는 값을 동기화하기 위해 노드 간에 지속적으로 통신해야 하는 통신량을 증가시키기 때문에 RAC 데이터베이스에서는 성능에 부정적인 영향을 미칩니다."처음" 또는 "마지막" 행을 결정해야 하는 경우 일반적으로 다음 행을 추가하는 것이 좋습니다.date아니면.timestamp기본 키가 순차적으로 생성된다고 가정하지 않고 테이블에 열을 올리고 순서를 지정합니다.

문서에서...

시퀀스 번호는 테이블과 독립적으로 생성되므로 동일한 시퀀스를 하나 또는 여러 테이블에 사용할 수 있습니다.개별 시퀀스 번호는 최종적으로 롤백되는 트랜잭션에서 생성되고 사용되었기 때문에 생략되는 것처럼 보일 수 있습니다.또한 단일 사용자는 다른 사용자가 동일한 시퀀스에서 그림을 그리고 있다는 것을 인식하지 못할 수 있습니다.

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6015.htm#SQLRF01314

언급URL : https://stackoverflow.com/questions/24440832/oracle-sequence-nextval-is-jumping-number-back-and-forth

반응형