自动测量所有SQL查询

时间:2020-03-05 18:39:32  来源:igfitidea点击:

Jeff Atwood在《规范化不是正常》一书中说:"我们正在自动测量流经我们软件的所有查询,对吗?"我不是,但我想。

该应用程序的某些功能:

  • ASP.NET
  • 取决于MS Enterprise Library数据访问应用程序块的数据访问层
  • MS SQL服务器

解决方案

回答

SQL Profiler是我用来监视流向SQL Server的流量的工具。它使我们可以收集有关SQL Server的详细数据。从SQL Server 2000起(至少在此之前),SQL Profiler已随SQL Server一起分发。

强烈推荐。

回答

除了Brad提到SQL Profiler之外,如果要在代码中执行此操作,则所有数据库调用都需要通过一个公共库进行传递。我们在其中插入计时码,瞧,我们知道系统中的每个查询要花费多长时间。

数据库的单入口点是任何ORM或者数据库层的相当标准的功能-至少到目前为止,它在我从事的任何项目中都是如此!

回答

CodePlex上的Dropthings项目有一个用于计时代码块的类。
该类名为TimedLog。它实现IDisposable。我们将希望计时的代码块包装在using语句中。

回答

如果使用rails,它将自动在开发日志文件中记录所有SQL查询及其执行时间。

我发现这非常有用,因为如果我们确实要花一些时间,则只需将它直接复制并粘贴到屏幕/日志文件中,然后在mysql中将" explain"放在它前面是一个步骤。

我们不必去研究代码并重建正在发生的事情。

不用说,这不会在生产中发生,因为它会在大约一个小时内耗尽磁盘空间。

回答

看看本章,Jeff Atwood和我写了有关网站性能优化的文章。我们介绍了很多内容,但是关于数据库跟踪和优化还有很多内容:
加速网站:8个ASP.NET性能提示

回答

如果定义了一个工厂为我们创建SqlCommands,并在需要新命令时始终调用它,则可以将RealProxy返回到SqlCommand。

然后,该代理可以使用StopWatch测量ExecuteReader / ExecuteScalar等的时间,并将其记录在某处。在Sql Server Profiler上使用这种方法的好处是,我们可以获得每个已执行的SQL的完整堆栈跟踪。