FileMaker Proで複数のファイルやデータベースから構成されるアプリケーションを組む場合、「外部データソースの管理」から必要なファイルやODBCの情報を追記していく。この外部データソースの管理で記述するファイルパスに特定の条件が重なると、Web公開の動作が著しく遅くなる現象が発生する。安定稼働していたFileMaker Webアプリケーションが突然遅くなった場合は、まずはここをチェックだ。

Web公開のパフォーマンスが突然遅くなったときにチェックするべき箇所 - 外部データソースの管理

FileMaker Proで複数のファイルやデータベースから構成されるアプリケーションを組む場合、「外部データソースの管理」から必要なファイルやODBCの情報を追記していく。この外部データソースの管理で記述するファイルパスに特定の条件が重なると、Web公開の動作が著しく遅くなる現象が発生する。安定稼働していたFileMaker Webアプリケーションが前触れなく突然遅くなった場合は、まずはここをチェックしてみよう。

複数のFileMakerファイルからなるアプリケーションとは

FileMakerはバージョン7移行、ひとつのFileMakerファイルに複数のテーブルを持たせることが可能になった。このため、1ファイルにすべてのテーブルを持たせてWebアプリケーションを作成することができるように。しかしこの場合

  • メンテナンスの手間がかかる。レコードの移行などをおこなう場合、つねに全テーブルのレコードをエクスポート→インポートをおこなう必要がある。入力値の自動化でシリアル番号を使用している場合、「次の値」も作業時にチェックしなければならない
  • ファイルサイズの肥大化につながる。FileMaker ServerやハードウェアのトラブルでFileMakerファイルが破損した場合、ファイルの修復に非常に時間がかかるようになる

といったデメリットがある。これらを防ぐために、用途ごとにFileMakerファイルを分離して、複数ファイルからアプリケーションを実装する方法がある。たとえば

  1. PHPからアクセスする、TOリレーションやレイアウトだけを定義したファイル(テーブルはすべて外部ファイルから参照)
  2. 頻繁にレコードが更新されるテーブルを集めたファイル
  3. マスタテーブルなど、テーブル構造やレコードがあまり更新されないテーブルを集めたファイル
  4. 中間テーブルなど、1テーブルに大量のレコードが必要なファイル

このようにファイルを分離しておけば、データベースの変更やメンテナンスの際も、必要最低限の作業でおこなうことが可能だ。また、FileMakerはバージョン6のころまで、1ファイル=1テーブルのデータベースだった。この流れを組み、現在でも1ファイル=1テーブルのFileMakerアプリケーションが作成されている場合もある。

これらの場合、必要なファイルが「外部データソースの管理」に追加されていくことになる。この外部データソースにおいて、開くことができないFileMakerファイルが存在する場合に、PHPからアクセスするファイルのWeb公開の動作が著しく遅くなることがある。具体的な環境は次のとおり。

  • FileMaker Serverが2つ以上動作しており、FileMakerファイルが別々に配置されている。ネットワークのトラブルなどで、一方のFileMakerサーバからもう一方のFileMaker Serverへアクセスができなくなっているとき
  • ほかの環境で動作していたFileMakerファイルを、外部データソースを修正せずに別の環境で動作させた場合
  • FileMaker ServerのIPアドレスを間違えて入力し、実在しないファイルパスを指定しまっている場合

外部データソースに「FileMakerネットワーク」を使用して外部ファイルを参照しているかつ、そのネットワークが使用できない場合に動作が極端に遅くなる。このような場合、ファイル内のレイアウトすべての応答速度が遅くなるのではなく、アクセスできないFileMakerファイルのフィールドが配置されているレイアウトに限り遅延が発生する。

テスト用にファイルを作成し、動作を確認してみよう。

  • テーブル "project" : 請求データを管理するテーブル。fxphp_tips.fp7上に作成
  • テーブル "client_mst" : 顧客情報を管理するマスタテーブル。fxphp_tips_mst.fp7上に作成
  • PHPからはfxphp_tips.fp7にアクセス
  • fxphp_tips.fp7のリレーションシップに、fxphp_tips.fp7のprojectとfxphp_tips_mst.fp7のclient_mstとのリレーションを追加
  • fxphp_tips.fp7にレイアウト"project"を作成。projectテーブルのフィールドをすべて配置
  • fxphp_tips.fp7にレイアウト"project"を作成。projectテーブルのフィールドをすべて配置

fxphp_tips.fp7上のテーブル「project」のフィールド定義

fxphp_tips_mst.fp7上のテーブル「client_mst」のフィールド定義

fxphp_tips.fp7に、projectとclient_mstを結ぶリレーションシップを作成

fxphp_tips.fp7上にレイアウト「project」を作成。projectテーブルのフィールドをすべて配置

fxphp_tips.fp7上にレイアウト「project」を作成。projectテーブルのフィールドをすべて配置

外部データソースの管理画面。fxphp_tips_mstへの参照するためのファイルパスが記述されている

FMFindAny()のみをおこなうPHPファイルを作成し、projectレイアウトとproject_allにアクセスして時間を計測する。計測にはSafariのWebインスペクタをもちいた。まずは正常に動作しているパターンから。

projectにアクセス。28ミリ秒

project_allにアクセス。34ミリ秒

続いてfxphp_tips_mst.fp7を閉じた状態で、再度アクセスをおこなう。

projectにアクセス。27ミリ秒

project_allにアクセス。35ミリ秒。この際のerrorCodeは0

最後にfxphp_tips.fp7の外部データソースに記述された「FileMakerネットワーク」が使用できない状態を再現してアクセスし、時間を計測した。

projectにアクセス。34ミリ秒

project_allにアクセス。1分。この際のerrorCodeは0

FileMaker Webアプリにおいて、特定のレイアウトの処理だけ極端にパフォーマンスが低下した場合は、まずこの外部データソースを疑ってみよう。手っ取り早く確認するには、FileMaker Proで該当ファイルの該当レイアウトにアクセスしてみれば良い。「(ファイル名)を開くことができません。ホストが利用できないか、またはそのホスト上でファイルが利用できません。」とエラーが表示されたら、外部データソースのパスの表記方法をいまいちど確認してみよう。

FileMaker Serverへ到達できなかった場合に表示されるエラーと、FileMaker Server上でファイルが見つからなかった場合のエラー内容は異なる。前者のエラーが発生していると、FileMaker Pro上でもWeb上でも動作が遅くなる。このエラーが発生している場合は、ネットワークや、外部データソースのパスの表記方法をいまいちど確認されたい