xml架构集合更改 - 巨大的性能损失

时间:2009-09-17 12:56:38

标签: xml sql-server-2005 performance tsql

在更改大型表上给定列的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架构集合。)

感谢任何可以提供帮助的人!

1 个答案:

答案 0 :(得分:0)

如果时间真的是一个大问题(一次升级应该不是很重要)你可以考虑删除基础数据,重新绑定到新架构,然后进行批量插入转为全部身份插入问题等...?

或者对于超级逐步,编写一个脚本来执行以下批处理:

  1. 更改表并使用新架构添加新的XML列 结合
  2. 设置新列数据=新旧列数据
  3. 放下旧栏。
  4. 将新列重命名为旧列名称。
  5. 根据需要修改普通性(不同的主题......除非所有消费的查询都被写入 安全地通过指定列名而不是依赖于 潜在的正常性)