2008-09-18 182 views

回答

18

我建议这三条线

 
log_slow_queries 
set-variable = long_query_time=1 
log-queries-not-using-indexes 

第一和第二将记录任何查询超过一秒钟。正如其他人指出的那样,如果你在网站上以高交易率拍摄,一秒钟的查询就没有了,但我发现它出现了一些真正的WTF;查询应该是要快,但是对于运行的任何数据组合都不是。

最后会记录任何不使用索引的查询。除非你的数据仓库中有任何常见的查询应该有你能找到的最好的索引,所以要注意它的输出。

虽然它肯定不是生产,这最后一个选项

 
log = /var/log/mysql/mysql.log 

会记录所有的查询,如果你想调整特定的页面或作用,这可能是有用的。

+0

不知道关于日志查询不使用索引,谢谢! – Subimage 2008-09-18 17:40:20

4

无论您对系统上的查询的时间/你/感觉如何缓慢都无法接受。

这取决于你运行的查询类型和系统的种类;如果一些后端报表系统在进行复杂的数据挖掘等时延迟并不重要,但在面向用户的系统中可能完全无法接受,并且预计会立即返回结果,那么花费几秒钟的查询可能无关紧要。

3

将它设置为任何你喜欢的。唯一的问题是,在股票MySQL中,它只能以1秒的增量进行设置,这对于某些人来说太慢了。

最常使用的生产服务器执行太多的查询来将它们全部记录下来。慢日志是过滤日志的一种方式,以便我们可以看到需要很长时间的日志(大多数查询可能几乎立即执行)。这是一个钝器。

设置它,如果你喜欢1秒,你可能不会用完磁盘空间或通过这样做,创建一个性能问题。

这的的确确是使慢对数,如果你觉得它很可能造成进一步的光盘或性能问题不这样做的风险。

当然,你可以使非生产服务器上的日志缓慢通过把模拟负载,但是这是从来没有完全一样的。

+0

您现在可以将其设置为微秒。 – phirschybar 2015-06-01 14:34:12

1

它不仅是一个钝器,就决议而言,也实在是MySQL的实例宽,因此,如果您有具有不同performancy要求不同的数据库中你是那种运气不好。很明显,有很多方法可以解决这个问题,但在设置缓慢的日志设置时务必牢记这一点。

除了应用程序的性能要求,另一个要考虑的因素是您要记录的内容。您是否正在使用日志来捕获会威胁到db实例的稳定性的查询(例如导致死锁或笛卡尔连接的查询)或影响特定用户性能的查询,这可能需要稍微调整?这会影响你设定门槛的位置。

3

彼得·扎伊采夫发布了nice article有关使用慢查询日志。他指出的一件事很重要的一点是还要考虑使用某个查询的频率。报告每天运行一次并不重要。但即使经过半秒钟,经常运行的东西也可能成为问题。你不能检测到没有microslow补丁。