[SQL] 오라클 RAC 및 시퀀스
SQL오라클 RAC 및 시퀀스
나는 RAC와 11g에 RAC없이 10g에서 오라클 RAC 이러한 응용 프로그램을 마이그레이션 순서, 미안를 사용하는 다양한 데이터베이스 응용 프로그램을 가지고있다. 나는 주문 순서 및 간격이 허용되어 있어야합니다.
내가 주문 캐시 시퀀스에서 생각하고, 나는 성능에 미치는 영향이 무엇인지 알고하지는. 이 좋은 선택이 될 것입니다 생각하십니까? 시퀀스와 RAC에 대한 사용자의 경험은 무엇입니까?
감사,
해결법
-
==============================
1.정확히이 맥락에서 "주문"에 의해 무엇을 의미합니까?
정확히이 맥락에서 "주문"에 의해 무엇을 의미합니까?
기본적으로 클러스터의 각 노드는 일련 번호의 별도의 캐시가 있습니다. 노드 1 값 1-100 나눠 될 수 있으므로 노드 2 값 101-200 나눠된다. 단일 노드로부터 리턴 값은 순차적이지만 노드 2 세션 B는 세션에서 반환 된 값은 순서가 나타나도록 (107)의 값을 취득하는 동안 노드 1 세션 (A)는 15의 값을 얻을 수있다.
당신이 순서를 정렬 할 것을 지정하면 오라클은 이제 노드간에 새 시퀀스 값을 요청할 때마다 의사 소통을하기 때문에, 당신은 기본적으로 시퀀스 캐시의 목적을 물리 치고 있습니다. 즉 성능 오버 헤드의 상당한 금액을 만들 수있는 가능성이있다. 당신이 타임 스탬프의 종류와 순서를 사용하는 경우, 그 오버 헤드가 필요할 수 있습니다하지만 일반적으로 바람직하지 않습니다.
그것은 일부 응용 프로그램 및 다른 사람을위한 중요한 문제에 대한 측정 할 수 없을 작을 것이다 dependent-- 실제적인 측면에서 오버 헤드 차이는 매우 응용 프로그램이 될 것입니다. 는 RAC 노드의 수, 상호 연결의 속도, 얼마나 상호 연결 트래픽도 기여할있다. 이것은 주로 확장 성 문제이기 때문에 그리고, 실제 효과는 최대 본질적으로 비선형 얼마나 잘 응용 프로그램 저울 제한하는 것입니다. 응용 프로그램 핸들이 훨씬 더 두 배 이상 오버 헤드 것입니다 트랜잭션 볼륨을 두 배로.
당신이 NOCACHE, ORDER 또는 NOORDER의 검색을 지정하면 기본적 의미도 없습니다입니다. 당신이 ORDER를 지정하면, CACHE 또는 NOCACHE의 선택은 기본적으로 의미도 없습니다입니다. 그래서 캐시 NOORDER는 지금까지 가장 효율적으로, 다른 세 상대적으로 교환 할 수 있습니다입니다. 그들은 모든 노드 간 조정과 네트워크 트래픽이 분명히 잠재적 인 병목 시퀀스 값을 요청할 때마다 포함 할 것입니다.
일반적으로 오히려 타임 스탬프 순서를 제공하기 위해 순서에 의존하지 않고 실제 타임 스탬프를 저장하기 위해 테이블에 TIMESTAMP 열을 추가하기 위해보다 더 낫다 할 것이다.
-
==============================
2.요약
요약
캐시는 크게 심지어 RAC에서 ORDER를 사용하는 시퀀스의 성능을 향상시킬 수 있습니다.
그것은 빨리 NOORDER로 아직 아니지만, 의외로 가까이있다. 순서는 한 번에 노드 중 하나에서 사용되는 특히합니다.
테스트 케이스
SQL> create sequence cache_order cache 20 order; Sequence created. SQL> create sequence cache_noorder cache 20 noorder; Sequence created. SQL> create sequence nocache_order nocache order; Sequence created. SQL> create sequence nocache_noorder nocache noorder; Sequence created. SQL> set timing on SQL> declare 2 v_temp number; 3 begin 4 for i in 1 .. 100000 loop 5 v_temp := cache_order.nextval; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:08.44 SQL> declare 2 v_temp number; 3 begin 4 for i in 1 .. 100000 loop 5 v_temp := cache_noorder.nextval; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:07.46 SQL> declare 2 v_temp number; 3 begin 4 for i in 1 .. 100000 loop 5 v_temp := nocache_order.nextval; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:35.15 SQL> declare 2 v_temp number; 3 begin 4 for i in 1 .. 100000 loop 5 v_temp := nocache_noorder.nextval; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:35.10
테스트 케이스 노트
내 결과는 2 노드 RAC에 얻었다. 하나의 결과 집합이 표시,하지만 난 다른 데이터베이스에 여러 번 테스트 케이스를 실행하고, 거의 동일한 결과를 얻을 수있다.
나는 또한 다른 노드에서 동시에 테스트를 실행했습니다. 캐시 NOORDER보다 두 배 빠른 캐시 ORDER으로보다하지만 캐시는 여전히 크게 ORDER을 향상시킨다.
내가 그들에게 어떤 결과를 가지고 있지 않지만 나는 또한, 과거에 다른 환경에서 비슷한 동작을 나타났습니다.
왜?
ORDER를 사용하는 경우 캐시가 차이 많이 만들 것 내가 왜 이해가 안 돼요. 시간은 다수의 네트워크를 통해 데이터를 전송하는 시간과 비교되어야 무관 생성한다. 이 날 중 하나 오라클은 가난한 알고리즘을 사용하고, 또는 내 테스트 케이스가 잘못이라고 생각합니다. (누군가가 내 테스트 케이스에 문제를 찾을 수 있다면, 알려 주시기 바랍니다.)
또한,이 답변만을 시퀀스를 생성하는 시간에 대해 설명합니다. NOORDER를 사용하는 다른 혜택이있을 수 있습니다. 여기에 기술 된 바와 같이 예를 들어, 지수 경합을 감소시켰다.
-
==============================
3.시퀀스는 의미와 함께 주문 할 수 있도록 설계되어 있지 않습니다. 톰 카이트와 동일한 스레드에서 자신의 후속 응답의 일부에 의해 응답이 링크를 확인하세요.
시퀀스는 의미와 함께 주문 할 수 있도록 설계되어 있지 않습니다. 톰 카이트와 동일한 스레드에서 자신의 후속 응답의 일부에 의해 응답이 링크를 확인하세요.
from https://stackoverflow.com/questions/4866959/oracle-rac-and-sequences by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 매장 달 년 만에 MySQL의 데이터 형 (0) | 2020.06.03 |
---|---|
[SQL] 업데이트 타임 스탬프없이 업데이트 항목 (0) | 2020.06.03 |
[SQL] SQL 쿼리는 여러 날짜 범위 사이의 차이를 표시합니다 (0) | 2020.06.03 |
[SQL] 트위스트와 임시 데이터베이스 설계, (초안 행 VS 라이브) (0) | 2020.06.03 |
[SQL] 어떻게 내가 같은 테이블에서 2 개 행을 비교합니까 (SQL 서버) (0) | 2020.06.03 |