
この質問はもともと stackoverflow.com に投稿されたものですが、このサイトでより良い回答が得られるかもしれないと言われました...
すぐに、非常に忙しいサイトを持つクライアントのためにウェブサーバーをセットアップする予定です。彼はフォーラム(シンプルマシンフォーラムSMF は PHP で書かれていますが、実際には変更できません。1 日あたり約 40,000 ヒット、1 日あたり 400 件以上の投稿があり、非常に忙しいため、これを別の仮想プライベート サーバーに移動したいと考えています。SMF のバージョン (最も優れた、最も安定した製品バージョン 1.1) では、実行に MySQL が必要なので、PostgreSQL に変更することはできません (PostgreSQL の方が望ましいかもしれません)。
Ubuntu Server 10 LTS に MySQL Server をインストールする際、最も効率的に動作させるために何かできることがないか知りたいです。リソースを抑え、サーバーのリソース制限内に収まるように、できるだけ高速に実行したいと考えています。仮想プライベート サーバーでは、リソースを瞬時に切り替えるオプションがありますが、私はその種のことに関しては専門家ではないので、MySQL Server ができるだけ効率的にセットアップされるようにしたいと考えています。
調査をしていたところ、効率性を確保するためにこれを行うことを提案する記事を見つけました。
# open mysql conf and set these settings:
# key_buffer = 16k
# max_allowed_packet = 1M
# thread_stack = 64K
nano /etc/mysql/my.cnf
# restart mysql
/etc/init.d/mysql restart
この件に関してヒントやコツ、リンク、知識を提供してくれる人はいますか?
答え1
まず、Janne の言う通りです。1 日に 40,000 回の読み取りと 400 回の書き込みでは負荷はゼロです。ほぼどのような設定でも、パフォーマンス上の欠点はまったくないはずです。
私は、SMF を使用した VPS で同様のセットアップを実行しています。APC を利用するため、キャッシュ メカニズムから多くのメリットが得られることがわかりました。
私のセットアップ(あなたにもお勧めします):
- エンギンクス
- MySQL (SMF のテーブルのほとんどを InnoDB に変換)
- PHP-FPM (非常にスケーラブルで、少数のスポーンで開始するように指示すれば、使用するリソースは非常に少なくなります)
- APC キャッシュ
答え2
まず、1 日あたり 40,000 回のヒットと 1 日あたり 400 件以上の投稿は、MySQL に負担をかけるようなことではないように思えます。1 日あたり 40,000 回のヒットは、1 日中分散すると 1 秒あたり約 2 回のヒットであり、400 件以上の投稿は、3 分ごとに新しい投稿があることを意味します。
それは大したことではありません。本当に。
使用しているストレージエンジンについては触れていません。MyISAMテーブルでは、特にキーバッファそしてテーブルキャッシュ値。InnoDBテーブルの場合innodb_バッファプールサイズ最も重要なものです。
のキーバッファ = 16kあなたの例では、16キロバイトのkey_bufferは奇妙に聞こえます。16キロバイトのkey_buffer? あり得ません。少なくとも16M(メガバイト)にしてください。または、サーバーに十分なメモリがある場合は、もっと大きくすることができます。ただし、多くのMySQL変数は繋がりこれらは特定の値であり、グローバルな値ではないため、サーバーの負荷が数千の同時 MySQL 接続を意味する場合は、値を下げる必要がありますが、通常は接続が少数でデータセットが大きい場合は、値を上げる必要があります。