在更改大型表上给定列的XML架构集合时,我看到我们的企业应用程序中出现了巨大的性能损失。简单地说,我们正在做这样的事情:
ALTER TABLE HugeTable ALTER COLUMN CustomFields XML
(注意:CustomFields先前已绑定到XML(CustomFieldsSchemaCollection,但当然我们需要修改该xml架构,因此我们需要此语句以便可以修改该架构)
然后,在修改CustomFieldSchemaCollection之后,我们这样做:
ALTER TABLE HugeTable ALTER COLUMN CustomFields XML(CustomFieldSchemaCollection)
第一个语句需要8分钟,第二个语句需要10分钟。
我们发现我们可以通过使用以下内容稍微优化第一个语句(50%性能提升):
ALTER TABLE HugeTable ALTER COLUMN CustomFields nvarchar(max)
结果是第一个语句需要4分钟,第二个语句需要10个(所以,14分钟,从18个减少)。
底线问题是...... 有没有办法以一种避免SQL Server完全不必要和冗余检查列中每个值的方式执行“xml架构重新绑定”(或任何人调用它)? (注意:是的,我们可以安全地假设该表中的现有XML数据将符合新的xml架构集合。)
感谢任何可以提供帮助的人!
答案 0 :(得分:0)
如果时间真的是一个大问题(一次升级应该不是很重要)你可以考虑删除基础数据,重新绑定到新架构,然后进行批量插入转为全部身份插入问题等...?
或者对于超级逐步,编写一个脚本来执行以下批处理: