0

JDBC ドライバー 4 を使用して、Java で SQL Server データベース内の 2 つのビューから別の SQL Server データベースの異なるテーブルにデータをアーカイブするアプリケーションを作成しました。私が懸念しているのは、アプリケーションのパフォーマンスです。

20 件のメッセージとその添付ファイル (名前とリンク情報のみ) をアーカイブするのに約 13 分かかります。合計で、データは 20 列で構成されます。

コラムの概要:

smallint(6)
datetime
int(11)
varchar(255)
varchar(100)
varchar(100)
varchar(100) 
text
int(11) 

int(11)
varchar(255)
varchar(255)
int(11)

パフォーマンスを向上させる方法について、誰かが私に指針を教えてもらえますか? 上記のランタイムが許容できるかどうか教えてください。(これは状況に依存することはわかっています。アプリケーションは POC であることを意図しています)。

私がチェックアウトしたもの(編集)

自動コミットに関するいくつかの投稿を読んだことがありますが、これを無効にしてパフォーマンスを向上させることができると言っています。最初にJava tutsをチェックして、次のリンクを見つけました

http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#disable_auto_commit

記事では commit について説明しています。例の 1 つで for ループを確認すると、コミットは各更新の最後に使用されますが、これは論理的です。しかし、自動コミットを使用することと、挿入ごとにコミットすることの違いは何ですか?

アーカイブデータベースへの挿入に準備済みステートメントを使用しています。

デバッガ使用後の情報

Eclipse デバッガーを使用して、ボトルネックがどこにあるかを特定しました。

コードは次のフラグメントでハングします。

        while(rs.next())
        {
            rows = new ArrayList();
            for(int columnCount = 1; columnCount <= rsmd.getColumnCount(); columnCount++)
            {
                Object fields = rs.getObject(columnCount);
                rows.add(fields);
            }
            table.add(rows);
            this.table = table;
        }

このメソッドを使用して、ResultSet からの情報にアクセスしやすくしています。

これを回避する方法はありますか?

4

1 に答える 1

0

測定し、分離し、改善します。

すべてのパフォーマンスの向上はサイクルを経ます。問題は、分離ではなく高すぎるレベルで測定しているため、何を改善すればよいかわからないことです。このワークフローの欠如により、状況に当てはまる (または当てはまらない) 「考えられる問題」を探しています。

アプリケーションに費やす時間とデータベースに費やす時間は? あなたのアプリケーションはいくつのリクエストを行いますか? それらの要求はカテゴリに分類されますか? それらのいずれかがかなりの時間を費やしていますか? アプリケーションがリクエストを作成し、レスポンスを処理します。リクエストの作成、返信の待機、またはレスポンスの処理に最も多くの時間が費やされていますか?

アプリケーションの速度を低下させている原因がわかれば、どこを見ればよいかがわかります。

また、クエリはコミットしません。更新、挿入、および削除がコミットされます。

于 2012-06-26T14:26:58.137 に答える