我正在研究一个系统监控产品,目前主要关注系统级的性能。 我们正在扩展到监视数据库系统。 现在我们可以从select的DBMS中获取简单的性能信息,如连接数,磁盘IO率,锁等待时间等。
但是,我们真的很喜欢测量进入DBMS的每个查询的执行时间, 而不需要客户端在其应用程序代码中实现监视。
一些潜在的解决scheme可能是
其他问题包括“匿名化”的SQL,即采取像SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"并产生SELECT * FROM products WHERE price > ? AND name LIKE "%?%" SELECT * FROM products WHERE price > ? AND name LIKE "%?%" ,虽然这不应该太困难,一些聪明的parsing和正则expression式。
我们主要关注于:
有没有任何插件式的机制,我们可以利用这些? 还是有一个更简单的解决scheme?
没有适用于所有数据库的通用解决scheme。 而试图在Oracle上测量查询响应时间非常困难。 我没有在memcache / nosql dbs上进行性能分析。
对于mysql,有mysqlproxy – 可以很容易地编写脚本。 但是,您可能会从慢查询日志中获得所需的一切(阈值为零)。 我使用此脚本的修改版本来“匿名”我的查询。
Compuware的客户端有很多(非常昂贵的)工具,它们可以嗅探networkingstream量并推断各层(包括数据库)的性能指标。 我所知道的唯一可比较的免费软件工具是PastMon (AFAIK),它不提供在持久TCP连接上测量数据库响应时间所需的深度检查。
虽然可以通过networking服务获取所有访问来捕获所有的度量标准,但这会在事务中引入延迟。 对于任何代理types的操作都是如此 – 但是对于通过SSL的非持久连接会特别痛苦。
您是否考虑过如何收集/维护/分析所有这些数据? 你可能想看看石墨 。
你使用什么types的客户端? 在开始查看数据库之前,您应该测量客户端的响应关系 – 如果您遇到性能问题,则只需要担心数据库性能。 而客户端是一个网页浏览器,那么这是一个更简单的任务。 只需设置您的Web服务器以logging响应时间并开始混搭数据。 你甚至可以添加simlpe插件来测量页面响应 – 这是一个更好的感知性能指标 – 例如雅虎的Boomerang