2009-09-17 55 views
2

上一大桌改變給定列的XML架構集合時,我看到我們的企業應用了巨大的性能損失。簡單地說,我們正在做這樣的事情: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下降)。

底線的問題是... 有沒有辦法做到這一點「XML模式重新綁定」(或任何一個調用它),以避免SQL Server的完全不必要的和多餘的每一個值的檢查方式在列中? (注意:是的,我們可以安全地假設該表中現有的XML數據將符合新的xml架構集合。)

感謝任何能夠協助的人!

+0

,如果這是一個時間的變化,需要15-20分鐘的大事情是什麼? – 2009-09-17 13:18:38

+0

KM:很好的問題!這是升級過程的一部分。不幸的是,即使半大型數據庫它採取了很長時間 - 時間 - 並導致升級失敗(超時錯誤)。作爲一家公司,我們正試圖擺脫「只是增加超時閾值」的解決方案,因爲這太過於刁鑽我們。 – Garrett 2009-09-17 18:17:29

回答

0

如果那時候真的是一個大問題(其在1次升級應該沒有真正的問題了)你能考慮只移除基礎數據,做你重新綁定到新的模式,然後做批量插入轉動所有的身份插入問題等...?

還是一個超級逐步,編寫一個腳本,它下面的批次:

  1. 更改表,並用新的模式
    結合
  2. 設置新的列數據增加一個新的XML列=新老列數據
  3. 刪除舊列。
  4. 重命名新列舊列名。
  5. 修改序數,如果需要(不同的主題...除非你所有的消費查詢安全地通過指定列名,而不是對
    底層序數依靠書面 )