我可能错过了这个难题的一些部分,但这就是我所拥有的:
所有这些都是由一家外部公司为我们编写的。
有一个 .Net 应用程序在服务器 A 上作为服务运行。
在该应用程序内部,正在调用 SSIS 包。DTEXEC
?
这些包(总共 37 个)连接到两个不同的 SQL Server (B&C),提取一些数据,对其执行计算,然后将结果插入到服务器 C 上的数据库中。
在 37 个包中,只有少数是我的问题区域。我看过细节,里面有很多很多的任务。
.Net 应用程序所在的服务器 A 上没有 SQL Server 组件(数据库引擎或 SSIS),因此这一切都在应用程序内部进行。.Net 在盒子上使用 1 个 20 核的 NUMA 节点,1TB RAM。
这个应用程序是 3.0 版本,添加了新功能。2.4(以前的版本)在相同的硬件上运行良好。
所有这些背景都问这个:
有什么方法可以在 .Net 应用程序内的 SSIS 包中找到性能不佳的 T-SQL?还是我在等式中遗漏了一些非常明显的东西?
归结为:“计算/T-SQL 实际在哪里运行”(A 与 B/C),如果在 .Net 空间内,我如何跟踪/调整它们?
Profilersp_whoisactive
等都指向 SQL 实例。这一切都发生在 .Net 应用程序内部,除了从 B 中选择数据并在计算后插入到 C 中的小例外。所有网络、磁盘等都运行良好。如果存在这种情况,我正在寻找一种可以进入.Net SSIS 的调优工具。
这绝对是一个调优问题,但 Profilersp_whoisactive
等显示的时间可能不超过 3 秒,最远低于 1/2 秒或更短。我对.Net知之甚少,无法知道这些T-SQL任务是否真的像我认为的那样在该内存空间内的服务器A上运行,或者它们是否太多以至于它们全部聚合成“太长” ”。
我希望我被允许在 SSIS 中启用大量日志记录,但这是我不允许触摸的供应商代码的一部分,即使用于日志记录 :(
这个问题所针对的环境早已被多次拆除和重新利用。
该问题在当前的 UAT 迭代中再次出现……我们发现有人将应用程序的一部分指向 Program Files(x86) 中 32 位版本的 dtexec.exe,而不是正确的 64 位版本。
哎呀。大量的研究和这个 DBA.SE帖子让我到达了那里。
我的日志中第一次没有的消息:
还有一些 SSIS 特定的性能计数器有助于:
我在这里详细介绍了很多步骤:http: //dallasdbas.com/ssis-memory-errors/
希望这对其他人有所帮助!
你看过 RedGate 的反光板吗?这听起来就像您正在寻找的那样。
注意:我与 RedGate 没有任何关系。网络搜索解决问题!