web-dev-qa-db-ja.com

MySQLメンテナンス-バッファをクリアする方法は?

SLOWであるPHP/MySQLベースのWebアプリケーションを実行するサーバーがあります。

私の前任者は言う:

以前はデータベースのメンテナンスを行っていました。これは、バッファ、キャッシュされた変数、および不要な変数をクリアするために使用されていました。

そして、彼はその声明でいったい何を意味しているのでしょうか。彼はテーブルの単純な最適化を意味しますか?またはクエリキャッシュ?私はMySQLを理解していますが、彼が何を説明しているのか本当にわかりません。

ポインタをいただければ幸いです。

4
Dougal

それらのメンテナンス操作が実行中のサーバーで実行された場合、私は「テーブルのフラッシュ」しか考えられません(MySQLマニュアルから:開いているすべてのテーブルを閉じ、使用中のすべてのテーブルを強制的に閉じ、クエリキャッシュをフラッシュします。FLUSHTABLESも削除しますクエリキャッシュからのすべてのクエリ結果)。

しかし、おそらく彼らはサーバーを再起動しただけでした...

「遅い」部分については、UNIXシステムを実行していると仮定して、 mysql-tuning-primer または mysqltuner.pl を使用して、何についての手がかりを得ることができます。サーバー構成を変更できます

3
clmssz

速度を上げるためにバッファをクリアすることを含むデータベース保守のこの考えに私はうんざりしています。あなたのシステムがクロールしていて、これが答えであるなら、私は物事が適切に行われたことに懐疑的です。

これにアプローチする適切な方法は、ボトルネックが何であるかを調べることです。これは通常、ディスク(多くの場合、不十分なメモリ割り当ての拡張)またはCPUのいずれかです。

データベースの負荷はどれくらいですか?そうでない場合は、InnoDBテーブルを使用する必要がありますか?クエリは効率的に記述されていますか?

「負荷がかかった状態でMySQLサーバーをセットアップする方法」は大きな情報です。すべてが間違っているという仮定から始めて、部外者にあなたのためにそれを見て1、2時間費やしてもらうことを検討してください。

3
Jeff Ferland

ここで考慮すべき何かがあります:

テーブルの大部分が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;
2
RolandoMySQLDBA