2017-12-11 20 views
0

우리는 쿼리 빌더로 Knex를 사용하고 Oracle 11.2 Database에는 풀 관리자를 사용합니다.Knex/generic-pool 및 Oracle을 사용하여 연결 풀을 관리하는 방법

우리가 직면 한 문제는 Knex/generic-pool이 연결을 축적하기 시작하고 재활용 할 수 없다는 것입니다.

Knex/Generic Pool에 몇 가지 매개 변수를 전달하여 어떤 지점 이후에 연결을 끊으려고했으나 효과가없는 것처럼 보입니다.

Packges 버전 :

  • Knex : v0.13.0
  • Oracledb : v1.13.1
  • 일반 수영장 : v2.5.4

Knex 구성 :

{ 
    client: 'oracledb', 
    connection: { 
     user: DB_USER, 
     password: DB_PASSWORD, 
     host: `${DB_HOST}:${DB_PORT}`, 
     database: DB_NAME 
    }, 
    debug: true, 
    fetchAsString: ['number', 'clob'], 
    acquireConnectionTimeout: 843600000, 
    pool: { 
     min: 2, 
     max: 150, 
     acquireTimeoutMillis: 100000, 
     evictionRunIntervalMillis: 120000, 
     maxWaitingClients: 100, 
     idleTimeoutMillis: 100000 
    } 
} 

Openshift print with environment variable DEBUG="Knex:*" showing a lot of clients waiting for connection

+0

일반적인 풀에는 몇 가지 좋은 기능이 있지만 12.2 클라이언트 (11.2 DB에 연결하는 데 사용할 수있는) 가벼운 노드 - oracledb 연결 풀 ping과 같은 것들을 잃어 버릴 것입니다. 팬과 AC. –

답변

0

knex 0.14.2를 사용해보십시오. 풀 관련 문제가 수정되었습니다. 또한 트랜잭션이 생성/커밋되거나 롤백 될 때 디버그 정보를 추가하십시오. 열린 트랜잭션은 풀에서 연결을 가져오고 트랜잭션이 종료 될 때까지 풀을 릴리스합니다. DEBUG = knex : * 환경 변수를 설정하여 풀 및 트랜 션션 실행중인 앱에 대한 정보를 얻을 수 있습니다.

+0

Thks, 오늘부터 우리 공인 환경에서 Knex 0.14.2로 테스트하고 있습니다. 공유 할 데이터가 많을 때 답장을 보내드립니다. –

+0

Knex 0.14.2로 시도했지만 도움이되지 않았습니다. 분명히 풀 관리자는 얼마 후 연결을 재활용 할 수 없습니다. –