복붙노트

[SQL] 오라클 RAC 및 시퀀스

SQL

오라클 RAC 및 시퀀스

나는 RAC와 11g에 RAC없이 10g에서 오라클 RAC 이러한 응용 프로그램을 마이그레이션 순서, 미안를 사용하는 다양한 데이터베이스 응용 프로그램을 가지고있다. 나는 주문 순서 및 간격이 허용되어 있어야합니다.

내가 주문 캐시 시퀀스에서 생각하고, 나는 성능에 미치는 영향이 무엇인지 알고하지는. 이 좋은 선택이 될 것입니다 생각하십니까? 시퀀스와 RAC에 대한 사용자의 경험은 무엇입니까?

감사,

해결법

  1. ==============================

    1.정확히이 맥락에서 "주문"에 의해 무엇을 의미합니까?

    정확히이 맥락에서 "주문"에 의해 무엇을 의미합니까?

    기본적으로 클러스터의 각 노드는 일련 번호의 별도의 캐시가 있습니다. 노드 1 값 1-100 나눠 될 수 있으므로 노드 2 값 101-200 나눠된다. 단일 노드로부터 리턴 값은 순차적이지만 노드 2 세션 B는 세션에서 반환 된 값은 순서가 나타나도록 (107)의 값을 취득하는 동안 노드 1 세션 (A)는 15의 값을 얻을 수있다.

    당신이 순서를 정렬 할 것을 지정하면 오라클은 이제 노드간에 새 시퀀스 값을 요청할 때마다 의사 소통을하기 때문에, 당신은 기본적으로 시퀀스 캐시의 목적을 물리 치고 있습니다. 즉 성능 오버 헤드의 상당한 금액을 만들 수있는 가능성이있다. 당신이 타임 스탬프의 종류와 순서를 사용하는 경우, 그 오버 헤드가 필요할 수 있습니다하지만 일반적으로 바람직하지 않습니다.

    그것은 일부 응용 프로그램 및 다른 사람을위한 중요한 문제에 대한 측정 할 수 없을 작을 것이다 dependent-- 실제적인 측면에서 오버 헤드 차이는 매우 응용 프로그램이 될 것입니다. 는 RAC 노드의 수, 상호 연결의 속도, 얼마나 상호 연결 트래픽도 기여할있다. 이것은 주로 확장 성 문제이기 때문에 그리고, 실제 효과는 최대 본질적으로 비선형 얼마나 잘 응용 프로그램 저울 제한하는 것입니다. 응용 프로그램 핸들이 훨씬 더 두 배 이상 오버 헤드 것입니다 트랜잭션 볼륨을 두 배로.

    당신이 NOCACHE, ORDER 또는 NOORDER의 검색을 지정하면 기본적 의미도 없습니다입니다. 당신이 ORDER를 지정하면, CACHE 또는 NOCACHE의 선택은 기본적으로 의미도 없습니다입니다. 그래서 캐시 NOORDER는 지금까지 가장 효율적으로, 다른 세 상대적으로 교환 할 수 있습니다입니다. 그들은 모든 노드 간 조정과 네트워크 트래픽이 분명히 잠재적 인 병목 시퀀스 값을 요청할 때마다 포함 할 것입니다.

    일반적으로 오히려 타임 스탬프 순서를 제공하기 위해 순서에 의존하지 않고 실제 타임 스탬프를 저장하기 위해 테이블에 TIMESTAMP 열을 추가하기 위해보다 더 낫다 할 것이다.

  2. ==============================

    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. ==============================

    3.시퀀스는 의미와 함께 주문 할 수 있도록 설계되어 있지 않습니다. 톰 카이트와 동일한 스레드에서 자신의 후속 응답의 일부에 의해 응답이 링크를 확인하세요.

    시퀀스는 의미와 함께 주문 할 수 있도록 설계되어 있지 않습니다. 톰 카이트와 동일한 스레드에서 자신의 후속 응답의 일부에 의해 응답이 링크를 확인하세요.

  4. from https://stackoverflow.com/questions/4866959/oracle-rac-and-sequences by cc-by-sa and MIT license