Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sql2005 чем заменить OPENXML?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
чем в 2005 заменить ? сильно неоптимально работает

select * from openxml(....)
20 авг 09, 13:31    [7561531]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Пример:
DECLARE @x xml
SET @x='
<Root>
    <row id="1" name="Larry" />
    <row id="2" name="Joe" />
    <row id="3" />
</Root>
'
SELECT T.c.value('@id','int') as id,
       T.c.value('@name', 'varchar(30)') as NAME
FROM   @x.nodes('/Root/row') T(c)
GO
20 авг 09, 13:48    [7561678]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
pacha
Member

Откуда:
Сообщений: 239
Winnipuh
чем в 2005 заменить ? сильно неоптимально работает

select * from openxml(....)

ИМХО, openxml наиболее оптимальный способ получения рекордсета из xml в 2005 сервере.
Пробовал через nodes читать xml с 11 уровнями вложенности нод. query processor сдох
Msg 8623, Level 16, State 1, Line 280
The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.

Через openxml тот же запрос работает на ура.
20 авг 09, 13:54    [7561725]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
тогда не пойму, что пишет план выполнения

есть процедура, в ней разборка строки-хмл через openxml, далее поиск, запись ов временные таблицы, чтение из них....

На чтении из openxml query cost = 59% (!!) . там всего две записи....
20 авг 09, 14:21    [7561922]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
да, а общее вермя выполнения процедуры - около минуты. Вот я и подумал, что 59% от 1 минуты - это 36 сек и стоит пооптимизировать именно это кусок.... странно всё это.
20 авг 09, 14:23    [7561933]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
pacha
Member

Откуда:
Сообщений: 239
Winnipuh
да, а общее вермя выполнения процедуры - около минуты. Вот я и подумал, что 59% от 1 минуты - это 36 сек и стоит пооптимизировать именно это кусок.... странно всё это.

Очень странное время выполнения. У меня на чтение через openxml того самого файла про который я упоминал выше, размер ~60 МБ, 11 уровней вложенности данных, уходит пара секунд
20 авг 09, 14:40    [7562068]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31182
Winnipuh
тогда не пойму, что пишет план выполнения

есть процедура, в ней разборка строки-хмл через openxml, далее поиск, запись ов временные таблицы, чтение из них....

На чтении из openxml query cost = 59% (!!) . там всего две записи....
openxml можно по разному написать.

Для больших объёмов лучьше использовать формат краевой таблицы.
20 авг 09, 14:43    [7562082]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
pacha
Winnipuh
да, а общее вермя выполнения процедуры - около минуты. Вот я и подумал, что 59% от 1 минуты - это 36 сек и стоит пооптимизировать именно это кусок.... странно всё это.

Очень странное время выполнения. У меня на чтение через openxml того самого файла про который я упоминал выше, размер ~60 МБ, 11 уровней вложенности данных, уходит пара секунд



это и сбивает с толку...

когда я взял этот кусок и сделал отдельный скрипт - он выполнился за доли секунды.
В процедуре именно актуальный план показывает на него как на самое дохлое место.
20 авг 09, 14:46    [7562109]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31182
Winnipuh
это и сбивает с толку...

когда я взял этот кусок и сделал отдельный скрипт - он выполнился за доли секунды.
В процедуре именно актуальный план показывает на него как на самое дохлое место.
Так можно трейсом посмотреть...
20 авг 09, 14:52    [7562141]     Ответить | Цитировать Сообщить модератору
 Re: sql2005 чем заменить OPENXML?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
КО
Winnipuh
это и сбивает с толку...
В чём разница?:
DECLARE @x xml
SET @x='
<Root>
    <row id="1" name="Larry" />
    <row id="2" name="Joe" />
    <row id="3" />
</Root>'
SELECT T.c.value('@id','int') as id,
       T.c.value('@name', 'varchar(30)') as NAME
FROM   @x.nodes('/Root/row') T(c)
GO ------------------------------------------------------------------
DECLARE @x xml
SET @x='
<Root trash="01234 ... петабайт данных ... 567890">
    <row id="1" name="Larry" trash="01234 ... петабайт данных ... 567890" />
    <row id="2" name="Joe" trash="01234 ... петабайт данных ... 567890"/>
    <row id="3" trash="01234 ... петабайт данных ... 567890"/>
</Root>'
SELECT T.c.value('@id','int') as id,
       T.c.value('@name', 'varchar(30)') as NAME
FROM   @x.nodes('/Root/row') T(c)
GO
В результатах запросов? Во времени выполнения? В планах запросов?

План запросов нельзя точно оценить (да, порой и настолько), не говоря вообще о нахождении оптимального.
С петабайтом перегнул, там-то и 2 гига еле влезет. :)
21 авг 09, 01:03    [7564423]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить