2016-10-04 12 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

私たちは本当に問題を解決できませんでした。しかし、私たちの解決策は、最初に、(BulkCopyを使用して)db2データベースから一時的なSQLデータベースにデータ全体をコピーし、そこでそこから実際の新しいSQLデータベースにデータを移行することでした。このようにして、移行は約12時間から30分に短縮されました(BulkCopyは約5分かかる)。

基本的に同じコードと概念を使用して、db2からsqlへ、そしてsqlからsqlへの移行を行っていますが、何がdb2でパフォーマンスの低下を引き起こしているのかはわかりません。私は、IBMツールの実装ロジックにいくつかの欠陥があると考えています。

関連する問題