簡體   English   中英

SQL 查詢 XML 在 2000 年運行良好,在 2008 年 R2 運行緩慢

[英]SQL Query FOR XML runs fine in 2000, slow in 2008 R2

我正在將客戶的 SSIS 包從 DTS 轉換為 SSIS。 在他們的一個包中,他們有一個執行 SQL 任務,其查詢類似於:

SELECT * FROM [SOME_TABLE] AS ReturnValues 
ORDER BY IDNumber
FOR XML AUTO, ELEMENTS

此查詢在舊系統上似乎在相當長的時間內返回,但在新機器上,在 SSMS 中運行查詢最多需要 18 分鍾。 有時,如果我運行它,它會生成一個 XML 鏈接,如果我點擊它查看 XML,它會拋出一個“System.OutOfMemoryException”並建議增加從服務器檢索到的 Z3501BB093D36CFED3F8B 的字符數。 我將選項增加到無限制,但仍然出現錯誤。

該表本身包含 220,500 行,但在查詢停止之前返回的查詢行顯示為 129,810。 這僅僅是系統沒有足夠的 memory 可用的問題嗎? 這個盒子有 48 GB(Win 2008 R2 EE x64),實例上限為 18 GB,因為它的共享開發環境。 任何幫助/見解將不勝感激,因為我並不真正了解 XML!

當你使用SSMS做XML查詢FOR XML時,它會生成所有的XML,然后放到網格中讓你點擊它。 它帶回的數據量有限制,有 220,000 行,具體取決於表的寬度、巨大並產生大量文本。

memory 的原因是 SQL 服務器正在嘗試解析所有這些,這是 SSMS 的大量 memory 消耗。

您可以嘗試執行到文件並查看大小。 但是用完 memory 的主要原因是因為有很多 XML 並將其返回到網格中,使用這種類型的結果集(大小明智),您不會一直得到所有結果。

DBADuck(本)

您遇到的 memory 異常是由於 .net 網格控件可以處理的文本量所致。 220k 行是巨大的。 SSMS 中顯示無限數據的設置僅與 .net 控制 memory 上限一樣好。

您可以查看刪除 ELEMENTS 選項並查看屬性格式的數據。 這將減少 XML “字符串空間”返回的數量。 就個人而言,僅出於這個原因,我更喜歡屬性而不是元素。 上下文為王,所以這取決於您要完成的工作(查看數據或使用數據)。 你可以將 pipe 數據放入 XML 變量中嗎? 總而言之,DBADuck 在他的陳述中是 100% 正確的。

SqlNightOwl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM