我们有一个.net企业应用程序,它备份到Server后端。
现在,随着我们的一些更大的客户,我们遇到了一些基于SQL的性能瓶颈。我们已经应用了尽可能多的全局索引,我们可以看到,这将提高性能,但我们不断地让客户超越我们作为最大用例所通过的界限,而且没有什么可以说这是错误的。
然而,这意味着能够提供查看大客户的能力,并为他们的数据库提供索引。在这一点上,我只能看到这在一个案例的基础上是可以实现的(因为所有客户都将以不同的方式使用该系统)。
我的想法是以某种方式在客户数据库上运行SQL一定时间,而不是将这些数据泵入数据库中的一个表中,在此期间之后分析数据并在需要时应用索引以提高性能。
企业应用程序是asp.net mvc。是否有人知道我们是否可以添加.net代码,这些代码将通过连接字符串从asp服务器激发SQL分析器到数据库和服务器,而不是将结果泵入表中?
或者对我们可以采取的其他方法有什么建议?
发布于 2014-04-04 08:51:13
仅是一个图形界面,用于显示由Server处理的所有事件。可以通过SQL存储过程和.Net代码启动和捕获跟踪数据。这里有两个关于如何做它的例子。它有点老了,但是我已经按照说明通过.net代码启动了sql跟踪。
http://blogs.msdn.com/b/sqlprogrammability/archive/2006/05/26/receiving-profiler-events.aspx
下面是由分析器执行以启动跟踪的存储过程列表。你可以直接运行它们。http://technet.microsoft.com/en-us/library/ms187346.aspx
发布于 2014-04-06 06:50:45
正如user907246所提到的,Server只是用于显示Server收集的跟踪信息的图形界面,允许在线获取和分析数据。但是server在服务器上造成了巨大的重载,不建议在生产环境中启动。
服务器端跟踪可以按照这里的描述(http://technet.microsoft.com/en-us/library/cc293613.aspx)配置和使用,而不是Profiler。您可以指定跟踪文件大小、文件卷起、跟踪筛选器和其他重要标准.使用服务器跟踪代替server可以减少服务器负载,并允许收集相同的信息进行卸载分析:大量的工具可用于脱机跟踪analysys,例如。不含来自DBSofic的QURE分析仪的产品设计用于离线跟踪分析,能够根据不同的维度对数据进行分组和过滤,并找到性能瓶颈。
其中,扩展事件被添加到Server 2008 (http://technet.microsoft.com/en-us/library/bb630354(v=sql.105).aspx)中,它将在将来的版本中取代SQL跟踪。有关配置和使用扩展事件的其他信息可在以下位置找到:事件/
发布于 2014-04-05 18:20:43
我不建议以编程方式启动跟踪,因为开销很大。
相反,从Server获取接近跟踪质量的数据的一种低得多的开销方法是计划缓存(也就是过程缓存)。每当您将SQL语句传递到Server (即使作为存储的proc)时,Server必须为该语句构建一个执行计划。它将计划缓存在内存中以避免一次又一次地构建计划,并跟踪每个计划的使用情况。您可以获得关于调用它的次数、它运行的CPU时间和持续时间、它进行多少逻辑读取等信息。
您可以从我们的独立计划缓存查询开始:如果您希望查看哪些查询读取的数据最多--这些查询通常是索引的最佳候选项,则按逻辑读取排序的http://www.brentozar.com/responder/get-top-resource-consuming-queries/排序会下降。
如果你想更进一步,看看我的免费AskBrent。它是一个存储过程,它接受计划缓存的示例(加上Perfmon计数器、存储度量等),等待5秒,再取另一个样本,然后比较差异。结果告诉您为什么Server现在运行缓慢。
https://stackoverflow.com/questions/22802217
复制相似问题