私は MySQL + Apache を実行する専用サーバーを持っています。3 秒ごとにポーリングするチャット スクリプトを実行しています。昨夜、負荷が原因で MySQL サーバーがダウンしました。MySQL スレッドと Apache スレッドを最大化する方法を探しています。
同じことを実現するのに役立つ URL を教えていただけますか?
お時間をいただきありがとうございます。
答え1
MySQLのパフォーマンス情報の標準的な場所はMySQL パフォーマンス ブログ。また、高性能MySQLジェレミー・ザヴォドニー著。
アプリケーションで何らかの形式の接続プールを検討することをお勧めします。このプールでは、新しいセッションごとに新しい接続を作成するのではなく、既存のデータベース接続を再利用します。これにより、新しい TCP 接続を開くオーバーヘッドと、MySQL が行う処理が削減されます。また、各接続が存在するために一定量のメモリが必要なため、MySQL が実行しているアイドル接続の数も削減されます。
データベースの負荷を大幅に軽減するために実行できるもう 1 つの方法は、memcached を統合することです。memcached は、ネットワーク接続ハッシュ マップのような、メモリ内の分散キー値ストアです。memcached をポーリングし、データがない場合はデータベースをチェックするようにアプリケーションを変更します。データを変更すると、データベースに書き込み、memcached のデータを無効にします。つまり、MySQL ではなく、はるかに高速な memcached をポーリングすることになります。
これらの機能を実装したら、そして実装できた場合にのみ、MySQL パラメータの調整を検討し始めることができます。何をしているのかわかっていないと、物事を台無しにし、データベースが以前よりも遅くなってしまう可能性が非常に高くなります。これを試す前に、少なくとも MySQL パフォーマンスの本を読んでおくことをお勧めします。
もっとお金をかけられるなら、最初の改善策はデータベースを別のサーバーに分割することです。それでも十分でない場合は、書き込みはマスター サーバーに送られ、読み取りはマスターとスレーブの間で分散される、マスターとスレーブのレプリケーション設定の使用を検討できます。これは、かなり一般的な読み取り負荷の高いワークロードに特に適しています。