문제

현재 우리는 동일한 상자에 MySQL 5.x가 설치된 8GB RAM이 있는 4개의 CPU Windows 상자를 사용하고 있습니다.우리는 응용 프로그램에 Weblogic 응용 프로그램 서버를 사용하고 있습니다.우리 애플리케이션의 동시 사용자 수는 200명을 목표로 하고 있습니다(물론 동일한 모듈/화면은 아닙니다).그렇다면 연결 풀에서 구성해야 하는 최적의 연결 수는 얼마입니까(최소 및 최대 수)(우리는 weblogic AS의 연결 풀링 메커니즘을 사용하고 있습니다)?

도움이 되었습니까?

해결책

이 질문에 대한 매우 간단한 답변이 있습니다.

연결 풀의 연결 수는 Weblogic에서 구성된 실행 스레드 수와 동일해야합니다..

이론적 근거는 매우 간단합니다. 연결 횟수가 스레드 수보다 적은 경우, 일부 스레드는 연결을 기다리고 있으므로 연결 풀을 병목 현상으로 만듭니다. 따라서 적어도 실행 스레드 (스레드 풀 크기) 숫자와 같아야합니다.

다른 팁

당신은 정말로 200을 의미 했습니까? 병발 사정 사용자 또는 200 만 로그인 한 사용자? 대부분의 경우 브라우저 사용자는 초당 1 페이지 이상의 페이지 요청을 수행 할 수 없습니다. 따라서 200 명의 사용자는 초당 200 개의 트랜잭션으로 변환됩니다. 그것은 대부분의 응용 프로그램에서 꽤 많은 수입니다.

그럼에도 불구하고 예를 들어 초당 200 번의 트랜잭션으로 가자. 각 프론트 엔드 (브라우저) TX는 완료하는 데 0.5 초가 걸리고 0.5 초 중 0.25는 데이터베이스에 소비됩니다. 따라서 Weblogic Thead 풀에서 0.5 * 200 또는 100 개의 연결이 필요하며 DB 연결 풀에서 0.25 * 200 = 50 연결이 필요합니다.

안전하기 위해 최대 스레드 풀 크기를로드 할 수있는 것보다 최소 25% 더 크게 설정합니다. 최소값은 최대의 작은 부분 일 수 있지만, 트레이드 오프는 새로운 연결을 만들어야하기 때문에 일부 사용자의 경우 더 오래 걸릴 수 있다는 것입니다. 이 경우 50-100 연결은 DB의 경우가 많지 않으므로 아마도 좋은 시작 번호 일 것입니다.

평균 트랜잭션 응답 시간이 무엇인지 파악하려면 평균 DB 쿼리 시간과 함께로드 시간이 단일로 표시되는 시간이되지 않기 때문에 성능 테스트를 수행해야합니다. 사용자.

사이징 연결 풀은 사소한 일이 아닙니다. 기본적으로 필요합니다.

  • 연결 사용법을 조사하기위한 메트릭
  • 연결을 사용할 수없는 경우 장애 조치 메커니즘

flexypool 올바른 연결 풀 크기를 파악하는 데 도움이됩니다.

다음 기사를 확인할 수 있습니다.

찾기 위해 다른 예상 워크 플로를 프로필해야합니다. 이상적으로, 연결 풀은 또한 대상 지리적 영역에서 현재 시간의 함수가되는 것이 일반적이기 때문에 최근 사용법에 따라 라이브 연결 수를 동적으로 조정합니다.

적은 숫자로 시작하여 합리적인 동시 사용자에게 도달 한 다음 크랭크를 사용하십시오. 연결 풀링 메커니즘이 나머지 소프트웨어만큼 확장성에도 중요한 것은 아니라고 생각합니다.

연결 풀은 실제 요구에 따라 성장하고 삭감 할 수 있어야합니다. 로깅 명세서 또는 JMX 감시를 통해 실행중인 시스템에서 분석하는 데 필요한 숫자를 기록합니다. "피크 감지 :"피크 감지 : x 이상의 새로운 항목을 Y 초 안에 할당해야했습니다 ","연결이 x 초 이상으로 풀 밖으로 나왔습니다 "와 같은 시나리오에 대한 알림을 설정하는 것을 고려하십시오. 실제 문제.

이것은 개별적으로 테스트하고 결정해야 할 것입니다. 정확한 답변을하는 것은 거의 불가능합니다. 당신의 상황을 위해 그들에게 친숙하지 않고.

이를 위해 하드 데이터를 얻는 것은 어렵습니다. 또한 언급하지 않는 여러 요인에 따라 다릅니다.

  • 동시 사용자 200 명이지만 데이터베이스 쿼리를 얼마나 많이 생성합니까? 페이지로드 당 10 개의 쿼리? 1 로그인 한 쿼리? 기타 등

  • 쿼리의 크기와 DB는 분명합니다. 일부 쿼리는 밀리 초로 실행되며 일부는 몇 분 안에 실행됩니다.

MySQL을 모니터링하여 "Show ProcessList"로 현재 활성 쿼리를 볼 수 있습니다. 이것은 피크 하중 하에서 DB에서 실제로 얼마나 많은 활동이 진행되고 있는지에 대한 더 나은 감각을 줄 수 있습니다.

거래량이 많은 금융 시스템에 대한 나의 경험을 바탕으로 예를 들어 처리하고 싶다면 초당 요청 1,000개, 그리고 당신이 가진 것은 32 CPU, 당신은 가지고 있어야합니다 1000/32 데이터베이스에 대한 연결 폴링을 엽니다.

내 공식은 다음과 같습니다.

RPS / CPU_COUNT

대부분의 경우 데이터베이스 엔진은 훨씬 적은 숫자로도 요청을 처리할 수 있지만 숫자가 낮으면 연결이 대기 모드에 있게 됩니다.

데이터베이스가 이러한 트랜잭션을 처리할 수 있어야 한다는 점을 언급하는 것이 매우 중요하다고 생각합니다(디스크 속도, 데이터베이스 구성 및 서버 성능을 기준으로).

행운을 빌어요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top