Accessシステムの運用が長くなると、利用者から次のような相談を受けることがあります。
- 最近動作が遅くなった
- 集計処理の時間が長い
- CSV取込に時間がかかる
- 原因が分からない
このような場合に有効なのが「パフォーマンスログ機能」です。
結論から言うと、Access VBAで処理時間を記録する仕組みを実装することで、どの処理に時間がかかっているのかを可視化できます。
近年は、CSV取込自動化、Excel連携、自動メール送信、エラー処理などの開発が増えていますが、それらの運用が始まると次に課題となるのが「性能管理」です。そこで今回はAccess VBAによるパフォーマンスログ機能の実装方法とCopilot活用術について紹介します。
- なぜ処理時間の計測が重要なのか
- パフォーマンスログとは
- ログテーブルを作成する
- 逆引き① 開始時間を取得したい
- 逆引き② 終了時間を取得したい
- 逆引き③ 経過秒数を計算したい
- 逆引き④ ミリ秒単位で計測したい
- 逆引き⑤ ログをテーブルへ保存したい
- 実践例① CSV取込時間の測定
- 実践例② Excel取込時間の測定
- 実践例③ クエリ処理時間の測定
- 実践例④ PDF出力時間の測定
- よくある分析パターン
- 実務活用例① 月次集計システム
- 実務活用例② CSV自動取込
- 実務活用例③ 利用者クレーム対策
- Copilot活用術① 計測コード生成
- Copilot活用術② SQL改善
- Copilot活用術③ ログ分析支援
- パフォーマンス改善のポイント
- エラー処理も組み込む
- AccessとCopilotの組み合わせが強力な理由
- まとめ
なぜ処理時間の計測が重要なのか
開発直後は問題なくても、運用開始後は次のような変化が起こります。
- データ件数増加
- ネットワーク負荷増加
- 利用者増加
- テーブル肥大化
すると処理時間が徐々に長くなります。
しかし、
遅い
という情報だけでは改善できません。
重要なのは、
どの処理が
何秒かかっているか
を把握することです。
パフォーマンスログとは
簡単に言うと、
処理開始
↓
処理終了
↓
経過時間記録
を行う仕組みです。
例えば
| 処理名 | 時間 |
|---|---|
| CSV取込 | 2秒 |
| 集計処理 | 8秒 |
| 帳票出力 | 1秒 |
という情報が取得できます。
ログテーブルを作成する
まずテーブルを準備します。
T_PERFORMANCE_LOG
| 項目名 | 内容 |
|---|---|
| ID | オートナンバー |
| 実行日時 | 日時 |
| 処理名 | 短いテキスト |
| 処理時間 | 数値 |
| ユーザー名 | 短いテキスト |
運用時の分析に利用します。
逆引き① 開始時間を取得したい
最も基本となるコードです。
Dim StartTime As Date
StartTime = Now()
処理開始時刻を保存します。
逆引き② 終了時間を取得したい
処理終了時です。
Dim EndTime As Date
EndTime = Now()
開始時間との差分を求められます。
逆引き③ 経過秒数を計算したい
実務で最も利用します。
Dim dblSec As Double
dblSec = _
DateDiff("s", _
StartTime, _
EndTime)
結果
5
なら5秒です。
逆引き④ ミリ秒単位で計測したい
より詳細に確認したい場合です。
Dim dblTime As Double
dblTime = Timer
処理終了時
Debug.Print _
Timer - dblTime
高精度な計測が可能です。
逆引き⑤ ログをテーブルへ保存したい
実際の運用で必要な処理です。
CurrentDb.Execute _
"INSERT INTO " & _
"T_PERFORMANCE_LOG(" & _
"実行日時,処理名,処理時間)" & _
"VALUES(" & _
"Now()," & _
"'CSV取込'," & _
"5)"
履歴として残せます。
実践例① CSV取込時間の測定
CSV取込前後を計測します。
Dim StartTime As Double
StartTime = Timer
DoCmd.TransferText _
acImportDelim, _
"", _
"T_DATA", _
"C:\Data\Test.csv"
MsgBox _
Timer - StartTime
CSVサイズ増加による影響を確認できます。
実践例② Excel取込時間の測定
Excel連携でも利用できます。
StartTime = Timer
DoCmd.TransferSpreadsheet _
acImport, _
acSpreadsheetTypeExcel12Xml, _
"T_DATA", _
"C:\Test.xlsx", _
True
Debug.Print _
Timer - StartTime
Excelファイルごとの傾向を把握できます。
実践例③ クエリ処理時間の測定
更新クエリに利用します。
StartTime = Timer
CurrentDb.Execute _
strSQL
Debug.Print _
Timer - StartTime
SQL改善の判断材料になります。
実践例④ PDF出力時間の測定
帳票システムでよく使います。
StartTime = Timer
DoCmd.OutputTo _
acOutputReport, _
"R_売上報告", _
acFormatPDF, _
strFile
Debug.Print _
Timer - StartTime
PDF生成速度を確認できます。
よくある分析パターン
ログが蓄積すると様々な分析が可能です。
遅い処理ランキング
SELECT
処理名,
Avg(処理時間)
FROM
T_PERFORMANCE_LOG
GROUP BY
処理名
月別推移確認
SELECT
Format(実行日時,'yyyy/mm'),
Avg(処理時間)
FROM
T_PERFORMANCE_LOG
GROUP BY
Format(実行日時,'yyyy/mm')
性能悪化を早期に発見できます。
実務活用例① 月次集計システム
月末になると件数が増加します。
ログ収集により、
月初 5秒
↓
月末 40秒
といった変化を把握できます。
実務活用例② CSV自動取込
大量データ取込では効果的です。
100件 1秒
1000件 5秒
10000件 50秒
将来の性能予測にも利用できます。
実務活用例③ 利用者クレーム対策
利用者から
遅い
と言われた場合も、
ログを見ることで客観的に判断できます。
Copilot活用術① 計測コード生成
Copilotへ次のように依頼します。
Access VBAで
処理時間計測機能を作ってください。
条件
・ログテーブル保存
・開始終了管理
・エラー処理あり
かなり実用的なコードを生成できます。
Copilot活用術② SQL改善
ログで遅い処理が見つかったら、
このSQLが遅い原因を分析してください
と依頼します。
インデックスや結合条件の改善案を検討する際に役立ちます。
Copilot活用術③ ログ分析支援
例えば、
CSV取込時間の推移から
問題点を分析してください
と依頼できます。
パフォーマンス分析の補助として活用できます。
パフォーマンス改善のポイント
インデックスを活用する
検索速度向上につながります。
不要なクエリを削減する
実行回数を見直します。
レコードセットを適切に利用する
不要な検索を減らします。
アーカイブ運用を行う
データ肥大化を防ぎます。
ログを継続取得する
継続的な監視が重要です。
エラー処理も組み込む
測定処理にもエラー対策を実装します。
On Error GoTo ErrHandler
'処理
Exit Sub
ErrHandler:
MsgBox Err.Description
安定運用には欠かせません。
AccessとCopilotの組み合わせが強力な理由
最近はCopilotによる支援により、
- VBAコード生成
- SQL作成
- ドキュメント作成
- エラー解析
- 性能分析
の効率が大きく向上しています。
特にパフォーマンス改善は経験が必要な分野ですが、Copilotを活用することで改善のヒントを短時間で得られるようになりました。
まとめ
Accessシステムは長期運用が前提になることが多いため、性能管理は非常に重要です。
パフォーマンスログ機能を導入することで、
- 処理時間の見える化
- 性能悪化の早期発見
- ボトルネック分析
- 利用者対応
が容易になります。
さらにCopilotを活用することで、
- 計測コード作成
- SQL改善
- ログ分析
- 保守性向上
を効率的に進められます。
システムが遅くなってから対策するのではなく、開発段階からパフォーマンスログを組み込んでおくことが、長期間安定して運用するための重要なポイントです。


コメント