2016-09-21 3 views
0

私はSybase ASEを使用していますが、テーブルではJavaで計算した結果を保存します。この表には10個の列があり、1つの列の種類はINT(ID列ではありません)です。他の9列はすべてVARCHAR(50)です。はSybaseの挿入を加速するパラメータです

このテーブルにインデックスまたはトリガーはありません(実際はこのテーブルは実際には独立しています)。このテーブルに約160Kの行を挿入する必要があります。私はバッチごとに作業を分けようとしましたが、毎回10,000回の挿入が行われます。私は2つの異なる方法を使用しました.1つはSpringのJdbcTemplate.batchUpdate、もう1つはネイティブJDBC PreparedStatement.executeBatch apiです。

ただし、パフォーマンスに関する明確な優勝者はありません。両方とも10Kの挿入のために約25〜30秒かかります。

そして、私はそれがJDBCドライバに関係すると思っていたので、2つの異なるドライバ、jConnectとjTDSを試しました。挿入パフォーマンスには実質的な影響はありません。

最後に、私のテストでSybaseを別のデータベース、つまりPostgreSQLと比較することにしました。私は同じJavaコードを使用していましたが、驚くべきことに、PostgreSQLは10K挿入ごとに0.3秒しかかからず、Sybaseは25〜30秒(75〜100倍長く)かかりました。

DBAサポートチームは、Sybaseがエンタープライズのサーバにインストールされている間に、ローカルマシンにPostgreSQLがインストールされていることが原因であると説明しています。しかし、私はこの説明によってまったく確信していません。

Sybaseに挿入速度にかなりの影響を及ぼす構成があるかどうか知りませんか?または上記のシナリオに他の原因が考えられますか?

答えて

0

DBサーバーがローカルであるかどうかは、実際には大きな違いをもたらす可能性があります。この要素を削除するまでは、ローカルDBとの比較はほとんど意味がありません。

ただし、ASEの挿入パフォーマンスに影響する多くの側面があります。まず、全体的なメモリ構成(データキャッシュやプロシージャキャッシュなど)が小さすぎないようにしてください。インストール時のデフォルト設定をそのままにしておくと、失望する結果が保証されます。次に、役割を果たすことができるネットワークパケットサイズがあります。バッチサイズ(コミットする前に#rows)テーブルのロック方式 ASEサーバのページ・サイズ(サーバの作成時に選択する)もまた最小限のロギング・インサートを使用すると役立ちます(構成設定の変更が必要です)。特に、表に索引がない(UNIQUEまたはPK制約もありません)差をつけます:大きくなると、基本的に挿入物の方が優れています。

1

sybaseの最後に表示される遅延は、チェックする必要のある多くの要因と、ローカル・マシン上のそれと同じでもない別のデータベースとの比較が原因です。

開始するには、ネットワーク待ち時間とsybaseデータベースで使用されている記憶域を確認する必要があります。挿入する表のsybaseサーバー構成、ページ・サイズおよびロック・スキームを確認する必要があります。また、データを挿入する際にサーバーの基本的なヘルスチェックを行う必要があります。データの挿入に2通りの方法を使用したことに言及したので、システムにインストールしたsybaseクライアントに合わせてこれらの2つの方法が更新されているかどうかを確認することが重要です。

これをまとめると、sybaseインスタンスをブロックするという単純な問題であるか、またはすぐに書き込めないストレージに関連する可能性があります。 sybaseが適切に設定されていると、パフォーマンスは非常に良いでしょう。

関連する問題