MS Access Tips/Sample and VBA and Blog customize etc...

暗号化したAccessファイルでクエリの実行が異常に重くなる原因とは

タイトル

Access2007以降のAccdbには「パスワードを使用して暗号化」という機能が追加されました。データ保護のためにこれを利用するシステムは多いと思います。「hatena の Microsoft Access 掲示板」で、この暗号化をすると「削除クエリ」が以上に重くなるという質問がありました。

難易度:

質問内容

ACCESS2010(32bit SP1) で「パスワードを使用して暗号化」すると、下記の処理がとても遅くなってしまい、解決方法をご存じの方がいらっしゃればご教示ください。

docmd.runsql "delete from xxx"
が8行ほど続きます。全て、同じaccdb 内のローカルのワーク用テーブルで、件数は全て10件程度。

暗号化する前は、1秒もかからず通過していた箇所なのですが、「パスワードを使用して暗号化」すると、6秒ほどかかってしまうようになりました。
そこでパスワードを解除すると、元の速度に戻ります。

何か対処、原因等をご存じの方がいらっしゃれば、ご教示頂ければ幸いです。

hatena の Microsoft Access 掲示板|ACCESS2010 でパスワードで暗号化するとクエリー等が遅くなる|ツリー表示 > スレッドNo.5592

当方の環境でサンプルを作製して検証

質問者さんのアップしてくれたファイルで速度を計測してみました。

ファイルの内容は、20個のテーブルの削除クエリを Docmd.RunSql で、実行するという単純なものです。

下記の関数を使って処理時間の計測をしました。

VBAでミリ秒以下の高精度で処理時間計測 - hatena chips

計測結果は下記です。

暗号化ファイル
109.3946
104.9006
102.9607
102.5406
100.9591

平均 104.15112ミリ秒

非暗号化ファイル
90.6178
91.5269
95.1453
92.5079
90.2403

平均  92.00764ミリ秒

暗号化すると10%ほど遅くなっていますが、時間にして0.01秒程度の差でした。

DAO や ADO のExecuteで実行してみても同様の結果でした。

質問者さんの環境では、10秒ほどかかるということでしたので、ちょっと異常ですね。

原因が判明

その後、質問者さんから、原因が判明したとの報告がありました。

原因は、なんと、マイクロソフト製のウイルス対策ソフト「Microsoft Security Essentials」ということでした。

対策も報告されてます。

該当のsccdb を入れているフォルダを、
エッセンシャルの設定で、「リアルタイム保護を除外するフォルダ」として登録すると、No Password と同様の一瞬の速度で動くようになりました。

このよう場合は、ウィルス対策ソフトは原因として疑うべきものですが、同じMS製同士で相性が悪いとは。

Accdbファイルが更新されるときに、「Microsoft Security Essentials」は復号化して、中身をチェックしているのでしょうか。

まとめ

「Microsoft Security Essentials」を常駐していて、暗号化したAccdbファイルの動作が重いということがあったら、「リアルタイム保護を除外するフォルダ」に登録するか、別のセキュリティソフトを検討するといいでしょう。

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/487-c836598f
該当の記事は見つかりませんでした。