SLOWであるPHP/MySQLベースのWebアプリケーションを実行するサーバーがあります。
私の前任者は言う:
以前はデータベースのメンテナンスを行っていました。これは、バッファ、キャッシュされた変数、および不要な変数をクリアするために使用されていました。
そして、彼はその声明でいったい何を意味しているのでしょうか。彼はテーブルの単純な最適化を意味しますか?またはクエリキャッシュ?私はMySQLを理解していますが、彼が何を説明しているのか本当にわかりません。
ポインタをいただければ幸いです。
それらのメンテナンス操作が実行中のサーバーで実行された場合、私は「テーブルのフラッシュ」しか考えられません(MySQLマニュアルから:開いているすべてのテーブルを閉じ、使用中のすべてのテーブルを強制的に閉じ、クエリキャッシュをフラッシュします。FLUSHTABLESも削除しますクエリキャッシュからのすべてのクエリ結果)。
しかし、おそらく彼らはサーバーを再起動しただけでした...
「遅い」部分については、UNIXシステムを実行していると仮定して、 mysql-tuning-primer または mysqltuner.pl を使用して、何についての手がかりを得ることができます。サーバー構成を変更できます
速度を上げるためにバッファをクリアすることを含むデータベース保守のこの考えに私はうんざりしています。あなたのシステムがクロールしていて、これが答えであるなら、私は物事が適切に行われたことに懐疑的です。
これにアプローチする適切な方法は、ボトルネックが何であるかを調べることです。これは通常、ディスク(多くの場合、不十分なメモリ割り当ての拡張)またはCPUのいずれかです。
データベースの負荷はどれくらいですか?そうでない場合は、InnoDBテーブルを使用する必要がありますか?クエリは効率的に記述されていますか?
「負荷がかかった状態でMySQLサーバーをセットアップする方法」は大きな情報です。すべてが間違っているという仮定から始めて、部外者にあなたのためにそれを見て1、2時間費やしてもらうことを検討してください。
ここで考慮すべき何かがあります:
テーブルの大部分がInnoDBである場合は、/ etc/my.cnfに以下を設定することを検討してください。
[mysqld]
innodb_max_dirty_pages_pct=0;
MySQL 5.1以降では、デフォルトは90です。
MySQL 5.5では、デフォルトは75です。
Innodb_max_dirty_pages_pctをzero(0)に設定すると、InnoDBデータページがinnodbバッファープールからディスクに最大限にフラッシュされます(最大99.1%)。
Mysqldはシャットダウン時にinnodbバッファープールをフラッシュするため、他に何も調整することなく、InnoDBデータのロードが存在する場合にmysqldのシャットダウンを高速化することもできます。
あなたは実際にmysqlを再起動することなくその場でこれを設定することができます:
mysql> SET GLOBAL innodb_max_dirty_pages_pct=0;