2011/07/16

access2010 遅いのではないのか? -1-

ちょっと整理して考えてみている。
今回試してみたこと。
<環境>
  • 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 件のコメント: