2011-10-18 2 views
0

Java 응용 프로그램은 빈번하게 데이터베이스 쿼리를 실행합니다. 자바 프로세스와 오라클 프로세스가 같은 컴퓨터에서 실행될 때 이러한 무거운 쿼리는 CPU 또는 IO를 많이 소비하여 중요한 응용 프로그램 즉 사용자 요청이 응답하지 않게됩니다.사용자와 관련된 스레드의 응답

Oracle에서 트랜잭션 (또는 연결 또는 연결 풀)의 우선 순위를 지정하는 솔루션을 찾고 있습니다. Oracle의 Resource Manager 기능에 대해 알고 있지만 라이센스를 사용할 권한이 없습니다.

우선 순위 지정이 가능하지 않은 경우 트랜잭션이 중간에 일시 중지되거나 중단 될 수 있습니까? 우리는 리눅스, J2EE에서 실행되는

, SQL/

답변

1

내 2 센트 최대 절전 모드 : 레벨보다는 오라클에 의존 자바 (즉, 응용 프로그램)에 우선 순위를 제어하려고합니다. 이것은 스레드가 데이터베이스 요청을 사용하는 PriorityBlockingQueue을 사용하여 수행 할 수 있습니다.

+0

우선 순위 큐는 '최고 값'요소 렌더링에 사용되는 데이터 구조입니다. 스레드 우선 순위/스케줄링과는 아무런 관련이 없습니다. – seand

+0

@seand : PriorityQueue에 대해 생각하고 있습니다. 필자는 PriorityBlockingQueue에 대해 말하고 있습니다. PriorityBlockingQueue는 멀티 스레드 응용 프로그램 용으로 고안되었으며 java.util.concurrent 패키지의 일부입니다. – Adamski

+0

이것은 좋은 대답이지만 해결책은 아닙니다. 애플리케이션이 무거운 쿼리로 Oracle에 쿼리 할 때 처리 중에 중간에 사용자 요청이 있는지 여부를 알지 못하거나 –

1

나는 당신이 UI의 이벤트 발송 쓰레드 : 당신은 스레드 우선 순위 장난 시도 할 수 있습니다

에서 이러한 DB 작업을 시도하지 않을 것으로 신뢰하고 있습니다; DB 스레드에서 낮은 우선 순위를 사용하여 UI가 응답 성을 유지합니다. 그러나 이것은 효과적이지 않을 수 있으며 우선 순위 반전과 같은 다른 문제가있을 수 있습니다.

또 다른 아이디어는 짧은 스레드를 DB 스레드에 넣거나 yield()를 자주 시도하는 것입니다. 이들은 다른 동시 DB 클라이언트를 차단하지 않도록 DB 트랜잭션 외부에서 수행되어야합니다.

+0

애플리케이션 CPU 소모 스레드가 정확하게 이러한 방식으로 작동하지만 사용자 인터페이스 요청과 관련하여 오라클의 무거운 쿼리 처리 중간에 발생 –

+0

종종 DB는 자체 상자에 저장하는 것이 좋습니다. 오라클에서 CPU를 씹고있는 것이 정확히 무엇인지 알고 있습니까? 아마도 그면에서 할 수있는 일이있을 것입니다. Oracle 프로세스의 스레드 우선 순위를 낮출 수 있지만 그럴 수도 있습니다. – seand

0

오라클 쪽에서는 분명히 이 아니며은 오라클 서버 프로세스 우선 순위가 좋지 않을 것을 권장합니다. 주된 이유는 주어진 순간에 Oracle 프로세스가 SGA의 일부 요소에 잠금 장치 또는 래치를 가지고있을 수 있기 때문입니다. 프로세스의 우선 순위를 낮추고 잠금 및/또는 래치를 유지하면 다른 Oracle 서버 프로세스의 성능에 영향을 미칠 수 있습니다. 잠금/래치 홀더 뒤에 대기열이 있으므로 우선 순위가 낮습니다. CPU를 얻지 못했습니다.

오라클 자체는 특정 백그라운드 프로세스가 더 높은 우선 순위로 실행되도록 허용하지만 이는 설계 상 오라클에 기본 제공되는 기능입니다. 나는 개별 서버 프로세스의 우선 순위를 망쳐 놓지 않을 것이다.

마지막으로 Java 응용 프로그램 코드를 다른 서버로 이동하는 가능성을 실제로 살펴 보겠습니다. 그렇게하면 오라클과 자바는 희소 자원처럼 들리는 것을 놓고 경쟁하지 않습니다.

희망이 있습니다.

관련 문제