我有四台相同的服务器 2 用于生产,另外两台是演示机/紧急故障转移盒。更强大的机器是 16 核 127 gigs 的 Ram,它同时托管我们的 Datawarehouse 和我们的 OLTP 数据库。功能较弱的盒子是一个 8 核 98 gigs 的 ram 盒子,我们用于 ETL 和我们的数据存储。我遇到的问题是生产服务器集成服务需要大量时间来执行包验证。对于在 6 秒内返回的查询,完成包验证需要 40 秒。如您所见,这是一个相当简单的包。
请记住,这只是我作为示例使用的包,我的所有包都有相同的问题,尽管程度较轻。当我运行它时,验证部分平均需要 40 秒。
为了更好地测试这一点,我在姐妹盒子上运行了完全相同的包,它运行与此盒子相同的所有 SQL 作业。仅让执行前验证需要 0 秒,查询需要 4 到 6 秒。
为了进一步测试这一点,我对 SQL 服务器的两个实例运行了查询。
SELECT '{' + CAST(Store_Id AS CHAR(36)) + '}' AS Store_Id
,'{' + CAST(ItemGroupDetail_Id AS CHAR(36)) + '}' AS ItemGroupDetail_Id
,ItemGroupType_Id
,'{' + CAST(Concept_Id AS CHAR(36)) + '}' AS Concept_Id
,'{' + CAST(Company_Id AS CHAR(36)) + '}' AS Company_Id
,'{' + CAST(ItemGroup_Id AS CHAR(36)) + '}' AS ItemGroup_Id
,GroupName
,Sort
,NameOverride
,'{' + CAST(ParentGroup_Id AS CHAR(36)) + '}' AS ParentGroup_Id
,Active
,'{' + CAST(UserCreated AS CHAR(36)) + '}' AS UserCreated
,'{' + CAST(UserModified AS CHAR(36)) + '}' AS UserModified
FROM bos_vAllItemGroups
在具有最新日期的主服务器上执行平均在 5 秒内返回 63326 行,在 3 秒内返回 50527 行。这是可以预料的,这台服务器的活动要少得多,但我希望它会稍微快一些。我没想到的是包验证时间比实际查询运行时间增加得更多。
经过昨天的大量挖掘,我想我可能已经发现了这个问题,但不知道如何证明它。生产 OLTP 数据库管理全国各地的数字菜单板的内容,这些数字菜单板经常打电话回家以检查新内容。大多数情况下,没有什么可改变的,要找出的查询会在几毫秒内完成。但是,他们确实发送了有关此过程的信息,最终平均每秒运行 4500 个查询。这可能是我的问题的原因吗?来自我们的网络服务器的大量交易。如果是,我该如何证明?我一直在尝试让这些数据库在不同的机器上运行,因为这个 OLTP 数据库和我们的数据仓库一样增长得非常快,并且从我所有的阅读来看,将 OLAP 和 OLTP 数据库保持在同一台服务器上被认为是不好的做法。
通过一些离线对话,Zane 能够确定如果他们可以保持连接打开,这将加速验证。
为此,我建议他们更改 Connection Manager 上的属性以将 RetainSameConnection 属性
True
从其默认值翻转。合并连接和排序是出了名的慢。是否可以为具有联接的 OLE Db 源编写查询?