我有一个SSIS包作为项目的一部分。通过SSIS从我的机器运行时,处理15M记录大约需要15分钟。 一旦部署到服务器上的目录并运行一个作业,它现在已经持续了2个多小时。
这个特定的软件包正在服务器本身移动数据(在分段中),因此没有网络瓶颈。
以下是SP_WHO3的一些统计数据:
cpu_time:484482
requested_memory_kb:2469520
granted_memory_kb:2469520
ideal_memory_kb:14508048
query_cost:85.3073051231772
wait_type:ASYNC_NETWORK_IO
查看服务器上的资源监视器,我看到磁盘I / O非常高(当然),主要是系统进程,大约190,000,000 B / Sec,而远远超过sqlserver。 exe为~300,000 B / Sec
使用BufferTempStoragePath将软件包配置为c:\ temp \ DefaultBufferMaxRows = 10,000 DefaultBufferSize = 10,485,760
为了找到执行缓慢的根本原因,我应该继续查看哪里?
谢谢!
答案 0 :(得分:1)
ASYNC_NETWORK_IO是由客户端代码不足以快速消耗来自SQL的行引起的
您是否已将程序包部署到要查询数据的同一服务器上? 因为处理这些行需要SQL服务器可能正在使用的内存。
在PC上本地运行它会分离此负载。
"系统流程,大约190,000,000 B / Sec"因为内存不足,你可能会在很多内存分页中捣乱磁盘和内存。
就个人而言,我总是使用单独的专用ETL(SSIS)服务器。
但是,我会检查您的SQL Server最大内存并减少它以允许SSIS包运行。