#34 DAOのレジストリチューニング(Threads)

結論
Jetデータベースエンジンは、割り当てスレッド数を増やすことによってパフォーマンスが向上する可能性がある。しかし多ければ多いほどよいということではないので、注意が必要。またデフォルト値でもパフォーマンスが悪いというほどのことはないので、基本的にはデフォルト値のままでもよさそうである。

「#33 DAOのレジストリチューニング(MaxBufferSize)」と同様に、今度は同じエントリにある「Threads」というレジストリ項目を変えることによるパフォーマンスの違いをチェックしてみます。

ThreadsはJetデータベースエンジンで使用されるスレッド数を設定する項目です。また「スレッド」とは、Windowsがアプリケーションの処理を実行する際のCPUレベルの最小処理単位のことです。簡単にいえば、ある1つの仕事を分担させる作業者の数と考えてよいでしょう。そう考えると、その数が多ければ多いほど処理が速く行なわれるように思われるかもしれませんが、あくまでも1つのCPUという限られた資源が仮想的に並列処理しているだけなので、必ずしもパフォーマンスが上がるわけではありません(スレッド管理の時間などのため)。


さて、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0にあるこのキーの値をみてみると、デフォルトでは「3」という数字が設定されています。今回は、この値を「3」、「6」、「9」というように変化させて、処理時間がどのように変わるかを調べてみます。


テストに使うプログラムは、#33と同じ下記のようなものです。また、それぞれの条件で数回このプログラムを実行して、その平均時間をテスト結果とします。


Dim dbs As Database
Dim rst As Recordset
Dim varDummy As Variant

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("顧客マスタ")

With rst
  Do Until .EOF
    varDummy = !顧客ID
    varDummy = !会社名
    varDummy = !顧客の氏名
    varDummy = !顧客のシメイ
    varDummy = !支社名
    varDummy = !請求先住所
    varDummy = !市区町村
    varDummy = !都道府県
    varDummy = !郵便番号
    varDummy = !地域
    varDummy = !顧客の部署名
    varDummy = !電話番号
    varDummy = !内線番号
    varDummy = !FAX番号
    varDummy = !電子メールアドレス
    varDummy = !備考
    .MoveNext
  Loop
  .Close
End With



その結果は以下のとおりです。
スレッド数 平均実行時間
3(デフォルト値) 7.38 秒
7.24 秒
7.60 秒
ご覧のように、「6」に設定したときが最速で、「9」にすると逆に劣化していることが分かります。今回この「6」という数字は適当に決めたものであり、それが具体的にどのような意味合いを持っているかは何ともいえませんが、『スレッド数を増やすことによってパフォーマンスが向上する可能性がある。しかし多ければ多いほどよいということではない』といえそうです。しかしながら、その時間的差異は微々たるものであり、デフォルト値でも十分なパフォーマンスが得られるため、この設定値は基本的にデフォルトのままでよさそうです。


※Jetデータベースエンジンのレジストリエントリには、これ以外にも多くの項目があります。そのすべてがパフォーマンスに関連したものではありませんが、Excel等の外部ファイルのリンクやインポートに関わる設定項目などもありますので、いろいろその設定変更を研究してみる価値はあると思います。
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved