在测试中,两个数据库都在一台服务器上.在生产中,A和B位于不同的服务器上.
什么可能导致这种极端延迟,可以做些什么呢?仅在对生产服务器运行时才会发生这种情况.它已在多个测试环境中运行,没有任何问题.
2016/04/08更新
如果表值参数作为IEnumerable< sqlDataRecord>传递,则性能是合理的.而不是DataTable.使用sqlDataRecord需要7秒才能传递50,000条记录,而使用DataTable需要400秒.问题与服务器有关.使用DataTable将相同数量的数据传递给另一台服务器,没有任何问题.
解决方法
The performance is reasonable if the table-valued parameter is passed
as IEnumerable instead of DataTable. It takes 7 seconds
to pass 50,000 records to using sqlDataRecord,but 400 seconds using
DataTable. The problem is server-dependent. The same volume of data is
passed to another server using DataTable with no problem.
我们发现使用sql Server设置ForceEncryption是快速执行服务器和性能低下的服务器之间的区别.如果ForceEncryption设置为Yes,则表现不佳;如果设置为No,则表现良好.此设置位于sql Server配置管理器中 – > sql Server网络配置 – >右键单击Protocols – > SelectProperties – >证书标签 – >选择你的证书 – >标签标签.
因此,要解决此问题,您有两种选择.要么关闭数据库上的ForceEncryption设置(可能不建议),要么避免使用DataTables,而是转而使用Kevin Cline建议的sqlDataRecords.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。