ローカル環境「Local by Flywheel」で構築しているローカルサイトが、ある日突然とんでもなく重くなりました。
他のブログから移行した記事が4,800ありリライトしている最中なのですが、ある日突然、2~3記事ほど編集するとすぐに重くなり、ずっと読み込み状態でまったくレスポンスを返さなくなるのです。
Local by Flywheel自体は起動し、サイトも稼働している状態です。
PC自体を再起動すると一時的に解決されますが、また2~3記事ほど編集すると同じ状態になってしまい、作業が全く進まなくなりました。
検索してもわからず困っていたのですが、そういえば以前、別なローカル環境の「Instant WP」を使っていた時に、何らかのトラブルがデータベースのオーバーヘッドを最適化する事で解消された事を思い出しました。
結果、データベースを最適化する事で問題は解決しました。
これは「Local by Flywheel」固有の問題ではなく、WordPressなどでデータベースを使っている限り発生する問題のようです。
私のようにデータベースの知識が無い場合に、同じように困ってる人が居るかもしれないと思ったので、最適化の方法などをメモしておきます。
オーバーヘッドとは?
オーバーヘッドとは、MySQLデータベースへの書き込みや削除、更新を繰り返しているとたまってくるゴミ(未使用領域)の事です。
オーバーヘッドが多くなると、MySQLデータベースの挙動が重くなり、クエリが遅くなるために、サイトの表示に時間がかかったり、応答不能になる事があります。
PCで、断片化されたデータを定期的に綺麗にする作業「デフラグ」が必要なように、オーバーヘッドを取り除くためにデータベースを最適化しなければなりません。
最適化の前にバックアップ
そこでデータベースを最適化するため、バックアップをダウンロードしておこうと「BackWPup」のジョブを開きました。
するとやはりデータベースに問題があるようでバックアップにエラーが出ていました。
通常であれば数十秒で終わるデータベースのバックアップが、丸一日以上かかっても取れていません。
データベースのバックアップのエラー内容を見ると、やはりデータベースのレスポンスが無いようです。何度かログインしてもエラーになってるのがわかります。
この状態で、Adminerにログインしてみるも応答が無かったのでLocal by Flywheelを終了し、パソコンを再起動させました。
すると応答が復活したので、バックアップは少し前に保存した物に頼る事にして、まずは最適化を優先する事にしました。
AdminerでMySQLのデータベースを最適化する方法
ここでは、ローカル環境「Local by Flywheel」で使われているデータベース管理ツール「Adminer」でMySQLのデータベースを最適化する方法を紹介します。
Local by Flywheelを起動し、問題の発生しているローカルサイトの「DATABASE」をクリック、「ADMINER」をクリックしてログインします。
ログインすると、ローカルサイトのデータベースが表示されるので、一番上の□にチェックを入れます。すると、全てのテーブルを選択できます。
全てのテーブルにチェックを入れてから「最適化」をクリックします。
これで完了です。
最適化後
レスポンスが無くなっていたローカルサイトにログインすると、元のようにサクサクと動くようになってくれました。
また、バックアッププラグイン「BackWPup」でデータベースのバックアップをすぐに実行してみると、無事に数秒でバックアップが正常終了しました。
信じられないぐらい重たくなっていたのは、やっぱりデータベースに問題があったようです。
「phpMyAdmin」でオーバーヘッドを取り除く方法
また、本番環境であるさくらのレンタルサーバのデータベース管理ツールは「phpMyAdmin」なので、「phpMyAdmin」でオーバーヘッドを取り除く方法も紹介します。
さくらのレンタルサーバコントロールパネルにログインします。
アプリケーションの設定 > データベースの設定をクリック。
「管理ツール ログイン」をクリックし、phpMyAdminにログインします。
右の「データベース」から最適化したいサイトのデータベースを選択すると、右側の「オーバーヘッド」の欄に、オーバーヘッドがあるのが見つかりました。
テーブル一覧の下の方の「オーバーヘッドのあるテーブルを確認をする」をクリック。
するとオーバーヘッドのあるテーブルにチェックが入るので、
「チェックしたものを:」のプルダウンメニューから「テーブルを最適化する」をクリック。
最適化後
これで、オーバーヘッドが無くなり、最適化されました。
まとめ
Local by Flywheelに標準装備されている「ADMINER」は「phpMyAdmin」と違い、「オーバーヘッド」という項目が無く、どのテーブルが「オーバーヘッド」を起こしているのかまではわからなかったのですが、全てのテーブルを「最適化」する事で問題の解決になったので、それで良しとします。
サイトのレスポンスを上げるためには定期的に「最適化」を行った方が良さそうですね。
また、データベースの最適化をしてくれるプラグインもあるようですが、またプラグインを入れる事により重くなったり、他との相性で不具合が出るのも困ると思ったので、しばらくは定期的に手動で最適化をしていこうと思います。