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

Откуда: Москва
Сообщений: 1176
SELECT 
	id,
	*
from dbo.test_xml_Source S
where 
	S.Doc.exist('Период/Вариант_Периода/Источник/Форма/@Код[. = "11701"]') = 1
	and 
	S.Doc.exist('Период/Вариант_Периода/@Вариант_НСИ[. = "0000"]') = 1
	and
	S.Doc.exist('/Период/Вариант_Периода/Источник/Форма/Вариант_Формы/Документ/@ВБ.Код[. = "09"]') = 1

играюсь тут.
запросик к табличке c 2мя полями ID + xml.
на хмл создал все индексы, что возможно.
один и тот же запрос гоняю в цикле.
cpu 30, duration 1600.
поясните до рые люди, откуда такой адский дюрейшен? reads 13000.
буфферный кеш на хмл индексах как-то иначе работает?
7 апр 17, 22:53    [20379718]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176


К сообщению приложен файл. Размер - 25Kb
7 апр 17, 22:54    [20379722]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Владислав Колосов
Member

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

3 вложенных цикла, не удивительно количество чтений.
8 апр 17, 01:44    [20379916]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Владислав Колосов,

Это разве те цифры, что бы получить 1.6 сек?
8 апр 17, 02:04    [20379925]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
aleks2
Guest
Mike_za
Владислав Колосов,

Это разве те цифры, что бы получить 1.6 сек?


А разобрать хмл?

Надо быстро - не надо хмл.
8 апр 17, 11:37    [20380204]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
задача стоит так: есть очень много хмл, в них куча атрибутов... хотим быстро искать по их комбинациям. не хотим отдельно ничего нормализовывать,

собственно вопрос: есть ли удачные примеры таких решений на мс скле? мне думается, что оно в теории вообще взлететь не может.
8 апр 17, 12:03    [20380235]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1451
Mike_za,

индексы построили как обычные xml index?

Можно попробовать использовать selective xml индексы если структура загруженных xml идентична
8 апр 17, 13:16    [20380357]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Mike_za
cpu 30, duration 1600.
Посмотрите какие ожидания есть при выполнении запроса.
8 апр 17, 13:21    [20380360]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Первичный хмл, и все три очтальных типа. Для экспериментов. Потом решим что оставлять, если решим...
Sql2008 имеем. селективные вроде с 2012
8 апр 17, 14:21    [20380479]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
invm
Mike_za
cpu 30, duration 1600.
Посмотрите какие ожидания есть при выполнении запроса.

Спасибо))) тупанул, среди 3х финальных хмле оказалсь одна на 15 метров. Уперлось в сеть.
8 апр 17, 14:32    [20380497]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
И раз уж мой второй топик прибили, то возвращаюсь к общей задаче.

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

Понятно, что если ищем по хорошо селективному атрибуту, то все чудесно. Но в общем случае идея мне кажется совсем не реальной.
У кого-то был удачный опыт?
8 апр 17, 14:42    [20380515]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Закачал 10к одинаковых документов, но сделал один реквизит внутри уникальным.
Оптимизатор в оценках уникальность атрибута не сечет(потому что все остальные неселективные), скан кластерного таблицы
Пусть у нас в хмл 1000 реквизитов.
Какие вообще шансы на адекватные планы, если 500 реквизитов будут одинаковыми для всех документов, и только пара процентов уникальны?
Я правильно понимаю, что эти хмл индексы выглядит как EAV хранилище?
8 апр 17, 21:05    [20381064]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176


К сообщению приложен файл. Размер - 35Kb
8 апр 17, 21:08    [20381072]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Mike_za
cpu 30, duration 1600.
поясните до рые люди, откуда такой адский дюрейшен? reads 13000.
буфферный кеш на хмл индексах как-то иначе работает?
ИМХО на хмл неправильно показывается время CPU. Которое на самом деле большое, и тратится на разбор хмл.

Вы представляете, во сколько миллионов раз быстрее компьютер читает цифру из 4х байтной ячейки памяти, про сравнению с побайтовым чтением хмл-кода, и разбирательством, где же там этот "Период/Вариант_Периода/Источник/Форма/@Код"?

Mike_za
мне думается, что оно в теории вообще взлететь не может.
+1
Mike_za
есть ли удачные примеры таких решений на мс скле?
Думаю, не на MSSQL то же самое, выковыривание "нод" из текста не может быть быстрее, скажем, операций с элементами массива.
9 апр 17, 20:41    [20382839]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
alexeyvg, Спасибо.
Речь все же идет про индексированную хмл. Сервер уже там в виде таблицы ее держит.
10 апр 17, 07:29    [20383501]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
не могу до конца понять, как работает кластерный XML INDEX.

select 
	i.index_id,
	i.name,
	i.type_desc,
	ord = ic.index_column_id,
	c.name
from sys.indexes i
inner join sys.index_columns ic on ic.object_id = i.object_id  and ic.index_id = i.index_id
inner join sys.columns c on c.object_id = ic.object_id and c.column_id = ic.column_id
where 
	i.object_id = object_id('sys.xml_index_nodes_646022377_256000')
order by 
	1, 4, 5

поля идут id, pk1

set statistics io  on 
select * from sys.xml_index_nodes_950023460_256000 where pk1 = 10000
set statistics io  off 

(5 row(s) affected)

Table 'xml_index_nodes_950023460_256000'. 
Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

в плане
Seek Keys[1]: Prefix: [Skif_BP].[sys].[xml_index_nodes_950023460_256000].pk1 = Scalar Operator((10000))


запрос отрабатываем мгновенно. Обясните
10 апр 17, 11:36    [20384333]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
сам себе поясню. Ошибся в запросе.

К сообщению приложен файл. Размер - 20Kb
10 апр 17, 11:50    [20384400]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Следующая непонятка.
зачем серверу заход в кластерный ключ основной таблицы? он же уже извлек ID, который и есть pk1 = ID

https://yadi.sk/i/Zl1ohvGl3GpBHQ

К сообщению приложен файл. Размер - 81Kb
10 апр 17, 12:16    [20384474]     Ответить | Цитировать Сообщить модератору
 Re: запрос к xml cpu vs duration  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Неужели никто не встречал похожего на официальное объяснение?
Почему покрывающий запрос вторичный хмл индекс запрос не покрывает?
Пока ощущение, что он так блокировки разруливает....
13 апр 17, 00:11    [20396502]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить