質問: GetUserInfo($dbProf, $row['投稿者ID']); //ブロックチェック!! if( $BlockUserIDList != null ){ if( isset($BlockUserIDList["{$row['投稿者ID']"]) ){ continue; } } echo " //省略していますが、ここで //投稿情報(時間、投稿本文)ユーザー情報(ユーザー名、プロフアイコン) //を表示しています。 "; } ### 試したこと ■データベースの分割。 元々たった1つのデータベースで管理していたので、そこが原因ではないかと思い、 およそ100MBのデータベースを1~3MBほどの複数のデータベースに分けました。 (少し効果があったような気はするがまだ重たい) ■ページの分割 A.phpという書き込み閲覧ページを、A1.php,A2.php,A3.phpといった具合に 複製し、当掲示板内固有のユーザーIDで判別しアクセスするページを分けています。 ※例.ユーザーID(1~100)はA1.phpで閲覧ください。的な感じです。 (結局共通してincludeしているphpファイル(API)があるので意味なかったように感じます この場合includeしているファイルも複製し分ける事で改善するのでしょうか?) ■広告数の減らした。 広告を10枠ぐらい書き込みと書き込みの間に、 ランダムな位置に表示させていたのを、 「アイモバイル(広告媒体)」 Webアイコン広告1枠(icon x 4) バナー1枠(256x64ぐらいのやつ) 四角のでかいやつ1枠(256x256ぐらい) までに減らしました。 (あまり効果は無かったように感じます) ### 補足情報(言語/FW/ツール等のバージョンなど) ■システム・環境 システムは主にPHPで設計しており、データベースはSQLiteを使用しています。 サーバーは共有サーバーのレンタルサーバーロリポップで一番高いプラン。 私個人の技術はWebプログラム経験は独学レベルで2年ほどで、扱えるのはPHPだけです。 ■1日のアクセス状況 リクエスト成功件数 383093 件 リクエスト成功件数の日別平均 209196 件 ページリクエスト成功件数 54 件 ページリクエスト成功件数の日別平均 28 件 ステータスコード不在ログ行数 - リクエスト不成功件数 53111 件 リダイレクトされたリクエスト件数 - 件 ステータスコードつきリクエスト数 - 異なるリクエストファイル数 41796 ファイル 異なるサービスホスト数 1347 件 異常ログ行数 - 不必要ログ項目数 17015 データ転送量 4899015336 バイト データ転送量の日別平均 2675230217.610921 バイト
回答: 共有サーバでは原因の追究も難しいですから、 ローカルに開発/検証環境を作って原因を特定できる環境を作ることをお勧めします。 原因を推測出来る情報が足りないので以下は勘も交えての回答です。 [原因] DBの処理が追いついていない状況に見えます。 DB構造などを見直すのが筋ですが、SQLiteだとそのあたりも限界がありそうです。 (すみません、SQLiteについてはあんまり詳しく無いです。) [対応その1] もし、データ表示のタイミングでアクセスをDB書き込みなどしているなら、 SQLiteのロックの仕組み的にはそれを無くすことで早くなるはずです。 [対応その2] また、恐らく、MySQL等に変更して適切にDB設計すればパフォーマンスは改善すると思います。 *SQLite自体のパフォーマンスが悪いという事ではありません。 [対応その3] 他に確実にパフォーマンスを上げる方法としては、 ・読み込みデータのキャッシュ化 があります。 キャッシュの方法はいくつかありますが、例えば ・混雑する時間帯はデータをリアルタイムに表示するのではなく、5分に一度だけ更新して静的なファイルとして出力する。ユーザはその静的なファイルを見る という形にすればDBに対する読み込み負荷は激減するはずです。 この場合はテンプレートエンジンを導入して、そのキャッシュ機能を使えば比較的簡単に出来るはずです。 広告に関してはajax等で動的に更新するようにするなど工夫が必要です。 もっと賢くするのであれば ・SQLに対応するデータをシリアライズしてファイルに格納しておき、最後にアクセスされた状態からn分以上経過してからアクセスされた場合だけ新たにDBからデータを取得する という様な実装になります。 これは自力で実装してみるのも楽しいですが、 参考 といったライブラリを使うと楽です。