自动测量所有SQL查询
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的完整堆栈跟踪。