メタデータのキャッシュ
概要
uroboroSQLでは、パフォーマンスを向上させるために、各種メタデータをキャッシュする仕組みを提供しています。
開発環境やテスト環境など、メタデータの変更が頻繁に発生する環境では、必要に応じてキャッシュをクリアすることができます。
キャッシュの種類
uroboroSQLでは以下の3種類のメタデータキャッシュが管理されています。
TableMetadataキャッシュ
DefaultEntityHandlerで管理されるテーブルメタデータのキャッシュです。
特徴
| 項目 | 内容 |
|---|---|
| キャッシュ対象 | エンティティクラスとテーブル構造の対応情報(カラム名、データ型、主キーなど) |
| キャッシュキー | 接続情報(スキーマ・カタログ)とエンティティクラスの組み合わせ |
| キャッシュタイプ | LRUキャッシュ(ConcurrentLruCache) |
| デフォルトサイズ | 30エントリ |
サイズの変更
システムプロパティ uroborosql.entity.cache.size でキャッシュサイズを変更できます。
// JVM起動時のオプション
-Duroborosql.entity.cache.size=1002
キャッシュサイズを変更する際の注意点
キャッシュサイズを大きくすると、キャッシュヒット率が向上しパフォーマンスの改善が見込めます。ただし、その分メモリ消費量が増加します。
キャッシュサイズを変更する際は、メモリ使用量を監視し、アプリケーションへの影響がないことを確認してください。
TableMetadataキャッシュのクリア
データベースのテーブル構造(カラムの追加・削除・変更)を行った場合、TableMetadataキャッシュに古い情報が残る可能性があります。
対処方法: DefaultEntityHandler.clearCache() の実行、またはアプリケーションの再起動
TableMetadataキャッシュはDefaultEntityHandlerの静的フィールドとして保持されています。
キャッシュはLRU方式で自動的に管理されるため、古いエントリは自動的に削除されますが、DefaultEntityHandler.clearCache() メソッドを使用して明示的にキャッシュをクリアすることもできます。
// DefaultEntityHandlerキャッシュのクリア
DefaultEntityHandler.clearCache();2
注意事項
DefaultEntityHandler.clearCache() を実行すると、すべてのテーブルメタデータがクリアされます。
クリア後の最初のアクセス時には、マッピング情報の再構築が行われるため、処理時間が若干増加します。
MappingColumnキャッシュ
MappingUtilsで管理されるエンティティのフィールドとカラムのマッピング情報のキャッシュです。
特徴
| 項目 | 内容 |
|---|---|
| キャッシュ対象 | エンティティクラスのフィールド情報、アノテーション情報、SQL種別ごとのカラムマッピング |
| キャッシュキー | スキーマ、テーブル名、エンティティクラスの組み合わせ |
| キャッシュタイプ | LRUキャッシュ(ConcurrentLruCache) |
| デフォルトサイズ | 30エントリ |
サイズの変更
システムプロパティ uroborosql.entity.cache.size でキャッシュサイズを変更できます(TableMetadataキャッシュと共通)。
// JVM起動時のオプション
-Duroborosql.entity.cache.size=1002
キャッシュサイズを変更する際の注意点
キャッシュサイズを大きくすると、キャッシュヒット率が向上しパフォーマンスの改善が見込めます。ただし、その分メモリ消費量が増加します。
キャッシュサイズを変更する際は、メモリ使用量を監視し、アプリケーションへの影響がないことを確認してください。
MappingColumnキャッシュのクリア
エンティティクラスのフィールドやアノテーションを変更した場合、MappingColumnキャッシュのクリアが必要です。
対処方法: MappingUtils.clearCache() の実行、またはアプリケーションの再起動
MappingColumnキャッシュはMappingUtilsの静的フィールドとして保持されています。
キャッシュはLRU方式で自動的に管理されるため、古いエントリは自動的に削除されますが、MappingUtils.clearCache() メソッドを使用して明示的にキャッシュをクリアすることもできます。
// MappingColumnキャッシュのクリア
MappingUtils.clearCache();2
注意事項
MappingUtils.clearCache() を実行すると、すべてのエンティティクラスのマッピング情報がクリアされます。
クリア後の最初のアクセス時には、マッピング情報の再構築が行われるため、処理時間が若干増加します。
SQL情報キャッシュ
SqlResourceManagerで管理されるSQLファイルの内容とメタデータのキャッシュです。
特徴
| 項目 | 内容 |
|---|---|
| キャッシュ対象 | SQLファイルの内容(SQL文)、ファイルURL、ファイルスキーマ情報 |
| キャッシュキー | SQL名 |
| キャッシュタイプ | ConcurrentHashMap |
| デフォルトサイズ | 無制限(読み込んだすべてのSQLファイルをキャッシュ) |
SQLファイルの変更
アプリケーションを起動した状態でSQLファイルの内容を変更した場合、SQL情報キャッシュのクリアまたは再読み込みが必要です。
対処方法:SqlResourceManager.clearCache() の実行、またはアプリケーションの再起動
SQL情報キャッシュのクリア
SqlResourceManager.clearCache() メソッドを使用して、すべてのSQLキャッシュをクリアできます。
SqlConfig config = UroboroSQL.builder("jdbc:h2:mem:test", "sa", "").build();
// すべてのSQLキャッシュをクリア
config.getSqlResourceManager().clearCache();2
3
4
本番環境での注意事項
WARNING
本番環境では、キャッシュクリアによる一時的なパフォーマンス低下が発生する可能性があります。
以下の点に注意してください:
- キャッシュクリア直後は、メタデータの再取得やSQLファイルの再読み込みが発生するため、レスポンスタイムが増加します
- 高負荷時のキャッシュクリアは避け、メンテナンスウィンドウなどの適切なタイミングで実施してください
- 可能であれば、アプリケーションの再デプロイによるキャッシュのリフレッシュを推奨します
