2009-05-06 4 views
1

읽기/쓰기가 많은 Oracle 10g 테이블에서 모든 CPU를 사용하여 "래치 라이브러리 캐시"라는 동시성을 인용 할 때가끔 커다란 스파이크가 발생합니다.오라클 테이블에 과도한 동시성이있을 때 성능 튜닝 방법

데이터베이스 내의 부하를 줄이기 위해 어떤 방법을 사용할 수 있습니까? 우리는 무료 목록에 대한 것들을 보았고 그것들을 증가 시켰습니다. 다른 의견.

답변

4

"래치 라이브러리 캐시"는 I/O가 주어진 테이블에서 하이인지 여부와 관련이 없습니다. 이것은 구문 분석 된 SQL 문의 캐시에 대해 래치를 기다리고 있음을 의미합니다. 그래서 이러한 스파이크가 보일 때마다 비정상적인 수의 하드 파싱이 발생합니다.

가장 일반적인 이유는 바인드 변수를 사용하지 않아 다른 값을 가진 많은 유사한 명령문을 하드 구문 분석하기 때문입니다. E.G.

SELECT name FROM emp WHERE empid = 3; 

과 같은 명령문을 실행하고 쿼리가 실행될 때마다 리터럴 ID 값을 변경하여 새 명령문이 구문 분석되도록합니다. 리터럴을 바인드 변수로 바꾸고 각 실행에 대해 새 값을 바인딩하는 것이 좋습니다. 이를 정확히 수행하는 방법은 데이터베이스에 대해 명령문을 실행하는 데 사용하는 언어/라이브러리/환경에 따라 다릅니다.

+0

변수를 JDBC의 preparedstatements를 통해 바인딩하고 있습니까? 아니면 다른 것입니다. – Sathya

+0

예, PreparedStatement는 방법입니다. 'SELECT name FROM emp WHERE empid =?'와 같은 명령문 텍스트를 준비 (즉 구문 분석)하고 각 실행 전에?로 표시된 명령문 매개 변수에 원하는 값을 바인드합니다. –