2012-09-11 36 views
2

我不熟悉mysql的后端,并且遇到以下情况。mysql重启后的第一个查询很慢

每晚我有一个脚本,关闭我们的mysql数据库和rsyncs mysql文件夹到另一个。之后mysql打开。

后来,mysql被bash脚本或web应用程序访问。

每次重新启动后,通过bash脚本或webapp进入的前几个查询都很慢(需要10秒的时间需要3分钟)。一旦缓慢的查询完成或超时,查询以正常速度运行。另外,当我通过命令行登录到mysql时,所有事情都很好,查询以预期的速度运行。

我认为,经济放缓是因为通常 MySQL的读取,当我登录的所有表信息(假设没有-A选项时)或第一查询后已获得必要的元表信息。

我的问题是:如何通过bash脚本加速此过程,以避免查询缓慢/手动登录?我只是在必要的表格上做一个虚拟选择,还是有更明智的方式获取表格信息?

环境:

  • 的CentOS 5.8
  • MySQL 5.1中使用MyISAM引擎

谢谢!

+0

你试过了'ANALYZE TABLE'吗? – Kermit

回答

1

听起来像你的数据库正在失去它的缓存查询。也许尝试使用存储过程进行查询,您需要在首次运行时快速查询。

1

您的查询缓存可能太大或碎片化。

看看这this guide,这有助于调整您的数据库。

2

我会推测查询时间这么长的延迟是由于服务器重新启动时页面缓存被清空。查询运行后,表格会加载到页面缓存中,并且所有内容都运行得更快。

第一个建议是为更大的表重新加载页面缓存。 。 。您只需在脚本中执行select * from <table>即可完成此操作。

但是这引发了一个问题:为什么查询正在进行全表扫描?如果是,您可能有机会通过使用索引来加速查询。

+0

感谢您的回应。 查询未执行全表扫描。这些表格上也有索引以及分区。 我注意到,如果我杀了其中一个查询并再次运行它,它将以正常速度运行。所以我猜想,页面缓存是问题所在。 现在我会尝试在大桌子上做个虚拟选择。 – Dinoo