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

Откуда:
Сообщений: 14
Привет Всем!

столкнулся со след проблемой:
Нужно втащить из xml во врем табл.

Отставим пока вопрос о вставке в табл. Просто сделаем выборку из xml

Вариант 1)
declare @x xml
set @x = /* @_data */ '<_data><_item><bid>28493099</bid></_item></_data>'

declare @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @x

declare @t table(bid int)
insert @t
select *
from 
    openxml(@idoc, '_data/_item', 2)
    with(bid int)

EXEC sp_xml_removedocument @idoc


Вариант 2)
   CREATE PROCEDURE [dbo].[get_product_names_xml] @bids varchar(max) AS

   DECLARE @idoc  int,
           @err   int

   EXEC  @err = sp_xml_preparedocument @idoc OUTPUT, @bids
   SELECT @err
   SELECT @err = @@error + coalesce(@err, 4711)
   SELECT @err
   IF @err <> 0 RETURN @err

   SELECT bid 
   from OPENXML(@idoc, '_data/_item', 2)
          WITH (bid int)

   EXEC sp_xml_removedocument @idoc
   go

   EXECUTE get_product_names_xml '<_data><_item><bid>28493099</bid></_item></_data>'
GO


На первом варианте тормоз просто жуткий (именно на 'select * from openxml(..)'). Второй — со свистом.
Не совсем понимаю почему..
(ответ в форме: дык это же хранимка — не предлагать)

Кроме того, в шоу план для первого видим estimated number of rows = 10000.
Понятно, что это только предположительный объем, но может в этом ключ тормоза?..


А теперь, собственно, как тогда запихнуть данные из xml в таблицу чтоб было быстро!?

Заранее спасибо, Илья
17 окт 11, 11:08    [11449754]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
declare @x xml
@bids varchar(max)
ничего что параметры разного типа ?
Ничего, что
insert @t
select *
from
openxml

и
select *
from
openxml
это разные команды ?
17 окт 11, 11:41    [11449948]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
Glory,

Спасибо за ответ, но это ровным счетом ничего не дает. Это уже проскочило из перебора ( а может так, а может так..)

insert.. - убрать не вопрос, но тормоз не в нем (show plan однако..)

ВОПРОС: А у вас есть тормоза (прим сек 2-3)? при
declare @x xml -- varchar(100) -- nvarchar(100)
set @x = /* @_data */ '<_data><_item><bid>28493099</bid></_item></_data>'

declare @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @x

select *
from 
    openxml(@idoc, '_data/_item', 2)
    with(bid int)

EXEC sp_xml_removedocument @idoc
17 окт 11, 11:49    [11450028]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
insert.. - убрать не вопрос, но тормоз не в нем (show plan однако..)


Сравнивать надо одинаковые операции, а не разные
17 окт 11, 11:54    [11450084]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
Так пойдет?

Вариант 1)
declare @x xml
set @x = /* @_data */ '<_data><_item><bid>28493099</bid></_item></_data>'

declare @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @x

select *
from 
    openxml(@idoc, '_data/_item', 2)
    with(bid int)

EXEC sp_xml_removedocument @idoc


Вариант 2)
   CREATE PROCEDURE [dbo].[get_product_names_xml] @bids xml AS

   DECLARE @idoc  int
   EXEC  sp_xml_preparedocument @idoc OUTPUT, @bids

   SELECT bid 
   from OPENXML(@idoc, '_data/_item', 2)
          WITH (bid int)

   EXEC sp_xml_removedocument @idoc
   go

   EXECUTE get_product_names_xml '<_data><_item><bid>28493099</bid></_item></_data>'
GO
17 окт 11, 12:01    [11450153]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вижу совершенно одинаковые планы с одним RemoteScan-ом

+ Статстика 1го запроса
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

(1 row(s) affected)

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.



+ Статстика процедуры
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

(1 row(s) affected)

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 8 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 9 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

Microsoft SQL Server 2005 - 9.00.3080.00 (Intel X86) Sep 6 2009 01:43:32 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
17 окт 11, 13:11    [11450848]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
ВСЕ РАВНО МЕДЛЕННО!

Меня вообще смущают те силы, кот сервак затрачивает на исполнение такого запроса.

declare @x xml
set @x = /* @_data */ '<_data><_item><bid>28518521</bid></_item><_item><bid>28537468</bid></_item></_data>'

declare @x2 xml
set @x2 = (
            select @x.query('_data/_item/bid[1]')
            )


Один memory grant чего стоит.. = 3786240 !
Это же почти 4Гб!

Может я не то что-то понимаю?
Может в серваке что-то надо подкрутить ?
19 окт 11, 13:06    [11465532]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
ВСЕ РАВНО МЕДЛЕННО!

И чем докажите ?

Peshuha
Один memory grant чего стоит.. = 3786240 !

Вы о чем ?
19 окт 11, 13:10    [11465580]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
Файл плана в прищепке

К сообщению приложен файл (Execution plan.rar - 6Kb) cкачать
19 окт 11, 15:16    [11466909]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
как .sqlplan соббсно

К сообщению приложен файл (1.sqlplan.rar - 5Kb) cкачать
19 окт 11, 15:18    [11466920]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
iljy
Member

Откуда:
Сообщений: 8711
Peshuha,

это шутка такая - выкладывать зашифрованные архивы?
19 окт 11, 15:22    [11466965]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
Ой, простите.. честно говоря даже и не знал, что у меня тут такое.. рарит себе по умолчанию..

К сообщению приложен файл (1.sqlplan.rar - 5Kb) cкачать
19 окт 11, 15:55    [11467283]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
Ой, простите.. честно говоря даже и не знал, что у меня тут такое.. рарит себе по умолчанию..

А почему опять текст запроса в плане не соответствует заявленному здесь ?
Что это за
set @x2 = (
            select @x.query('_data/_item/bid[1]')
            )
19 окт 11, 16:15    [11467433]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
не понял..
скачал файл, открыл, все есть. Чего не хватает?
20 окт 11, 07:18    [11470044]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
а так?..

К сообщению приложен файл (1.showplan.rar - 3Kb) cкачать
20 окт 11, 07:22    [11470048]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
скачал файл, открыл, все есть. Чего не хватает?

Какой скрипт тестируется ? Такое впечатление, что запускате вы один скрипт,а публикуете другой
20 окт 11, 08:38    [11470134]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
посм последний файл (~3Кб)
20 окт 11, 08:39    [11470140]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
Сделал в итоге чз хранимку

ALTER PROCEDURE [dbo].[p_AddBIDs]
	@x xml
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	insert #bid
	select bid2.value('.', 'int')
	from @x.nodes('_data/_item/bid') t(bid2)
END

и юзинг:
create table #bid (bid int)
exec p_AddBIDs '<_data><_item><bid>...</bid><bid>...</bid></_item></_data>'
drop table #bid

вот так - скорость яяявно по лучше.
Меня еще больше прикалывает тот факт, что нельзя задать путь у nodes через переменную.
Короче, MS, как всегда - на высоте ((((((((( (бе)
20 окт 11, 11:31    [11471176]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
Короче, MS, как всегда - на высоте

Жаль только, что так оставлись непонятными притензии
20 окт 11, 11:33    [11471192]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
iljy
Member

Откуда:
Сообщений: 8711
Peshuha
Меня еще больше прикалывает тот факт, что нельзя задать путь у nodes через переменную.

То, что вы чего-то не умеете, вовсе не означает, что это не возможно.
20 окт 11, 11:40    [11471269]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
iljy
Peshuha
Меня еще больше прикалывает тот факт, что нельзя задать путь у nodes через переменную.

То, что вы чего-то не умеете, вовсе не означает, что это не возможно.


Пожалуйста.. Напишите сами..

Можете проверить:
declare @x xml
set @x = '<_data><_item><bid>1</bid><bid>2</bid></_item></_data>'

declare @xpath nvarchar(100)
set @xpath = '_data/_item/bid'

select bid2.value('.', 'int')
from @x.nodes(@xpath) t(bid2)

Msg 8172, Level 16, State 1, Line 7
Аргумент 1 метода типа данных XML "nodes" должен быть строковым литералом.
21 окт 11, 07:20    [11476251]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Peshuha
Member

Откуда:
Сообщений: 14
Glory
Peshuha
Короче, MS, как всегда - на высоте

Жаль только, что так оставлись непонятными притензии


я вот так и не понял: понадобился sqlplan, кот я выкладывал здесь, смотрели его ?..

Вы меня простите, но присылать вот такое "информативное" тоже не очень понятно
Glory

- Статстика 1го запроса
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

(1 row(s) affected)

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.


Чего здесь север экзекьюшн, чего парсед.., потоков данных нет..

==========================================================
Теперь собственно ответ на тек письмо
В чем их не понятность?

1) Я выражаю свой шок по поводу того, какие ресурсы и время ответа задействованы сервером MS SQL при отработке запросов, связанных с обработкой xml данных.
По мне, xml а-ля
'<_data><_item><bid>...</bid><bid>...</bid></_item></_data>'
эквивалентен табличке в одно поле с двумя строками. И скорость обработки я ожидал сопоставимой со скоростью отработки прим такого варианта
declare @t table (bid int)
insert @t
select 1 union all
select 2

В конце концов, если написать программу на басике с выборкой данных из того xml кот я представил с тем же путем (см пред посты)
он и то отработает быстрее.

ПС: если у кого это не так: может у меня с серваком что-то?, может что-то надо подкрутить ?..
сервак MS SQL 2008R2

2) Такое же удивление у меня вызывает, что в хранимке этот же запрос выполняется раз в 10 быстрее. Неужели всю эту дельту времени занимает разбор текста и его "компиляция". Сомневаюсь.. Такое впечатление, что он грузит какую-то мощную библиотеку "на все случаи жизни", готовясь к массовой атаке данными.
Бесспорно, если выполнять этот запрос раз за разом, не разрывая соединение с базой, то он на второй раз "полетит". Может оттуда вы как раз и взяли
Glory
...
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
...

Я намеренно разрываю каждый раз соединение и меня интересует именно такой вариант его выполнения.

3) Ну и это как всегда: нельзя заполнить таблицу данными в хранимке, передавая ее имя как параметр..

Извините, если что не так
Илья
21 окт 11, 07:53    [11476275]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
Вы меня простите, но присылать вот такое "информативное" тоже не очень понятно
Glory
- Статстика 1го запроса
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

(1 row(s) affected)

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.


Чего здесь север экзекьюшн, чего парсед.., потоков данных нет..


Были взяты предложенные вами же скрипты
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=888303&msg=11450153
Вот они и парсед и экзекьтед
21 окт 11, 08:40    [11476354]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
я вот так и не понял: понадобился sqlplan, кот я выкладывал здесь, смотрели его ?..


Смотрел. Только не увидел там "ВСЕ РАВНО МЕДЛЕННО!"
21 окт 11, 08:42    [11476360]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML тормоза  [new]
Glory
Member

Откуда:
Сообщений: 104751
Peshuha
Такое же удивление у меня вызывает, что в хранимке этот же запрос выполняется раз в 10 быстрее

И это все можно увидеть из вашего плана выполнения ?

Peshuha
Я намеренно разрываю каждый раз соединение и меня интересует именно такой вариант его выполнения.


Вот вы интересный. Откуда кто-то должен знать, что и как вы делаете
Вы пришли, сделали громкое заявление.
Ни привели ни нормальных тестовых скриптов, ни результатов, ни тестовой среды
Одни распальцовки о том, как это сделано плохо
21 окт 11, 08:46    [11476371]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить