パフォーマンスおよびスケーラビリティ
提供:MoodleDocs
作成中です - Mitsuhiro Yoshida (トーク)
「パフォーマンス」とはMoodleが一定のハードウェアで可能な限り多くのユーザをサポートできるようにすることです。
もちろん、あなたはいつでも大きなサーバを購入できます。「スケーラビリティ」とは2倍の性能のサーバを買った場合、2倍の負荷に対応できるようにすることです。
このページはMoodleコーディングガイドラインの一部です。
スケールおよびパフォーマンスのためのコードを書く
すべてのページで決まった数のデータベースクエリしか使用しない
- ループの中にデータベースコードがある場合、非常に疑ってください。
- これはデータベースアクセスが関数の中に隠されている場合、発見が難しいことがあります。
- 代わりにJOINおよびサブクエリを使用してください (get_records_sql, get_recordset_sql等)。
- またはあなたが必要としている情報を可能な限り効率的に取得できるMoodle API関数を探してください (例 get_users_by_capability)。
- 私たちがサポートするすべてのデータベースで動作するSQLの記述方法に関して詳細はデータベースガイドラインをご覧ください。
各ページの生成に必要なRAMの容量を制限する
- 大きなレポートは一定の大きさのページに分割する必要があります。
- データベースから大量のデータを処理する場合、レコードセットを使用して処理する必要があります (あなたがデータベース内のすべての処理をSQLで実行できない場合)。また、recordset_walk iterator を使用してください。あなたがすべての結果を大量のPHP配列で読み込む場合、レコードセット使用によるRAMの利点はありません。
その他の外部コールに注意する
データベースクエリのようにPHPコード実行だけよりはるかに遅い処理があります。例えば:
- シェルスクリプトの実行
- ウェブサービスコールの作成
- (それほどではありませんが)ファイル操作
あなたがこれらを実行する場合、必ずパフォーマンスを心配してください。
■■■■■■■■■■■■■■■■■■■■■■■■■■
あなたのコードのパフォーマンス改善方法
開発中の測定
- あなたのコードが何をしているのか確認するため、パフォーマンス情報 (データベースクエリのカウントを含む) を有効にしてください。
- あなたの新しいコードを読み込むため、JMeterのようなツールを使用してください。
- パフォーマンスを比較するため、https://github.com/moodlehq/moodle-performance-comparison (Moodle 2.5 以降) を使用してください。また、Test site generatorまたはTest course generatorジェネレータ (これもMoodle 2.5以降) を使用できます。
実運用中の測定
- あなたがPostgreSQLを使用している場合、ログを解析して遅いクエリのトップ10を出力するためのスクリプトがあます。あなたに毎日メールを送信するためcronjobに組み込めます。このスクリプトに関して以下のページをご覧ください:
あなたが正しいフォーマットでログを記録するためPostgreSQLを少し設定する必要があります。インストラクションはファイル内にあります。
Moodleサイトの規模は?
統計で確認する限り、現在、世界中での大きなサイトは以下のように記録されています:
- 1 000 000ユーザ以上
- 50 000コース以上
- 1ユーザあたり5 000コース
- 50ロール以上
- 10レベルの深さにネストされた100以上のコースカテゴリ
- コースあたりXXX以上の活動モジュール
- さらにここに追加してください。
あなたのコードを計画およびテストする場合、このような数字を考慮する必要があります。しかし、Moodleサイトがこれより大きくなることはないと考えないでください。
あなたの開発サーバでこれほど大きなサイトをテストできない場合でも、あなたのコードを小さくないMoodleサイトでテストできるようジェネレータスクリプトを使用すべきです。
関連情報
- Moodleコーディングガイドライン
- パフォーマンス 管理者のためのガイダンス
- パフォーマンスFAQ