你使用什么技术?您如何找出运行时间最长的作业?有没有办法找出有问题的应用程序?
5 回答
要识别有问题的查询启动 Profiler,请选择以下事件:
- TSQL:批处理完成
- TSQL:Stmt 已完成
- SP:已完成
- SP:Stmt 已完成
过滤输出,例如
- 持续时间 > x 毫秒(例如 100 毫秒,主要取决于您的需求和系统类型)
- CPU > y 毫秒
- 读数 > r
- 写入 > w
取决于您要优化的内容。确保对输出进行足够的过滤,以免成千上万的数据行在您的窗口中滚动,因为这会影响您的服务器性能!
将输出记录到数据库表以在之后进行分析很有帮助。并行运行 Windows 系统监视器以查看 cpu 负载、磁盘 io 和一些 sql server 性能计数器也很有帮助。配置 sysmon 以将数据保存到文件中。
比您必须在数据库上获得生产典型查询负载和数据量才能使用探查器查看有意义的值。
从分析器获得一些输出后,您可以停止分析。
然后再次将分析表中存储的数据加载到分析器中,并使用 importmenu 从 systemmonitor 导入输出,分析器会将 sysmon 输出与您的 sql 分析器数据相关联。这是一个非常好的功能。
在该视图中,您可以立即识别与您的内存、磁盘或 cpu 系统有关的引导项。
当您确定了一些要省略的查询时,请转到查询分析器并查看执行计划并尝试省略索引使用和查询设计。
在使用 SQL Server 2000 时,我使用 SSMS 或 SQL Profiler 中提供的数据库调整工具取得了很好的成功。
关键是使用 GOOD 样本集,跟踪 analsys 的一部分 TRUE 生产工作负载,这将获得最佳的整体收益。
我使用 SQL Server 附带的 SQL Profiler。我发现的大多数性能不佳的查询都没有使用大量 CPU,而是产生了大量的磁盘 IO。
我倾向于在磁盘读取上放置过滤器,并寻找倾向于进行超过 20,000 次左右读取的查询。然后我会查看那些查询的执行计划,它通常会为您提供优化查询或相关表上的索引所需的信息。
我使用了几种不同的技术。
如果您尝试优化特定查询,请使用查询分析器。使用其中的工具,例如显示执行计划等。
对于您不确定哪个查询运行缓慢的情况,您可以使用的最强大的工具之一是 SQL Profiler。
只需选择您要分析的数据库,然后让它完成它的工作。
您需要让它运行相当长的时间(这取决于应用程序的流量),然后您可以将结果转储到表格中并开始分析它们。
您将要查看具有大量读取或占用大量 CPU 时间等的查询。
优化是一头熊,但要坚持下去,最重要的是,不要假设你知道瓶颈在哪里,找到它在哪里的证据并修复它。