응용 프로그램이 너무 많은 세션을 사용하는시기는 언제입니까?


9

OCI를 사용하여 Oracle과 통신하는 클라이언트 서버 응용 프로그램을 개발 중입니다. 과거에 우리 애플리케이션은 종종 세션을 무한 자원으로 취급했으며, 아마도 해당 Oracle 서버를 공유하는 다른 애플리케이션을 손상시킬 수있었습니다.

동료 개발자들에게 응용 프로그램이 다른 사람들과 잘 놀아주고 그런 자원 호그가 아닌 것이 중요하다는 것을 설득하려고합니다.

Oracle DBA는 어느 시점에서 애플리케이션이 세션을 과도하게 사용 (또는 남용)하고 있다고 생각합니까?

편집 : 현재 세션의 가장 큰 소비자 중 하나는 직접 경로로드를 사용하여 여러 (20-30) 테이블을 병렬로 대량로드하는이 구성 요소입니다.

답변:


10

모든 것과 마찬가지로, 그것은 달려 있습니다.

OCI를 사용하는 경우 클라이언트 / 서버 응용 프로그램을 개발한다고 가정합니다. 일반적으로 해당 상황의 데이터베이스가 공유 서버 연결 을 지원 하기를 원하며 응용 프로그램이 데이터베이스에 연결되면 공유 서버 연결을 요청하고 싶습니다. 이는 새 세션을 작성하기 위해 데이터베이스가 수행해야하는 작업량을 제한하여 응용 프로그램의 성능을 향상시킵니다. 서버에 더 많은 리소스를 사용할 수있게하는 부작용이 있습니다. 공유 서버 연결을 사용하면 쿼리를 공유 서버 프로세스로 보내야하기 때문에 데이터베이스가 후속 쿼리를 실행할 때 코드 경로가 더 길어 지지만 공유 서버 프로세스의 수가 합리적이면 큰 문제가되지 않습니다.

DBA가 자동 PGA 관리를 사용하지 않는 경우 여러 세션을 여는 것도 문제가 될 수 있습니다. 수동 PGA 관리를 사용하는 경우 PGA는 세션별로 구성되므로 각 세션 SORT_AREA_SIZE이 다른 PGA 구성 요소간에 정렬을 위해 별도의 할당을 할 수 있습니다 . 수동 PGA 관리를 사용하여 데이터베이스에서 많은 수의 세션을 생성하고 각 세션에서 PGA 사용을 최대화하려고 시도하면 RAM 서버가 쉽게 고갈되어 모든 사람에게 성능 문제가 발생할 수 있습니다. 그러나 Oracle 10.1 이상을 사용한다고 가정하면 자동 PGA 관리가 가능합니다. 이 경우 DBA는 a PGA_AGGREGATE_TARGET(또는 MEMORY_TARGET11g에 PGA 포함 )를 구성하고 데이터베이스는 모든 세션에서 집계 PGA가 제한되어 데이터베이스에 리소스가 부족하도록합니다.

데이터베이스가 공유 서버 연결을 지원하고 응용 프로그램이 공유 서버 연결을 가져오고 데이터베이스가 자동 PGA 관리를 사용하는 경우 대부분의 DBA는 얼마나 많은 세션을 생성하든 상관하지 않습니다.

이제 많은 세션을 작성하여 병렬로 더 많은 작업을 수행 할 수 있으면 세션 수 이상의 성능 문제가 발생합니다. 1000 개의 세션을 지원하도록 데이터베이스를 구성하는 것은 매우 쉽습니다. 예를 들어, 1000 개의 세션이 모두 데이터웨어 하우스에 대해 동시에 강력한 쿼리를 실행하는 경우 데이터베이스가 더미에서 죽지 않도록 구성하는 것이 훨씬 어렵습니다. 애플리케이션이 쿼리를 위해 데이터베이스에 사용 가능한 모든 리소스를 사용하는 경우 DBA는 Oracle Resource Manager 사용을 고려할 수 있습니다.다른 응용 프로그램 및 / 또는 다른 사용자의 우선 순위를 지정합니다. 예를 들어, CPU 사용률이 100 %가되면 집합의 애플리케이션이 CPU의 50 %를 차지하고 집합의 다른 애플리케이션은 25 %를, 나머지는 25 %를 갖도록 DBA가 Resource Manager를 구성 할 수 있습니다. . 보류중인 다른 요청이 없으면 응용 프로그램에서 CPU의 100 %를 모두 자유롭게 사용할 수 있습니다.

병렬로 작업을 수행하는 경우 병렬 처리 코드를 작성하는 것보다 오버 헤드가 적을 수 있으므로 명령문을 병렬로 실행하는 Oracle의 기능을 조사하는 것도 유용 할 수 있습니다. 예를 들어, 여러 세션을 열고 애플리케이션의 별도 스레드에서 각 명령문을 실행하는 대신 Oracle 병렬 쿼리를 사용하여 실행 한 명령문을 직렬로 제출 한 클라이언트 애플리케이션을 작성하는 것이 훨씬 쉽고 훨씬 빠를 것으로 예상됩니다. 오라클은 명령문을 실행하기 위해 병렬 쿼리를 사용하지 않았습니다. 병렬 쿼리를 사용하는 경우 데이터베이스가 생성되는 병렬 슬레이브의 수를 조정하여 데이터베이스가 특히 사용량이 많을 때 더 적은 병렬 슬레이브가 시작되고 데이터베이스가 상대적으로 유휴 상태 일 때 더 많은 병렬 슬레이브가 시작되도록 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.