1

Ubuntu 12.04 LTS を使用して、EC2 m1.medium インスタンス (3.75 Gb メモリ、2 EC2 コンピューティング ユニット、410 Gb インスタンス ストレージ、中程度のパフォーマンス) で Django を利用したサイトを実行しています。EC2 インスタンスの MySQL 設定は次のとおりです (/etc/mysql/my.cnf から)。

key_buffer = 16M
max_allowed_pa​​cket = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M

/etc/apache2/sites-available/mysite.com からの mod_wsgi 設定:

WSGIDaemonProcess mysite.com user=me group=me processes=7 スレッド=20 maximum-requests=1000000

私の構成では、設定できるプロセス/スレッド/リクエストの最大数はいくつですか? いくつかの値を試しましたが、MySQL がクラッシュしました。MySQL の key_buffer を 0.75Gb (EC2 インスタンスの 3.75Gb RAM の 20%) に設定しても問題ありませんか? 前もって感謝します!

4

2 に答える 2

1

すべての MySQL 変数が非常に低いようです。まず、最も重要なことは、どのストレージ エンジンを使用しているかです。Key_buffer_size はMyISAMストレージ エンジンにのみ影響します。

MyISAMを使用している場合は、次の手順を実行します。

> select sum(index_length) / 1024 / 1024 as index_size_MB from information_schema.Tables where Table_schema = 'knagy' and Engine = 'MyISAM';
+---------------+
| index_size_MB |
+---------------+
|    0.16992188 |
+---------------+

これにより、インデックスの大きさがわかります。十分な RAM がある場合は、この値をkey_buffer_sizeとして大まかに設定する必要があります。ただし、これを空き RAM の 50 ~ 60% より大きくしないでください。

InnoDBを使用している場合は、 innodb_buffer_poolをインデックス付きのデータセットのサイズに設定してみてください。

> select sum(index_length + data_length) / 1024 / 1024 as innodb_MB from information_schema.Tables where Table_schema = 'knagy' and Engine = 'InnoDB';
+--------------+
| innodb_MB    |
+--------------+
| 403.04687500 |
+--------------+

もちろん、他のアプリケーションのメモリ使用量を考慮して、空き RAM の 80% まで設定できます。

これらの変更の 1 つだけを使用すると、パフォーマンスが大幅に向上します。

threads_createdステータス変数が急速に増加している場合は、 thread_cache_sizeを約 30 ~ 50 またはそれ以上増やすことができます。

もちろん、さらに多くの最適化がありますが、これにより、可能な最大パフォーマンスの約 80 ~ 90% が得られます。

于 2012-08-03T08:14:39.260 に答える
0

サイト全体でライブ モニタリングを行って、サイトが実際に何をしているかを把握していますか? 私の PyCon の講演を見てください。1 つのことは、すべては特定のアプリケーションに依存し、私たちはそれについて何も知らないということです。

http://lanyrd.com/2012/pycon/spcdg/

于 2012-08-03T05:41:32.577 に答える