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はその後起動しません
私は単語の可能な組み合わせをグーグルで試し、異なる解決策を実装しようとしましたが、それは助けにはなりません。私は本当にアドバイスを使うことができます
あなたのシステムおそらくは「スワッピング」でした。これはMySQLのパフォーマンスに非常に有害です。そして、通常のクイックフィックスは、buffer_poolを縮小することです。
innodb_buffer_pool_size = 1500M
は、「小型」の4GBマシンで安全に実行できるすべてのことです。
Buffer_poolは「キャッシュ」であることに注意してください。サイズを少しだけ変更しても、MySQLのパフォーマンスへの影響はわずかです(小さすぎる場合を除く)。 MySQLのサイズが大きすぎるため、OSの問題が発生するようです。
My.cnfで他に何か変更しましたか?
また、max_connections
。通常は100が適切ですが、場合によっては50の方が良いでしょう。そして、作成するApacheの子の数を減らします。 30が良いかもしれません。
どのクエリが遅いかを確認しようとしましたか? slow_query_logをオンにしていますか?最初は「良い」インデックスのように見えるかもしれませんが、クエリのために単に良いかもしれません。
innodb_buffer_pool_size
インストールされている物理メモリの少なくとも70〜80%。 innodb_log_file_size
およびinnodb_sort_buffer_size
。これは、スロークエリログが超過した場合に役立ちます。