Sql Server 2008 R2 - SSMA 转换的扩展过程调用(IMPL 过程)影响性能
Posted
技术标签:
【中文标题】Sql Server 2008 R2 - SSMA 转换的扩展过程调用(IMPL 过程)影响性能【英文标题】:Sql Server 2008 R2 - SSMA converted extended procedure calls(IMPL procedures) impacting performance 【发布时间】:2010-11-11 13:51:22 【问题描述】:我们正在进行从 Oracle 到 SQL Server 2008 的迁移项目。所以我们有很多用于调用其他存储过程的oracle包函数。这些函数已由 SSMA 转换为 IMPL 程序,这些程序通过函数的扩展程序执行。我们尽可能将大部分此类函数转换为简单的 UDF。现在我们面临一个特殊的性能问题。使用 IMPL 过程调用调用此类函数的查询需要更长的时间才能运行。有趣的是,使用 Sql Server 2008 在旧服务器上运行相同的查询只需 2 分钟。现在在带有 SQL Server 2008 R2 的新服务器中,它需要很长时间(大约 25-30 分钟)。
我们已验证索引和统计信息也是最新的。我们还注意到 IMPL 调用通过 master 和 sysdb 数据库,并使用内部表来存储并将结果从 IMPL 过程调用传回给函数。它们的空间分配与旧服务器不同。但它们并没有用完空间。他们会导致问题吗? master/sysdb 数据库的空间分配是否有任何指导方针?
数据库大约 300GB,tempdb 大约 50GB。
旧服务器
SQL Server 2008 / Windows 氙气四核 x4 - 3GHz,64GB RAM新服务器
SQL Server 2008 R2 RTM 皓龙 6 核 x6 - 2.2GHz,64GB RAM如果需要更多详细信息,请告诉我。
谢谢
【问题讨论】:
什么是 IMPL 程序?你能展示一些代码的例子吗? 能否检查一下旧服务器和新服务器上的查询计划,比较一下是否有区别?看到这个问题:***.com/questions/3944039/… 【参考方案1】:SQL Server 中的用户定义函数不仅仅是可以返回值的 SP(例如,它们不能修改数据库表)。 oracle的功能可以做的和程序可以做的基本一样。因此,许多 Oracle 函数都转换为 func_name$IMPL 存储过程 + 一些包装函数(据我所知,它通过特定于 SSMA 的扩展 SP 调用相应的 $IMPL 过程)。在可能的情况下,SSMA 将尝试避免直接调用函数(改为生成对适当 ...$IMPL SP 的调用),但某些情况未涵盖。那些更难的情况将导致直接调用生成的包装函数。我相信它们确实很慢 :( SSMA 在您的案例中没有发现更好的自动转换...因此 您应该尝试更改生成的 SQL Server 代码以直接使用 func_name$IMPL 存储过程(只使用普通的 EXEC,在性能适合您之前不要尽可能多地调用包装函数)。
【讨论】:
以上是关于Sql Server 2008 R2 - SSMA 转换的扩展过程调用(IMPL 过程)影响性能的主要内容,如果未能解决你的问题,请参考以下文章
跪求SQL Server 2008 R2 Standard (64
SQL Server2008和SQL Server2008R2的区别,高手速进
SQL Server 2008 R2 Express三个版本有啥区别?
数据库SQL server 2008 R2和SQL server 2008 能一起安装吗?为啥安装完只剩SQL server 2008 R2一个了?