今回試してみたこと。
<環境>
<手順>
- OS:Win7 CPU:Core i7 860 Memory:8GB Storage:Intel SSD(MLC)
- 500万件のレコードから約5000件抽出し日付フィールドでソート
- フィルタフィールドとソートフィールドは、重複ありインデックス
この手順を、
- OpenRecordSetを実行するプロシージャ25回繰り返し
- このプロシージャを手動で4回繰り返し
- いったん閉じて再び開いて同様に繰り返す。
- 合計200回OpenRecordSet
で計測
- プロセッサの関係の設定で1仮想コアと8仮想コア
- 同マシン上のVirtualPC(32bit/1コア)
ちょっと次に続きそうな結果になった。
こんな感じのコード
Option Compare Database Option Explicit Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long Sub test0() Dim i As Long, Counts As Long For i = 1 To 25 Counts = test CurrentDb.Execute "INSERT INTO tblResults ( TickCount, Core ) values (" & Counts & ", 1);" Next Debug.Print Now End Sub Function test() As Long Dim dbs As DAO.Database, rs As DAO.Recordset, i As Long Set dbs = CurrentDb i = GetTickCount Set rs = dbs.OpenRecordset("select * from tbl01 WHERE Code = 1000 Order By FDate desc;") Do Until rs.EOF rs.MoveNext Loop rs.Close: Set rs = Nothing dbs.Close: Set dbs = Nothing test = GetTickCount - i End Function
まずは結果。なんだかなぁ
片対数グラフなのでグラフの見た目以上に差がある。
マルチコアだと遅いってことなのだろうか、VirtualPCが一番成績が良くて8コアが一番不安定という。。。。VirtualPCはシステムドライブに配置していないから全体的に成績がよいのは解るけど安定しているのはなんでだ。
それよりもピーク値が同じ値っつーのが何かを示唆しているのだろう。
厳密な測定をしているのではないけど、Hyper-V上の仮想PCでコア数を1とした場合と2にした場合も同じようになる感じ
まだ試しきれてないけど、ほぼ同じテストでこんな途中経過もある。
あくまでも、俺調べだから必ず同じ結果になるとは言えない。でも傾向は同じだと思う。
もうちょっと確認していきましょかね。何となくだが64bitであることが要因なのかもしれん。ソート処理なんだよなぁ。
0 件のコメント:
コメントを投稿