「パフォーマンスおよびスケーラビリティ」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
編集の要約なし
 
(同じ利用者による、間の9版が非表示)
1行目: 1行目:
作成中です - [[利用者:Mitsuhiro Yoshida|Mitsuhiro Yoshida]] ([[利用者・トーク:Mitsuhiro Yoshida|トーク]])
「パフォーマンス」とはMoodleが一定のハードウェアで可能な限り多くのユーザをサポートできるようにすることです。
 
'''パフォーマンス'''とはMoodleが一定のハードウェアで可能な限り多くのユーザをサポートできるようにすることです。


もちろん、あなたはいつでも大きなサーバを購入できます。「スケーラビリティ」とは2倍の性能のサーバを買った場合、2倍の負荷に対応できるようにすることです。
もちろん、あなたはいつでも大きなサーバを購入できます。「スケーラビリティ」とは2倍の性能のサーバを買った場合、2倍の負荷に対応できるようにすることです。
14行目: 12行目:
* 代わりにJOINおよびサブクエリを使用してください (<tt>get_records_sql</tt>, <tt>get_recordset_sql</tt>等)。
* 代わりにJOINおよびサブクエリを使用してください (<tt>get_records_sql</tt>, <tt>get_recordset_sql</tt>等)。
** またはあなたが必要としている情報を可能な限り効率的に取得できるMoodle API関数を探してください (例 <tt>get_users_by_capability</tt>)。
** またはあなたが必要としている情報を可能な限り効率的に取得できるMoodle API関数を探してください (例 <tt>get_users_by_capability</tt>)。
** 詳細は私たちがサポートするすべてのデータベースで動作するSQLの記述方法に関して[[データベース|データベースガイドライン]]をご覧ください。
** 私たちがサポートするすべてのデータベースで動作するSQLの記述方法に関して詳細は[[データベース|データベースガイドライン]]をご覧ください。
 


===各ページの生成に必要なRAMの容量を制限する===
===各ページの生成に必要なRAMの容量を制限する===
* 大きなレポートは一定の大きさのページに分割する必要があります。
* 大きなレポートは一定の大きさのページに分割する必要があります。
* データベースから大量のデータを処理する場合、レコードセットを使用して処理する必要があります (あなたがデータベース内のすべての処理をSQLで実行できない場合)。また、[https://github.com/moodle/moodle/blob/master/lib/classes/dml/recordset_walk.php recordset_walk iterator] を使用します。あなたがすべての結果を大量のPHP配列で読み込む場合、レコードセット使用によるRAMの利点はありません。
* データベースから大量のデータを処理する場合、レコードセットを使用して処理する必要があります (あなたがデータベース内のすべての処理をSQLで実行できない場合)。また、[https://github.com/moodle/moodle/blob/master/lib/classes/dml/recordset_walk.php recordset_walk iterator] を使用してください。あなたがすべての結果を大量のPHP配列で読み込む場合、レコードセット使用によるRAMの利点はありません。
 
 
===その他の外部コールに注意する Be cautious about other external calls===


Like a database query, there are other operations that are much slower than just executing PHP code. For example:
===その他の外部コールに注意する===
データベースクエリのようにPHPコードの実行だけよりはるかに遅い操作があります。例えば:
データベースクエリのようにPHPコード実行だけよりはるかに遅い処理があります。例えば:
* running a shell script
* シェルスクリプトの実行
* シェルスクリプト実行 running a shell script
* ウェブサービスコールの作成
* making a web-service call
* ウェブサービスコールの作成 making a web-service call
* (to a lesser extent) working with files.
Whenever you are doing these things, worry about performance.
* (それほどではありませんが)ファイル操作
* (それほどではありませんが)ファイル操作
あなたがこれらを実行する場合、必ずパフォーマンスを心配してください。
あなたがこれらを実行する場合、必ずパフォーマンスを心配してください。


==How to improve the performance of your code==
==あなたのコードのパフォーマンス改善方法==
 
===Measure during development===
 
* Turn on [[:en:Debugging#Performance_info|display of performance information]] (including counting database queries), so you are aware of what your code is doing.
 
* Use tools like [http://jakarta.apache.org/jmeter/ JMeter] to subject your new code to load.
 
* Use https://github.com/moodlehq/moodle-performance-comparison (Moodle 2.5 onwards) to compare performance. You can also use the [[Test site generator]] or [[Test course generator]] generators (also Moodle 2.5 onwards).
 
 
===Measure in production===


* If you're using postgres, there's a script that can parse the logs and output the top 10 slow queries, ready to be plugged into a cronjob to email you every day. It can be found here:  
===開発中の測定===
* あなたのコードが何をしているのか確認するため、[[: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


You need to configure postgres a bit to make it log things in the correct format.  Instructions are in the file.
あなたが正しいフォーマットでログを記録するためPostgreSQLを少し設定する必要があります。インストラクションはファイル内にあります。
 
==How big can a Moodle site be?==
 
Looking at the [http://moodle.org/stats/ statistics], the largest sites in the world currently have
* Up to 1 000 000 users
* Up to 50 000 courses
* Up to 5 000 users per course
* Up to 50 roles
* Up to 100 course categories nested up to about 10 levels deep.
* Up to XXX activities in a course.
* Please add more things here.


When planning and testing your code, these are the sorts of numbers you should be contemplating. However, do not assume that Moodle sites will never get bigger than this.
==Moodleサイトの規模は?==
[http://moodle.org/stats/ 統計]で確認する限り、現在、世界中での大きなサイトは以下のように記録されています:
* 1 000 000ユーザ以上
* 50 000コース以上
* 1ユーザあたり5 000コース
* 50ロール以上
* 10レベルの深さにネストされた100以上のコースカテゴリ
* コースあたりXXX以上の活動モジュール
* さらにここに追加してください。


Even if you can't test sites this big on your development server, you should use the generator script so you can test your code in a Moodle site that is not tiny.
あなたのコードを計画およびテストする場合、このような数字を考慮する必要があります。しかし、Moodleサイトがこれより大きくなることはないと考えないでください。


あなたの開発サーバでこれほど大きなサイトをテストできない場合でも、あなたのコードを小さくないMoodleサイトでテストできるようジェネレータスクリプトを使用すべきです。


==関連情報==
==関連情報==


* [[Coding|Moodle coding guidelines]]
* [[コーディング|Moodleコーディングガイドライン]]
* [[Performance]] guidance for administrators
* [[パフォーマンス]] 管理者のためのガイダンス
* [[Performance FAQ]]
* [[パフォーマンス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に組み込めます。このスクリプトに関して以下のページをご覧ください:

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サイトの規模は?

統計で確認する限り、現在、世界中での大きなサイトは以下のように記録されています:

  • 1 000 000ユーザ以上
  • 50 000コース以上
  • 1ユーザあたり5 000コース
  • 50ロール以上
  • 10レベルの深さにネストされた100以上のコースカテゴリ
  • コースあたりXXX以上の活動モジュール
  • さらにここに追加してください。

あなたのコードを計画およびテストする場合、このような数字を考慮する必要があります。しかし、Moodleサイトがこれより大きくなることはないと考えないでください。

あなたの開発サーバでこれほど大きなサイトをテストできない場合でも、あなたのコードを小さくないMoodleサイトでテストできるようジェネレータスクリプトを使用すべきです。

関連情報