通过 DBMS“插件”或其他解决方案进行性能分析

通过 DBMS“插件”或其他解决方案进行性能分析

我正在开发一款系统监控产品,目前专注于系统级性能。我们正在扩展到监控数据库系统。目前,我们可以从一系列 DBMS 中获取简单的性能信息,例如连接数、磁盘 IO 速率、锁定等待时间等。

然而,我们确实希望有一种方法可以测量进入 DBMS 的每个查询的执行时间,没有要求客户端在其应用程序代码中实现监控。

一些潜在的解决方案可能是:

  • 位于客户端和服务器之间的某种代理。 SSL 可能是一个问题,而且它要求我们为每个 DBMS 进行逆向工程并实现网络协议。
  • 每个 DBMS 系统的插件,在查询进入时自动记录性能信息。

其他问题包括“匿名化” SQL,即采取类似的方法SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"并生成SELECT * FROM products WHERE price > ? AND name LIKE "%?%",但通过一些巧妙的解析和正则表达式这应该不会太难。

我们主要关注:

  • MySQL
  • 微软SQL
  • 甲骨文
  • Redis
  • mongodb
  • memcached

是否有任何插件式机制可用于解决这些问题?或者是否有更简单的解决方案?

答案1

没有适用于所有数据库的通用解决方案。而且尝试测量 Oracle 上的查询响应时间非常困难。我还没有对 memcache/nosql dbs 进行过性能分析。

对于 mysql 有mysql代理- 可以轻松编写脚本。但是,您可能可以从慢查询日志(阈值为零)中获得所需的一切。我使用修改后的版本这个脚本“匿名化”我的查询。

有一些(非常昂贵的)工具,例如 Compuware 的客户端优势,可以嗅探网络流量并推断各个层级(包括数据库)的性能指标。据我所知,唯一可与之媲美的免费软件工具是过去的星期一据我所知,它不能提供测量持久 TCP 连接上的数据库响应时间所需的深度检查。

虽然可以通过将所有访问集中到 Web 服务来捕获所有指标,但这会导致事务延迟。对于任何代理类型的操作都是如此 - 但对于通过 SSL 的非持久连接来说尤其痛苦。

您是否考虑过如何收集/维护/分析所有这些数据?您可能需要查看石墨

您使用的是哪种类型的客户端?在开始查看数据库之前,您应该测量客户端的响应关系 - 如果您遇到性能问题,则只需开始担心数据库性能。如果客户端是 Web 浏览器,那么这是一个简单得多的任务。只需将您的 Web 服务器设置为记录响应时间并开始混合数据。您甚至可以添加简单的附加组件来测量页面响应 - 这是感知性能的更好指标 - 例如雅虎的回旋镖

相关内容