もう「遅い」とは言わせない! 場面ごとのチューニング方法まとめ
スピードアップのための徹底チューニングということで、計6回に渡りスピードアップのためのチューニング方法を紹介してきた。
これらの中には実装・活用できる場面が限られているテクニックもあるが、なるべく「いろいろな場面で応用が効く」「すでに運用しているWebアプリでも追加修正がおこないやすい」ものを中心に紹介してきたつもりだ。
スピードアップのための徹底チューニング7回目では総集編として、これまで紹介してきたテクニック集+αをまとめてみよう。
ほとんどの場面で有効、まだやっていなかったらすぐにやっておくべき内容
以下の2つはほとんどの場面でパフォーマンスの改善が見込めるテクニック集だ。とくに大量のレコードが格納されているデータベースや、1度にあつかうレコードの量が多い場合に効果がでやすい。まだこのチューニングをおこなっていなかったらぜひやっておこう。
- フィールドの配置法 - レイアウトに必要以上のフィールドを配置しない
一覧画面の表示時に使用するレイアウト、詳細画面の表示時に使用するレイアウト、レコード登録処理に使用するレイアウト…ちょうど用途ごとにテーブルオカレンス(TO)を分けるように、レイアウトも処理用途ごとに分け、用途ごとに最適化したレイアウトをレスポンスレイアウト(SetDBDataの第4匹数)に指定する
- 集計フィールドは置かない - 置いてはいけないフィールド
非保存の計算フィールド、集計フィールドはなるべく配置しない。レコード数が多ければ多いほど集計フィールドを1つ配置するだけで大幅にパフォーマンスが低下してしまう。集計フィールドを使う前に、PHP側だけで・CSVといった外部ファイル・MySQLといった外部データベース・後述の中間テーブルを駆使することでFileMakerの集計フィールドを使用しなくても良い方法を検討する。
検索処理が遅いな…と思ったら
検索処理が遅い場合、ほとんどの場合は「索引が作れない」フィールドに対して検索をかけているのが原因だ。
- 検索処理の御法度 - 検索に使用するフィールドは全索引を設定しておく
- 検索処理の御法度 - 非保存の計算フィールドで検索しない
- スクリプトを活用せよ - 開始テーブルを変えて、計算に必要なレコードを必要最低限に押さえる
検索に使用するフィールドは、あらかじめすべての索引を設定しておく。また、非保存の計算フィールドでは極力検索をおこなわない。どうしても必要な場合は「計算値の自動入力」か関連処理ごとにスクリプトを起動し、"索引の設定できる"テキストフィールドなり数字フィールドに格納したあと、そのフィールドに対して検索をおこなうようにする。
高速な集計をおこなうには
高速な集計をおこなうには、前述のとおりFileMakerビルトインの集計フィールドは使用しないほうが良い。
- 集計には中間テーブル、続・集計には中間テーブル
以下は、ほかのテクニックと比較すると実装難度は高い。実装にかかる時間やメンテナンスにかかる時間、バグが出てしまったときの復旧時間、必要なレコード/ファイルサイズは集計フィールドを使う場合と比較すると大幅にロスが多いものの、それを補うだけのパフォーマンスは充分得られる。文字どおり集計結果を瞬間で取得できるメリットは大きい。実装の順番に気をつけよう。
その他の検討事項
ほかのテクニックと比較すると細々とした内容のため「スピードアップのための徹底チューニング」では扱っていないものだ。効果のでる/でない場合があるので、行き詰まったら試してみる程度にとどめておこう。
- 全体ソート(AddSortParam)はおこなわない
レコード量が多い場合、全体ソートだけで非保存計算フィールドの検索や集計フィールドの計算に匹敵する処理時間がかかることがある。全体ソートのパフォーマンスをアップするにはいまのところ、FileMaker Serverがインストールされているマシンのスペックを強化するしか有効な方法はない。レコード量が多い場合、全体ソートは遅いということをあらかじめエンドユーザと相談しておくか、PHP側で部分ソートをおこなうにとどめておきたいところだ。
- ファイルの修復・最適化をおこなう
遅くなるはずのない検索で遅かったり、検索できない文字がでてきた場合は索引やファイルそのものが破損している可能性もある。いったんFileMaker Serverでの公開を中止し、ファイルの修復や最適化をおこなってみよう。
FileMaker Proで開発をおこなうのと同列で考えてWebアプリを実装した場合は、どこに遅くなる原因があるかわからずにパフォーマンスが劣化しやすい。「FileMakerだから遅い」とあきらめずに、パフォーマンスアップのための調整をギリギリまでおこなってみよう。壁にあたったとき、このコラムが少しでも参考になれば幸いだ。