以下(在我的系统上,在 SQL Server 2016 和 2019 std 上测试)产生大量内存授予请求(3327 MB)
declare @wibble xml = '<wibble><wobble>1</wobble></wibble>'
select @wibble.query('//wobble[1]')
我可以做些什么来减少补助金?
以下(在我的系统上,在 SQL Server 2016 和 2019 std 上测试)产生大量内存授予请求(3327 MB)
declare @wibble xml = '<wibble><wobble>1</wobble></wibble>'
select @wibble.query('//wobble[1]')
我可以做些什么来减少补助金?
快速查看您的 xpath 表达式
//wobble[1]
和您所拥有的测试数据,您正在寻找wobble
您可以找到的第一个。甚至可以认为您的表达式等于
(//wobble)[1]
与您的测试数据给出相同结果的表达式。使用这样的括号,您将从 XML 文档中获得第一个wobble
,并且不会为查询授予内存。因此,您可能知道使用
//wobble[1]
(不带括号)根本不一样。此查询将查看文档中的所有元素,如果其中有一个wobble
元素,它将返回第一个元素并将结果与所有元素连接起来。例如。
使用
//wobble[1]
你会得到在哪里使用
(//wobble)[1]
只会给你<wobble>1</wobble>
。如果您真的需要连接的结果,您可以粉碎您的节点,然后重建它们
for xml path
以获得更小的内存授权。对我来说,它要求 1MB 而不是 280MB。仍然带有过多内存授予的警告。//*[wobble]
为您提供具有wobble
节点的所有节点,并wobble[1]
为您提供wobble
该节点中的第一个。考虑使用 MAX_GRANT_PERCENT 提示查询:-
此处记录:- https://support.microsoft.com/en-us/kb/3107401