今回試してみたこと。
<環境>
<手順>
- 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 件のコメント:
コメントを投稿