「パフォーマンスおよびスケーラビリティ」の版間の差分
提供:MoodleDocs
Mitsuhiro Yoshida (トーク | 投稿記録) (ページの作成:「作成中です - ~~~ '''Performance''' is about allowing Moodle to support as many users as possible with a certain amount of hardware. Of course you can always always…」) |
Mitsuhiro Yoshida (トーク | 投稿記録) 編集の要約なし |
||
(同じ利用者による、間の19版が非表示) | |||
1行目: | 1行目: | ||
「パフォーマンス」とはMoodleが一定のハードウェアで可能な限り多くのユーザをサポートできるようにすることです。 | |||
もちろん、あなたはいつでも大きなサーバを購入できます。「スケーラビリティ」とは2倍の性能のサーバを買った場合、2倍の負荷に対応できるようにすることです。 | |||
このページは[[コーディング|Moodleコーディングガイドライン]]の一部です。 | |||
==スケールおよびパフォーマンスのためのコードを書く== | |||
== | ===すべてのページで決まった数のデータベースクエリしか使用しない=== | ||
* ループの中にデータベースコードがある場合、非常に疑ってください。 | |||
** これはデータベースアクセスが関数の中に隠されている場合、発見が難しいことがあります。 | |||
* 代わりにJOINおよびサブクエリを使用してください (<tt>get_records_sql</tt>, <tt>get_recordset_sql</tt>等)。 | |||
** またはあなたが必要としている情報を可能な限り効率的に取得できるMoodle API関数を探してください (例 <tt>get_users_by_capability</tt>)。 | |||
** 私たちがサポートするすべてのデータベースで動作するSQLの記述方法に関して詳細は[[データベース|データベースガイドライン]]をご覧ください。 | |||
=== | ===各ページの生成に必要なRAMの容量を制限する=== | ||
* 大きなレポートは一定の大きさのページに分割する必要があります。 | |||
* データベースから大量のデータを処理する場合、レコードセットを使用して処理する必要があります (あなたがデータベース内のすべての処理をSQLで実行できない場合)。また、[https://github.com/moodle/moodle/blob/master/lib/classes/dml/recordset_walk.php recordset_walk iterator] を使用してください。あなたがすべての結果を大量のPHP配列で読み込む場合、レコードセット使用によるRAMの利点はありません。 | |||
===その他の外部コールに注意する=== | |||
* | データベースクエリのようにPHPコード実行だけよりはるかに遅い処理があります。例えば: | ||
* | * シェルスクリプトの実行 | ||
* | * ウェブサービスコールの作成 | ||
* (それほどではありませんが)ファイル操作 | |||
あなたがこれらを実行する場合、必ずパフォーマンスを心配してください。 | |||
==あなたのコードのパフォーマンス改善方法== | |||
=== | ===開発中の測定=== | ||
* あなたのコードが何をしているのか確認するため、[[:en:Debugging#Performance_info|パフォーマンス情報]] (データベースクエリのカウントを含む) を有効にしてください。 | |||
* あなたの新しいコードを読み込むために[http://jakarta.apache.org/jmeter/ JMeter]のようなツールを使用してください。 | |||
* パフォーマンスを比較するためにhttps://github.com/moodlehq/moodle-performance-comparison (Moodle 2.5 以降) を使用してください。また、[[Test site generator]]または[[Test course generator]]ジェネレータ (これもMoodle 2.5以降) を使用できます。 | |||
* | |||
* | |||
* | |||
===実運用中の測定=== | |||
* あなたがPostgreSQLを使用している場合、ログを解析して遅いクエリのトップ10を出力するためのスクリプトがあます。あなたに毎日メールを送信するためcronjobに組み込めます。このスクリプトに関して以下のページをご覧ください: | |||
http://git.catalyst.net.nz/gw?p=pgtools.git;a=blob_plain;f=scripts/pg-log-process.pl;hb=refs/heads/pg-log-process-multidb | http://git.catalyst.net.nz/gw?p=pgtools.git;a=blob_plain;f=scripts/pg-log-process.pl;hb=refs/heads/pg-log-process-multidb | ||
あなたが正しいフォーマットでログを記録するためPostgreSQLを少し設定する必要があります。インストラクションはファイル内にあります。 | |||
==Moodleサイトの規模は?== | |||
[http://moodle.org/stats/ 統計]で確認する限り、現在、世界中での大きなサイトは以下のように記録されています: | |||
* 1 000 000ユーザ以上 | |||
* 50 000コース以上 | |||
* 1ユーザあたり5 000コース | |||
* 50ロール以上 | |||
* 10レベルの深さにネストされた100以上のコースカテゴリ | |||
* コースあたりXXX以上の活動モジュール | |||
* さらにここに追加してください。 | |||
あなたのコードを計画およびテストする場合、このような数字を考慮する必要があります。しかし、Moodleサイトがこれより大きくなることはないと考えないでください。 | |||
あなたの開発サーバでこれほど大きなサイトをテストできない場合でも、あなたのコードを小さくないMoodleサイトでテストできるようジェネレータスクリプトを使用すべきです。 | |||
==関連情報== | ==関連情報== | ||
* [[ | * [[コーディング|Moodleコーディングガイドライン]] | ||
* [[ | * [[パフォーマンス]] 管理者のためのガイダンス | ||
* [[ | * [[パフォーマンスFAQ]] | ||
[[Category:コーディングガイドライン|パフォーマンス]] | [[Category:コーディングガイドライン|パフォーマンス]] | ||
[[en:Development:Performance_and_scalability]] | [[en:Development:Performance_and_scalability]] |
2022年2月18日 (金) 15:00時点における最新版
「パフォーマンス」とは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