web-dev-qa-db-ja.com

MySQLの高いCPU使用率

最近私のサーバーのCPUは非常に高くなっています。

CPU負荷は平均13.91(1分)11.72(5分)8.01(15分)であり、私のサイトのトラフィックはわずかに増加しています。

Topコマンドを実行した後、私はMySQLが160%のCPUを使用しているのを見ました!

最近、テーブルを最適化していて、持続的接続に切り替えました。これはMySQLが大量のCPUを使用する原因になりますか?

175
Juddling

まず、永続的な接続はほとんどの場合、害よりも害が大きいため、永続的な接続をオフにすることをお勧めします。

第二に、私はあなたが誰かがリモートサーバーから接続することが不可能であることを確かめるためにあなたのMySQLユーザーを二重チェックしたいと思うでしょう。これはまたチェックすべき主要なセキュリティ事項です。

第三に、 MySQL Slow Query Logをオンにして時間がかかるクエリを監視し、それを使用してクエリがロックされていないことを確認します。キーテーブルが長すぎる.

他に確認できることは、CPU負荷が高いときに次のクエリを実行することです。

SHOW PROCESSLIST;

これにより、現在実行中または実行中のキューにあるすべてのクエリ、クエリの内容、および実行中のクエリが表示されます(このコマンドは、クエリが長すぎる場合はクエリを切り捨てます。 。

バッファサイズ、 テーブルキャッシュクエリキャッシュ および innodb_buffer_pool_size (使用している場合)にも注目してください。これらすべてのメモリ割り当ては、MySQLにCPUを浪費させる可能性があるクエリのパフォーマンスに影響を与える可能性があります。

また、次の記事には良い情報が含まれているため、これらを読み返すことをお勧めします。

プロファイラーを使用することも非常に良い考えです。アプリケーションが実行しているクエリ、重複したクエリがあるかどうか、クエリの実行時間などを表示する必要があるときに有効にできるものです。 PHP Profiler しかし、たくさんあります。 Drupal、Joomla、Wordpressなどのソフトウェアを使用している場合は、手動で統合する必要なしにこの情報を取得できるモジュールがある可能性があるため、コミュニティ内で質問したいと思うでしょう。

239
Steven Surowiec

これはMySQLの高いCPU使用率や負荷を求める場合のトップの投稿ですので、もう1つ回答を加えます。

2012年7月1日に、現在のUTC時間に潮汐による地球の自転の低下を補うためにうるう秒が追加されました。 ntp(またはntpd)を実行しているとき、この秒はあなたのコンピュータ/サーバの時計に追加されました。 MySQLdはいくつかのOSではこの余分な1秒を好まないようで、高いCPU負荷をもたらします。クイックフィックスは(rootとして):

$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start
162
RedPixel

このサーバーが外部から見える場合、外部からの接続要求が多数あるかどうかをチェックする価値があります(つまり、侵入しようとしている人々)。

29
Rowland Shaw