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 server2008升级到2008 R2出现问题

数据库SQL server 2008 R2和SQL server 2008 能一起安装吗?为啥安装完只剩SQL server 2008 R2一个了?

windows server2012 r2能安装sqlserver2008 R2吗