2015年12月17日

DB登録方法の違いによるパフォマンス比較

この投稿はDelphi Advent Calendar 2015の21日目の記事です。


同じコンポーネントを使っても、データベースに登録する方法は複数あります。
今回は、その方法の違いによるパフォーマンスの比較をしたいと思います。

コンポーネントは、FireDACを使います。Delphiは、10 Seattle、データベースは、PostgreSQLを使いました。
データは、日本郵便株式会社のサイトからダウンロードした郵便番号データを使用しました。
件数は、123907件です。項目は、新旧郵便番号と、県市区町村名のカナと漢字名で9項目のフィールド対象としています。
このデータをテーブルに追加する処理で確認します。

登録方法の比較は下記の3種類。すべて、TFDQueryを使います。

1)
ChashUpdateを使用し、全件Append->Post後、ApplyUpdatesする。

2)
Insert文を使い、ExecSQLで1件づつ全件登録します。

3)
同じく、Insert文を使用し、配列DMLを使います。
配列数は2パターン計測したものを示します。


計測値です。それぞれ2回行っています。

パターン1回目(hh:nn:ss.zzz)2回目(hh:nn:ss.zzz)
1) 00:04:23.610 00:06:49.251
2) 00:01:22.688 00:02:21.500
3)  ArraySize = 5000 00:00:07.126 00:00:07.031
3)  ArraySize = 10 00:00:28.047 00:00:41.969

配列DMLでArraSizeが大きいものが圧倒的に早いようです。
データ移行や、バッチ系の処理で、処理時間が気になるようなときは、配列DMLが有効なようです。

ArraySizeは、大きいほうがよいと言うこと上記からわかりますが、あまり大きくするとメモリのエラーが出ます。
最初、ArraySizeをデータ件数(123,907)にしたら駄目でした。1万件でも駄目で、上記5000件はOKでした。
その間は確認してません。
このあたりはパラメータの項目数などによって、調整が必要なようです。
ここのQ4に情報があるようです。いまいち意味がわからないですが、結局環境によって違うってことなのかな。

posted by しんくそふと at 16:26| Comment(0) | TrackBack(0) | 開発TIPS
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/170080380
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック