ワードプレスなど、様々なアプリケーションで使われているデータベース、「MySQL」。
VPSやクラウドを選択した場合、サーバーの「メモリ」を選択することになります。
最近は、簡単に、スケールアップ(CPUやメモリをアップグレード)することが簡単にできるサービスが多くなりました。
メモリは、VPSのサーバー利用料金に直結します。
お金を出せば、潤沢なサーバーを用意できますが、適度に節約をしたいですね。
実際にどのくらい使われているのでしょうか・・・
OSのメモリ
CentOSのメモリは、どのくらいの余裕があるのでしょう。
「free」というコマンドを使います。
# free total used free shared buff/cache available Mem: 1882060 972320 141728 108680 768012 593108 Swap: 0 0 0
上記は、VPSの2Gの例です。
左上が、トータルメモリです。
その右側が、「used」ですので、使われているメモリです。
実際に空いているメモリ容量は、「141メガ」ほどになります。
MySQLが使っているメモリ
MySQLが使っているメモリを調べるには、「ps」コマンドを利用します。
「ps aux」と「aux」というオプションを使います。
# ps aux|grep mysql mysql 30614 0.1 20.5 1615344 387056 ? Sl OctXX 11:52 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
左から、5列目の数字が、VSZ(仮想メモリ)で、その右側が、6列目のRSS(物理メモリ)で、実際に使われているメモリになります。
VSZは、仮想メモリであり、物理メモリよりも、大きなメモリを扱うことが出来ます。
MySQL起動時に、ある程度、大きな領域を確保します。
スワップ
物理メモリが足りなくなってきた場合、OSは、あるプロセスが使っていないメモリを、メモリを欲しがっているプロセスに割り当てます。
メモリを使われたプロセスが、眠りから覚めて、動き出すと、貸し出していたメモリを、戻して、自分のために使います。
このやりとりを、スワップといいます。
スワップが激しく起こると、OS自体が重くなり、処理能力の低下を招きます。
スワップが起こっているかどうかは、「vmstat」というコマンドを使います。
上記の「si」「so」のところです。
「スワップイン」「スワップアウト」の略です。
OSのメモリに対する、MySQLのメモリ割り当て
OS全体のメモリ利用率などを見るには、「htop」コマンドが便利です。
↑ 1.06Gぐらい使われています。
このサーバーは、現状では、メモリ不足はないと考えます。
ワードプレスのPV数が莫大になったりすると、メモリも少なくなるでしょう。
そう考えると、スケールアップできるVPSは、便利ですね。
MySQLが利用するメモリの容量を少なくする・・・
MySQL起動時は、最低限のメモリですが、時間の経過とともに、MySQLが使っているメモリが増加していきます。
無限に増加をするわけではなく、あるところで、落ち着くはずです。
意図的に、MySQLを再起動をしてみます。
# systemctl restart mysqld # ps uax|grep mysql mysql 21703 8.0 9.4 1119916 176936 ? Sl 14:44 0:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
↑
VSZ 1.1G
RSS 176M
と、なっています。
再起動前の
VSZ 1.6G
RSS 387M
よりは、少ないメモリ容量で動いています。
# free total used free shared buff/cache available Mem: 1882060 784888 230152 108680 867020 778268 Swap: 0 0 0
↑「free」コマンドでも、少なくなった事がわかります。
↑「htop」コマンドも、同様に、少ないメモリで稼働をしています。
MySQLメモリの勘所・・・
MySQLのメモリ利用量は、時間の経過とともに、大きくなります。
「なんか遅い」と感じた場合、メモリが足りない可能性があります。
なぜ、足りなくなるのか・・・
・PVが多くなった
・あるプラグインがメモリ食い
・そもそも、メモリが少ないサーバー
など、いろいろあるかと思います。
まずは、現状把握から・・・