我对mysql的后端没有经验,并且遇到以下情况。
每晚我都有一个脚本关闭我们的mysql数据库,并将mysql文件夹rsyncs到另一个。然后打开mysql。
稍后,可以通过bash脚本或Web应用程序访问mysql。
每次重启后,通过bash脚本或webapp进入的前几个查询都非常慢(需要10秒的内容需要3分钟)。慢查询完成或超时后,查询将以正常速度运行。此外,当我通过命令行登录mysql时,一切都很好,查询以预期的速度运行。
我认为减速是因为通常 MySQL在我登录时读取所有表信息(假设没有使用-A选项)或者在第一次查询已经访问必要的元表信息之后。
我的问题是:如何通过bash脚本加快此过程,以避免慢查询/手动登录?我只是在必要的表上进行虚拟选择,还是有更聪明的方法来获取表信息?
环境:
谢谢!
答案 0 :(得分:2)
我推测查询时间如此长的滞后是由于在重新启动服务器时页面缓存被清空。一旦查询运行,表就会加载到页面缓存中,所有内容都会运行得更快。
第一个建议是为较大的表重新加载页面缓存。 。 。您只需在脚本中执行select * from <table>
即可完成此操作。
这提出了一个问题:为什么查询正在进行全表扫描?如果是,您可能有机会通过使用索引来加速查询。
答案 1 :(得分:1)
听起来您的数据库正在丢失其缓存的查询。也许尝试使用存储过程进行首次运行时需要快速查询的查询。
答案 2 :(得分:1)
您的查询缓存可能过大或碎片化。
看一下有助于调整数据库的this guide。