Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

メジャーRDBは快適(?)

.net.言語で元データがクライアントにあり、RDBに追加する時、
接続.open
   Begin.Transacton()
   while(!eof())
   {
     1件read().
     insert 文発行
    }
   Commit()
切断

とするのが一般的です。(バルクInsertにすべき...と突っ込まないでね。)
Transactionを噛まさず、都度Commitすれば、遅くなるのは想像できます。その差を知りたくてテストしてみました。
郵便番号のCSVファイルを使ってのテストです。例によって、3000件でのテストなので、荒っぽい結果ですが、傾向は判ります。
規定で、具体的に数値を公表することはできないので傾向の報告になります。
私の環境下で、操作可能な RDBは SQLServer2008,MDB, DB2(9.5),Oracle(10g), MySQL(5.1),PostgreSQL(8),SQLite(3),Firebird(2)の8種類あります。
MySQLはテーブルモード(Heap,InnoDB,MyISAM)によって、「トランザクションの有効無効がある」とあるのですが、差違は無いようです。
 
             都度コミット  トランザクション下
・SQL Server    12秒              9秒
DB2            12秒              9秒
MDB            12秒             12秒    差なし:
ORACLE         12秒             10秒
MySQL5_HEAP    98秒             10秒
MySQL5_InnoDB  99秒             10秒
MySQL5_MyISAM  93秒             10秒
PostgreSQL8    12秒             10秒
SQLite3       177秒              9秒
Firebird2      18秒             12秒

興味深い結果となりました。 MDBは、Transaction効果は薄いらしい。
MySQLは 非トランザクションだと、異様に遅くなる。
トランザクション下では、Firebirdが少しコスト高ですが、他は差が小さい。
Oracle/SQL Serverはメジャーだけに、速度面も優位ですね。
私的には、 SQLiteやMySql_Heapがもっと快速に動くものと期待していたのですが、期待外れ。コスト安なら、活用すべく習得しようと思っていたのですが、
MSSQL/Oracleで十分なようです。
学習意欲が萎えたのは内緒です。
#題字に快適と書きましたが、もっと早くなって欲しいです。

投稿日時 : 2009年11月17日 0:36

Feedback

# re: メジャーRDBは快適(?) 2009/11/17 8:12 中 博俊

高いデータベースはチューニングが効いたりしますしねー
それ次第の部分はあるけどSQLiteの都度コミット吹いた

# re: メジャーRDBは快適(?) 2009/11/17 11:54 こあら

> SQLiteやMySql_Heapがもっと快速に動くものと期待していたのですが

もしAutoCommit=Onなら、トランザクションはDBMSが管理しますよね?
その場合、パフォーマンスの観点からすれば「都度Commit」は発行してはいけなのではないでしょうか。

# re: メジャーRDBは快適(?) 2009/11/17 17:43 みきぬ

> コスト安なら、活用すべく習得しようと思っていたのですが、
> MSSQL/Oracleで十分なようです。

ここがわからなかったので、
「速度的なデメリットが許容範囲なら、活用すべく習得しようと思っていたのですが、
 実際はそうじゃなかったので、仕方ないから MSSQL/Oracle を使おう」
と脳内変換しましたが、あってますか?

# re: メジャーRDBは快適(?) 2009/11/18 0:42 Ognac

>その場合、パフォーマンスの観点からすれば「都度Commit」は発行してはいけなのではないでしょうか。
MySqlの場合は、" SET AUTOCOMMIT=0";で autocommitを解除できると思いますが、解除後でも9.8秒前後でした。
こころもち、早いかも知れません。が9~10秒代で、いずれのDBも横一線の感じです。

>脳内変換しましたが、あってますか
文質不良でしたね。ごめんなさい。そうです。MsSQLやOracleの半分以下の早さが出ると勝手に期待していました。
「早い。早い」との評判を聞くものですから、早ければ、ワークテーブルとして使えるのでは考えた次第。
でも、速度的に差がなければ、メインのRDBで統一するほうが、素直かなと。

タイトル
名前
Url
コメント