2016-10-04 3 views
0

IBM의 ADO.NET 구현을 사용하여 AS400의 DB2 데이터베이스에 액세스합니다. 연결 문자열을 취하는 Db2Connection 객체가 있습니다. 모든 것이 꽤 표준 적이며 많은 예제가 있습니다. 모두 잘 작동합니다.ADO.NET을 사용하는 db2 (AS400) 액세스에 대한 연결 풀 제한

우리는 큰 마이그레이션을 수행해야하며 마이그레이션 작업은 데이터베이스에 대해 상당히 많은 쿼리를 수행해야한다는 점에서 문제가 있습니다. 우리의 마이그레이션은 병렬로 실행되는 여러 태스크로 나눌 수 있습니다. 불행히도 성능 향상은 선형 적이 지 않습니다 (두 배의 스레드 < 배속). 우리의 테스트는 병목 현상이 Db2Connection이라는 것을 보여줍니다. 우리는 풀링으로 뭔가를해야한다고 가정합니다. 우리는 DB2 데이터베이스에서 데이터를 읽고 SQL 데이터베이스에 데이터를 저장하기 만합니다.이 문제는 발생하지 않습니다 (DB2 읽기는 줄이면서 SQL 쓰기를 유지하면 속도가 크게 향상됩니다). 우리는 풀의 MinSize/MaxSize 값과 스레드의 양을 가지고 놀려고했지만 효과는 미미한 것처럼 보입니다 - 우리의 병렬 작업의 쿼리가 연속적으로 실행되는 것처럼 보입니다.

내 질문 : Db2Connection 풀에 대한 활성 연결 (열린 독자)에 대한 상한선이 있습니까? 연결 문자열에 MaxSize를 설정해도 아무런 영향이 없으므로 서버에 제한이 있습니까? 아니면 우리 쿼리를 조절할 수 있습니까?

+0

데이터베이스 성능이 동시 연결 수와 함께 선형 적으로 증가 할 것으로 예상되는 이유는 분명하지 않습니다. 병렬 작업이 진정으로 독립적 인 경우 기본 연결 격리 수준을 변경하는 것이 좋습니다. – mustaccio

+1

서버 측을 살펴보면'WRKACTJOB JOB (QZDASOINIT)'명령은 요청을 처리하는 작업을 보여줄 것입니다. 여러 개가 표시되어야합니다. 어떤 상태가 보입니까? 잠금 대기 (LCKW)는 문제를 나타냅니다. 아마도 @mustaccio와 같은 격리 수준이 제안되었을 것입니다. – Charles

답변

0

우리는 실제로 문제를 해결할 수 없었습니다. 그러나 우리의 솔루션은 먼저 전체 데이터를 db2 데이터베이스에서 임시 SQL 데이터베이스 (BulkCopy 사용)로 복사 한 다음 거기에서 "실제"새 SQL 데이터베이스로 데이터를 마이그레이션하는 것이 었습니다. 이 방법은 마이그레이션이 약 12h에서 30 분으로 빨라졌습니다 (BulkCopy는 약 5 분 소요).

기본적으로 동일한 코드와 개념을 사용하여 db2에서 sql로, 그리고 sql에서 sql으로 마이 그 레이션을하면 db2로 성능 손실을 일으키는 원인을 알 수 없습니다. IBM 도구의 구현 논리에 결함이 있다고 가정합니다.