web-dev-qa-db-ja.com

MySQLが遅すぎる

PHP/Laravel/MariaDBを使用するプロジェクトがあります。DBは毎日大きくなり、いくつかのテーブルにはすでに4kk +レコードがあります

サーバーは4GB RAM + Ubuntu 14.04 + Apache(DigitalOcean)

サーバーを起動する(または再起動する)だけの場合、すべてがスムーズに機能しますが、数時間後、mysqlへの要求は非常に遅くなります

常に1.5〜2Gbの空きRAMがありますが、何の問題もありません。 mysqlプロセスを再起動すると、すべて正常な状態に戻りますが、数時間後に再び発生します。

私は、DBの構造、インデックスなど、すべてが良いと思います。最初の数時間はかなりうまく機能しているからです。

my.cnf

innodb_log_file_size    = 500M
innodb_buffer_pool_size = 2G

innodb_buffer_pool_sizeから3Gへ、しかしmysqlはその後起動しません

私は単語の可能な組み合わせをグーグルで試し、異なる解決策を実装しようとしましたが、それは助けにはなりません。私は本当にアドバイスを使うことができます

5
lasoweq

あなたのシステムおそらくは「スワッピング」でした。これはMySQLのパフォーマンスに非常に有害です。そして、通常のクイックフィックスは、buffer_poolを縮小することです。

innodb_buffer_pool_size = 1500Mは、「小型」の4GBマシンで安全に実行できるすべてのことです。

Buffer_poolは「キャッシュ」であることに注意してください。サイズを少しだけ変更しても、MySQLのパフォーマンスへの影響はわずかです(小さすぎる場合を除く)。 MySQLのサイズが大きすぎるため、OSの問題が発生するようです。

My.cnfで他に何か変更しましたか?

また、max_connections。通常は100が適切ですが、場合によっては50の方が良いでしょう。そして、作成するApacheの子の数を減らします。 30が良いかもしれません。

1
Rick James

どのクエリが遅いかを確認しようとしましたか? slow_query_logをオンにしていますか?最初は「良い」インデックスのように見えるかもしれませんが、クエリのために単に良いかもしれません。

https://stackoverflow.com/questions/2403793/how-can-i-enable-mysqls-slow-query-log-without-restarting-mysql

1
Mark D

innodb_buffer_pool_sizeインストールされている物理メモリの少なくとも70〜80%。 innodb_log_file_sizeおよびinnodb_sort_buffer_size。これは、スロークエリログが超過した場合に役立ちます。

0
SAM AB