2

私はmysqlのバックエンドの経験が浅く、次のような状況にあります。

毎晩、mysqlデータベースをオフにし、mysqlフォルダーを別のフォルダーにrsyncするスクリプトがあります。その後、mysqlがオンになります。

その後、mysqlはbashスクリプトまたはWebアプリケーションのいずれかによってアクセスされます。

再起動するたびに、bashスクリプトまたはwebappのいずれかを介して入力される最初のいくつかのクエリは非常に遅くなります(10秒かかるものは3分かかります)。遅いクエリが終了またはタイムアウトすると、クエリは通常の速度で実行されます。また、コマンドラインからmysqlにログインすると、その後はすべて問題なく、クエリは期待される速度で実行されます。

速度が低下するのは、通常、ログイン時(-Aオプションが使用されていない場合)、または最初のクエリが必要なメタテーブル情報にアクセスした後に、MySQLがすべてのテーブル情報を読み取るためだと思います。

私の質問は、bashスクリプトを使用してこのプロセスを高速化し、クエリや手動ログインが遅くなるのを防ぐにはどうすればよいですか?必要なテーブルに対してダミー選択を行うだけですか、それともテーブル情報を取得するためのよりスマートな方法がありますか?

環境:

  • CentOS 5.8
  • MyISAMエンジンを搭載したMysql5.1

ありがとう!

4

3 に答える 3

2

クエリ時間のこのような長い遅延は、サーバーの再起動時にページキャッシュが空になっていることが原因であると推測されます。クエリが実行されると、テーブルがページキャッシュに読み込まれ、すべてがより高速に実行されます。

最初の提案は、より大きなテーブルのページキャッシュをリロードすることです。。。スクリプトでを実行するだけでこれを実行できselect * from <table>ます。

ただし、これには疑問が生じます。クエリが全表スキャンを実行しているのはなぜですか。そうである場合は、インデックスを使用してクエリを高速化する機会があるかもしれません。

于 2012-09-11T01:20:54.797 に答える
1

データベースがキャッシュされたクエリを失っているようです。たぶん、最初の実行で高速である必要があるクエリにストアドプロシージャを使用してみてください。

于 2012-09-11T01:15:06.847 に答える
1

クエリキャッシュが大きすぎるか、断片化されている可能性があります。

データベースの調整に役立つこのガイドをご覧ください。

于 2012-09-11T01:18:18.867 に答える