一.概要
1.応用シーン
帳票の実行速度にとって、データソースのデータ抽出性能は比較的大きな影響を及ぼす要素の一つです。
データのリアルタイム性が厳しく要求されず、30分くらいの更新頻度でも十分役に立つ場合、キャッシュの利用はサーバとデータベースの負荷の減少と、帳票の実行速度の向上を両立できる解決案となります。
2.機能の簡単説明
「データ抽出キャッシュ」とは、データセットのクエリ結果をキャッシュすることで、同じクエリが再度行われた場合、データベースに接続してデータを最初からクエリすることなく、キャッシュされたデータを読み取ることでリソースの再利用とデータの読み取り時間の減少を実現させることで、帳票の表示速度を上げていきます。
二.製品の特徴
1.共有データセットと比べてどのような優位性があるのか
データ抽出キャッシュ | 共有データセット |
キャッシュを利用できるテンプレートを的確に推薦し、複数のテンプレートを一括で選択してワンボタンでデータ抽出キャッシュを有効にすることがサポートされています | データセットを個別に開き、それに適したテンプレートを自ら識別しなければならなりません |
リソースがカスタム設定だけを占めることがサポートされています。リソースとしてメモリを占めてしまうことを制限します。そのほかのシステムの業務に対して影響を及ぼすこともありません | キャッシュの個数を設定することのみサポートされています。RAMディスクをどれくらい占めるかなどは制御できないため、ほかの業務の使用に影響を及ぼすおそれがあります |
キャッシュされたリソースの使用とアクセス状況のリアルタイムでのモニタリングがサポートされています | 左側の機能がサポートされていません |
ツールバーにてデータ更新時間を表示させる、及び最新データを手動で獲得する、というユーザーの操作がサポートされています キャッシュの更新を停止させる、又はすぐに最新のデータに更新させる、という管理者の操作がサポートされています | 左側の機能がサポートされていません 期限切れでデータが自動的に無効になります |
キャッシュを利用し続けられ、新しいデータを定期的に取得できるよう、定時更新がサポートされています | 左側の機能がサポートされていません 期限切れでデータが無効になった後、改めてアクセスして再生成する必要があります |
帳票自体の書き込み機能との連動がサポートされています。書き込み完了後、書き込み関連のキャッシュが自動的に無効になります | 左側の機能がサポートされていません 書き込みをしてもキャッシュされた関連データが変わらないため、データ間の不一致が発生するおそれがあります |
あまり使われていない、またはメモリ容量を大きく占めているキャッシュに対し、そのキャッシュの引き続きの利用を自動的に制限する、または更新を自動的に停止させます。キャッシュ利用が検出された場合、再びキャッシュを自動的更新するという状態に入ります | LRU、LFU、FIFOという三種の簡単なストラテジしかサポートされていません |
2.製品アーキテクチャ
モジュールデザインが採用されたこのプラグインではよい階層構造とデカップリング機能を兼ね備えています。製品には柔軟性の高いサーキットブレーカー、レート制限とスケジューラが内蔵されるため、データベースに負荷をかけることがありません。
そのうちの主要モジュールと特徴を本節にて説明します。
モジュール | 特徴 | |
コンテナ | デフォルト設定として最大のメモリ使用率はJVMヒープの1/4です。それを超えると後者優先となります。 一つのキャッシュデータ量は500000(行*列、設定による変更が可能)以下です。 | |
スケジューラ | - | キャッシュに一時保存された後、スケジューラはキャッシュの内容によってストラテジを作成し、更新、無効または中止というようなスケジューリングを行います。 |
最大アイドル時間 | キャッシュが生成されて72時間経った後もアクセスされたことが無いと中止・キックアウトされます。 間隔更新の場合、キャッシュヒット数が一回以上になってからこそキャッシュが自動更新されます。 | |
キャッシュの更新 | デフォルト設定として、スケジューラは以下の更新ストラテジを提供しています。 1.指定された間隔で更新します。30分の間隔時間を設定すると、キャッシュは保存されてから30分後自動更新されます。 2.CRON表現式で更新します。CRON表現式では必要となる更新のタイミングを簡単に設定することができます。設定されたタイミングになる自動更新されます。 キャッシュが更新される時、まずはキャッシュ対応のレコードのsqlにより、データベースにリクエストを出し、獲得した結果セットを入れ替えます。このプロセスは通常のデータ取得業務に影響を及ぼすことがありません。 | |
キャッシュ数の制限 | 全体のキャッシュの数はむやみに増えることがないと同じく、一つ一つのテンプレートのキャッシュの数も制限されています。 スケジューラは二種のキックアウトのルールを提供し、次の順番で検査を行います。 1.一つのテンプレートのキャッシュ数は1000を超えないこと(設定によって変更可能)。超えるとキックアウトします。 2.全体のキャッシュ数は10000を超えないこと(設定によって変更可能)。超えるとキックアウトします。 | |
負荷が高すぎる場合の更新 | スケジューラはスレッドプールに対するスケジューリングによってキャッシュのスケジューリングを行う行為(更新、無効、中止という三種の行為)を設計しました。 1.更新スレッドプールにあるスレッド数が15(設定によって変更可能)、最大15のスレッドが同時にJDBCの形でデータベースにアクセスするこごができます。 2.更新操作タスクの新規作成と完成のスループット、及び両者の比率をモニタリングします。データベースやサーバの応答が遅くなる時、データ抽出キャッシュがさらにそれを遅くさせることを防ぎます。 3.すべてのキャッシュをクリア・中止した後、一般の帳票計算にあたるデータ取得のロジックは影響を受けず、通常通りに実行します。 |
三.操作手順
管理者としてFineReportポータルにアクセスし、システム-データ抽出キャッシュという順でクリックします。画面は下図通りです。
1.キャッシュテンプレート管理
1.キャッシュテンプレートの推薦
まず「キャッシュテンプレート管理」という機能を利用し、キャッシュの利用に適したテンプレートを検出します
「分析をスタート」をクリックすると、システムの実行データ履歴を対象に分析が行われ、キャッシュの利用に適したテンプレートを推薦します。下図通りです。
2.キャッシュテンプレートの管理
ユーザーはここでキャッシュを利用するテンプレートを追加、または削除することができます。
2.キャッシュの設定
キャッシュの設定画面ではサーバキャッシュを設定できます。下図通りです。
各設定項目の詳細は下表通りです。
設定項目 | 詳細 |
キャッシュを有効 | キャッシュ利用のテンプレートを対象にします。キャッシュを有効にすると、データセットからのクエリ結果がキャッシュされます。 |
キャッシュに関するヒントの表示 | テンプレートプレビューのツールバーにてキャッシュに関するヒントを表示させるかという設定です(ツールバーがなければ表示されることもありません)。手動でデータを更新するボタンやキャッシュの生成時間が含まれています。ユーザーはデータが正確ではないと思い、すぐデータをもう一度更新したい場合、データ更新をクリックすると、プレビュー時に利用されるキャッシュを手動で更新することができます。 |
キャッシュテンプレートのヒント | 有効にするとキャッシュの利用に適したテンプレートを以下の形で通知します。 1.プラットフォームメッセージ 2.ユーザーは当日初めてプラットフォームの「データ抽出キャッシュ」画面にアクセスする場合、画面の上のtooltipsではヒントが表示されます。 なお、「キャッシュテンプレート管理」画面からも推薦テンプレートを確認できます。 |
パラメータ予測 | 有効にすると、テンプレートのパラメータの使用状況を事前に予測し、キャッシュすることができます。ロード性能がそれによって向上します。 |
メモリ容量に占めるキャッシュの制限 | キャッシュが占めるサーバのメモリ容量の最大値を設定します。 |
キャッシュ更新ルール | 単純な繰り返し実行: 設定された頻度で更新します。「キャッシュルールの自動最適化」をオンにすることがサポートされています。オンにすると、大量のキャッシュの同時更新が避けられ、適切な範囲でキャッシュ更新の間隔時間を動的に調整することができます。 表現式による設定: CRON表現式を入力することができます(例えば、0 0 12 * * ?は、毎日の午前12時を意味します) |
常に再読込み | cptやfrmファイルの内容をメモリにキャッシュするかを指します。 あらゆるテンプレートを対象に、この機能をオフにすると、テンプレートファイルをキャッシュします。オンにすると、テンプレートを毎回再読み込みします。 |
注:データ抽出機能を向上させるためキャッシュを利用しますが、比較的大きなデータ量をキャッシュするとサーバに余裕がなくなり、スピードが遅くなることがあります。そのため、キャッシュできる最大のデータ量を50W(行*列)に制限します。
3.運行モニタリング
キャッシュの使用詳細を確認したい、または一部の異常キャッシュを手動で処理したい場合、システム-データ抽出キャッシュを順にクリックし、ディレクトリ下の「運行モニタリング」をクリックすることができます。
詳細説明はキャッシュモニタリングをご参照ください。
4.データセットの単独キャッシュ設定
システム上、データ更新時間はほとんどのテンプレートのと異なり、一括設定でデータ抽出キャッシュを実行するのは適切ではない、という一部のテンプレートが存在する場合、関連データセットを対象に単独キャッシュを設定することができます。
データセットの編集パネルにて、元々の共有データセットの代わりに新しいキャッシュ設定が表示されます。
1.サーバ設定を採用する場合、サーバのデフォルト設定のキャッシュストラテジが使われます。対応するキャッシュストラテジやキャッシュはデフォルト設定として有効にされているのかは表示されますが、変更することができません。下図通りです。
2.当データセットを対象に単独設定する場合、このデータセットはキャッシュを使うか、ストラテジ設定、という二項目を対象に単独設定することができます。下図通りです。
「ストラテジ設定」をクリックすると、キャッシュのストラテジ設定をカスタマイズできます。下図通りです。
3.多くのデータセットが存在するテンプレートを対象に、キャッシュの設定を一つ一つ変更するには時間がかかるため、データセットのツールバーのボタンを通して有効/無効を素早く選ぶことができます。下図通りです。
ボタンをクリックすると、当テンプレートのデータセットを単独設定に、キャッシュを有効/無効にすることを一括変更できます。
四.例示
大型スクリーンやコクピットで利用する場合、複数の指標を同時に分析することが多々あります。一つのテンプレートに大量のSQLが入っていると、一つ一つのSQLはそれほど時間がかからなくても、十数個またはそれ以上の指標のSQLの時間が積み重なると、画面全体の内容を読み込むには時間がかかる結果になってしまいます。
これらのSQLが複雑なものである場合、大型スクリーンやコクピットでのプレビューにはもっと時間がかかってしまいます。このような画面は指導者や管理者が良く使うものである以上、性能の面ではより厳しい要求が課されています。
並行データ取得は最適化する方法の一つですが、データ取得の前後関係、スレッド制限などの要素の影響を受け、最適化できるのはデータ取得性能の一部にすぎません。大型スクリーンやコクピットの関連テンプレートを対象にデータ抽出キャッシュを有効にし、テンプレート内のあらゆるデータ取得結果をキャッシュすると、大型スクリーンやコクピットでの読み込みスピードが保証されます。下図通りです。