いろいろベンチ(5)

いろいろベンチHibernateの検索が異様に早いのはキャッシュのせいでは?との意見があったので,ちょっと条件を変えて再測定してみることにしました.

んで,その前に前回と同じ条件で測定してみようと思ったら,全然数字が違うでやんの.
冷静に考えたら,あれはMySQLを対象にした値であって,今はOracleを相手にしてたからだと気づく.
#実測者自身が数字に振り回されるいい例だな.


気を取り直してOracleで測定することに...
MySQLんときは1000回トライしたんですが,Oracleでは1000回だと時間がかかるので,100回に減らして測定.
その結果がこれ(単位は[msec]).

jdbcJDBCHibernateTorqueDbUtils
INSERT286549360832451
SELECT3,3563,6803,8974,1983,443
UPDATE2865357971,264547
DELETE2765618051,250562

そんでもって,いろいろベンチ(2)ん時の測定値はこう.

jdbcJDBCHibernateTorqueDbUtils
INSERT297564294964487
SELECT3,1723,5663,6413,9993,468
UPDATE2855357421,144536
DELETE2944957571,127475


...すんません.HibernateのSELECTが圧勝だったのはMySQLんときだけで,Oracleだと素のJDBCとそう変わらない結果でした(それはそれでスゴイんですけどね).
テキトウ言ってました.申し訳ないです.
#ついでに言うとMySQLはローカルに,Oracleはリモートにあります.


ちなみに,jdbcってのは,PreparedStatementを効率よく使いまわした場合の結果です.


ここからが新規分.
今までの測定はトランザクションの範囲が広かったんで,今度はトランザクションの範囲を狭めて測定してみることにしました.

つまり,

  • 100回INSERTしてからコミット

ではなく,

  • 「1回INSERTするごとにコミット」を100回

に変えてみました.INSERT以外もすべて同じふうにSQL一回実行する単位でコミットするようにしました.

JDBC, DbUtils, Torqueは,都度コネクションを取ってきてコミット.Hibernateの場合は,Sessionを都度オープンしてコミットってな具合.
#今までの例は,コネクションやSessionを使いまわしてたんで.

コードでいうとこんな感じやね.

===JDBC, DbUtils ===
for (int i = 0; i < count; i++) {
  Connection con = DriverManager.getConnection(...);
  con.setAutoCommit(false);
  // 1件INSERTする.
  con.commit();
  con.close();
}

===Hibernate===
for (int i = 0; i < count; i++) {
  Session session = sessionFactory.openSession();
  Transaction transaction = session.beginTransaction();
  // 1件INSERTする.
  transaction.commit();
  session.close();
}

===Torque===
for (int i = 0; i < count; i++) {
  Connection con = Torque.getConnection();
  con.setAutoCommit(false);
  // 1件INSERTする.
  con.commit();
  Torque.closeConnection(con);
}

んで,その結果はこう(単位[msec]).

jdbcJDBCHibernateTorqueDbUtils
insert-6,1638161,1225,894
select-10,17965,7354,68911,389
update-5,9467471,7085,919
delete-6,0956751,7086,285

JDBCDbUtilsよりHibernate,Torqueが早いのはコネクションプールの設定だろうか?
#設定した覚えは無いんだけど,ログ見るとプールしてるふうなんでデフォルトで持ってのかな.

Torqueは前回(バッチ処理風)とそう変わることがなかったんだけど,HibernateのSELECTはかなり変化してますなぁ.


うーむ,ここらへんの特性を理解するには,もっと深入りしないといかんか.
#そろそろ知恵熱が出てきた.


ps.
言うの忘れた.計上した測定値はそれぞれ10回測定した値の平均値だす.