FX.php/APIの違い - レコード検索(2), (3)で作成した2つの検索/一覧PHPを使用し、動作のパフォーマンス・サーバにかかる負荷を比較する。今回はソート指定をおこない、レイアウトに配置するフィールド数を増やしてみた。

今回比較した環境について

レコードの登録や編集と違い、検索処理にはパフォーマンスに影響する要因がいくつかあるのは前回紹介したとおり。今回はレイアウトに配置するフィールドの数を増やし、ソートをおこなった条件で検証をおこなった。動作環境は前回計測時とほとんどおなじ。処理時間が長くなった影響で、アクティビティモニタを使用しないことにした。

FileMakerファイル環境 - A (前回測定環境)

  • 総レコード数: 50件
  • 1リクエストのレコード取得数: 10件
  • レスポンスレイアウトに配置しているフィールド数: 9
  • 計算・集計フィールドの有無: なし
  • ソート指定の有無: なし

FileMakerファイル環境 - B

  • 総レコード数: 50件
  • 1リクエストのレコード取得数: 10件
  • レスポンスレイアウトに配置しているフィールド数: 9
  • 計算・集計フィールドの有無: なし
  • ソート指定の有無: あり

FileMakerファイル環境 - C

  • 総レコード数: 50件
  • 1リクエストのレコード取得数: 10件
  • レスポンスレイアウトに配置しているフィールド数: 26
  • 計算・集計フィールドの有無: あり
  • ソート指定の有無: あり

クライアントPCからApache JMeterを使用し、(2), (3)で作成したfx_find.phpとapi_find.phpにアクセス、応答速度などを計測する。

  • 同時使用ユーザ数(スレッド数): 10, 20, 30, 40, 50
  • リクエスト回数: 1回
  • ループ数: 100

サーバマシンのユーザプロセスによるCPU使用率 (iostat)

iostat(8)の結果よりユーザプロセスによるCPU使用率を抜きだし、グラフ化した。

同時使用ユーザ10, 配置フィールド数9, ソートあり, 計算フィールドなし

同時使用ユーザ10, 配置フィールド数26, ソートあり, 計算フィールドあり

同時使用ユーザ20, 配置フィールド数9, ソートあり, 計算フィールドなし

同時使用ユーザ20, 配置フィールド数26, ソートあり, 計算フィールドあり

同時使用ユーザ30, 配置フィールド数9, ソートあり, 計算フィールドなし

同時使用ユーザ30, 配置フィールド数26, ソートあり, 計算フィールドあり

同時使用ユーザ40, 配置フィールド数9, ソートあり, 計算フィールドなし

同時使用ユーザ40, 配置フィールド数26, ソートあり, 計算フィールドあり

同時使用ユーザ10, 配置フィールド数9, ソートあり, 計算フィールドなし

同時使用ユーザ10, 配置フィールド数26, ソートあり, 計算フィールドあり

クライアントPCパフォーマンス - fx_find.php - 環境B

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 402 66 932 75.26 24.1 96.6 00:41.28
20 2,000 808 68 16272 1064.41 22.7 91.01 01:27.98
30 3,000 1265 68 8642 512.12 23 92.29 02:10.33
40 4,000 1634 67 23737 1471.83 23.1 92.53 02:53.44
50 5,000 2147 68 4807 628.36 22.7 91.27 03:39.82
  平均 1251.2 67.4 10878 750.4 23.12 92.74  

クライアントPCパフォーマンス - fx_find.php - 環境C

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1404 135 3088 497.79 7 59.3 02:22.23
20 2,000 2812 131 18122 1447.76 6.8 57.4 04:54.07
30 3,000 4316 197 22737 2088.6 6.6 55.69 07:34.76
40 4,000 5737 147 26306 2261.16 6.8 57.37 09:48.59
50 5,000 7188 348 34000 3298.02 6.7 57.01 12:20.30
  平均 4291.4 191.6 20850.6 1918.67 6.78 57.35  

クライアントPCパフォーマンス - api_find.php - 環境B

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 522 91 2643 118.67 18.6 75.05 00:53.54
20 2,000 1018 101 16872 1296.28 18.1 72.96 01:50.52
30 3,000 1581 128 17741 1373.35 18.1 72.93 02:45.96
40 4,000 2154 136 24580 1449.95 17.7 71.4 03:45.91
50 5,000 2728 90 31025 2134.36 17.5 70.58 04:36.77
  平均 1600.6 109.2 18572.2 1274.52 18 72.58  

クライアントPCパフォーマンス - api_find.php - 環境C

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time
10 1,000 1478 172 3702 433.83 6.7 56.56 02:29.76
20 2,000 3128 174 12960 1252.33 6.3 53.41 05:17.33
30 3,000 4548 175 12578 134.81 6.5 55.05 07:41.98
40 4,000 5992 211 30358 2611.92 6.5 55.21 10:14.26
50 5,000 7872 170 30575 2930.58 6.2 52.65 13:25.21
  平均 4603.6 180.4 18034.6 1472.69 6.44 54.58  

クライアントPCパフォーマンス - 環境BのAverage値をグラフ化

クライアントPCパフォーマンス - 環境CのAverage値をグラフ化

クライアントPCパフォーマンス - 環境A・B・CのAverage値をグラフ化

レコードが少ない環境下でのまとめ

総レコード・一度に取得するレコードが少ない場合は、ソートの有無はパフォーマンスにさほど影響を与えない結果となった。パフォーマンスに著しい影響を与えたのは、配置フィールド数が多い、かつ、非保存の計算フィールドが配置された場合。BとCを比較するとFX.phpは約3.5倍、FileMaker API for PHPは約2.9倍。AとCを比較すると、FX.phpは約3.8倍、FileMaker API for PHPは約3.1倍ものパフォーマンス差が出ていることがわかる。

FX.phpはFileMaker API for PHPと比較すると機能がシンプルな分高速。しかしこの恩恵は、レイアウトに配置しているフィールドを最適化することではじめて受けることができる。環境Aの場合、FX.phpはFileMaker API for PHPより約1.3~1.5倍高速に動作している。しかし環境Cの場合、最大でも1.1倍ほどのパフォーマンス差しか表れなかった。逆に言えば、レイアウトに配置しているフィールドを最適化していなければFX.php・APIどちらを採用していても遅いWebアプリが出来上がるということだ。

サーバにかかる負荷はやはり多機能な分、FileMaker API for PHPの方が分が悪いようだ。環境CはFX.php・FileMaker API for PHPの処理時間に差はあまりないものの、CPU負荷率は全3パターンの環境においてAPIがFX.php処理時の負荷を上回る結果となっている。

FileMakerなWebアプリにおいて、まず真っ先に注目したいのは「その処理に適切なレイアウトが指定されているかどうか」だ。FX.php/FileMaker API for PHPどちらでも、レイアウトの指定や構成を改善した場合、そのWebアプリは最高で3-4倍高速化する可能性がある。バックナンバー「スピードアップのための徹底チューニング」を参考に、高速化をはかってみてほしい。