如何在mysql中人为地创建慢查询?


15

我将在几周内进行演示。该演示的一部分是针对基本的mysql故障排除,包括使用慢速查询日志。我已经生成了一个数据库并安装了我们的应用程序,但是它的数据库很干净,因此很难产生足够的问题。

我已经尝试了以下方法来在慢查询日志中获取查询:

将慢查询时间设置为1秒。

删除多个索引。

强调系统:

stress --cpu 100 --io 100 --vm 2 --vm-bytes 128M --timeout 1m

使用wget编写了一些基本的网页调用脚本。

这些都没有产生慢查询。还有另一种人为地强调数据库产生问题的方法吗?我没有足够的技能来编写复杂的Jmeter或其他负载生成器。我希望可能需要内置于mysql或其他Linux技巧的东西,以免压力过大。


1
+1要求慢速查询。如果仅是这种情况,那么:D
红色

Answers:


5

签出mysqlslap。您可以使用--query传递Web应用程序的查询之一,并使用--concurrency指定并发客户端。


这是最有效的……结合使用此功能和数据库失谐功能。
Gray Race

34

完全是人工的,但您可以使用以下sleep()功能:

select sleep(10);

在日志中:

Time                 Id Command    Argument
# Time: 110629 16:19:13
# User@Host: mysql[mysql] @ localhost []
# Query_time: 10.000218  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1309389553;
select sleep(10);

感谢您的建议...确实可以增加日志,但是我希望它们成为对该应用程序的合法查询。通过这种方式,我可以演示解释和其他诊断工具。
Gray Race

:)嗯...也许是战略性的LOCK TABLES工作。那可能也太过糊涂了。
马克·瓦格纳

1
通常从((从数据库中选择*)x)中选择*并保持越来越快的回馈性对我有用。
alexyorke 2014年

使用DO SLEEP(10);,如果你不想在你的查询睡眠的结果。
Rasmus Friis Kjeldsen

1

也许取消数据库调整可能会有所帮助?例如减小key_buffers的大小?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.