Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вставка в InMemory таблицу и параллельный план выполнения / 15 сообщений из 15, страница 1 из 1
16.06.2021, 22:15
    #40078091
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Обнаружил, что вставка путём INSERT ... SELECT ... в InMemory таблицу (SCHEMA_ONLY) производит исключительно однопоточный план выполнения. То, что параллельная вставка невозможна, я нашел информацию. Но не нашел о том, что такая вставка влияет на весь план запроса.
Можно ли добиться параллельного плана выполнения?
...
Рейтинг: 0 / 0
17.06.2021, 01:27
    #40078127
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Владислав Колосов,

нет, обычно во всех планах для NonParallelReason будет присутствовать значение NonParallelForDmlOnMemoryOptimizedTable

параллельного плана выпонения можно вроде добиться если целевой таблицей для инструкции DML не является таблица оптимизированная для памяти, в противном случае план всегда будет последовательным.
...
Рейтинг: 0 / 0
17.06.2021, 07:50
    #40078148
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Владислав Колосов
Обнаружил, что вставка путём INSERT ... SELECT ... в InMemory таблицу (SCHEMA_ONLY) производит исключительно однопоточный план выполнения. То, что параллельная вставка невозможна, я нашел информацию. Но не нашел о том, что такая вставка влияет на весь план запроса.
Можно ли добиться параллельного плана выполнения?


Запустить 2, 3, ... многа INSERT-а?
...
Рейтинг: 0 / 0
17.06.2021, 11:10
    #40078198
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Понятно, неприятный сюрприз. Хотя что мешало выполнить план параллельно и сделать последовательную вставку как это было раньше, до введения параллельной вставки.
...
Рейтинг: 0 / 0
17.06.2021, 11:15
    #40078200
uptopz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
:) :)
...
Рейтинг: 0 / 0
17.06.2021, 12:12
    #40078242
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
felix_ff,

как можно увидеть NonParallelReason? Какой-то флаг трассировки включить?
...
Рейтинг: 0 / 0
17.06.2021, 13:24
    #40078276
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Владислав Колосов
как можно увидеть NonParallelReason?
В свойствах корневого узла плана выполнения.
...
Рейтинг: 0 / 0
17.06.2021, 13:26
    #40078277
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Владислав Колосов,

план запроса в виде xml посмотреть.

ну или если в графическом варианте он на результирующем узле в плане эту информацию отражает.
...
Рейтинг: 0 / 0
17.06.2021, 13:59
    #40078283
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
felix_ff,

у меня нет такого в xml или на корневом узле, может это появилось в SQL2019?
...
Рейтинг: 0 / 0
17.06.2021, 15:41
    #40078314
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Владислав Колосов,

да не, это вообще с 2014 когда Hekaton появился.

вот вам ссылочка еще где чувак сталкивался с той же проблемой.
https://stackoverflow.com/questions/45026111/insert-from-memory-optimized-table-to-physical-table

отмечу что: именно эта кляуза, в плане появляется если целевой таблицей dml инструкции будет выступать XTP-таблица.


в туже тему:
https://www.nikoport.com/2018/01/20/parallelism-in-hekaton-in-memory-oltp/
...
Рейтинг: 0 / 0
17.06.2021, 18:26
    #40078381
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
felix_ff,

спасибо за подробности, я имел в виду, что в своем XML плане я не нахожу ключевое слово NonParallelReason. MaxDOP = 0.

Код: xml
1.
<QueryPlan DegreeOfParallelism="1" CachedPlanSize="24" CompileTime="1" CompileCPU="1" CompileMemory="264">



Microsoft SQL Server 2017 (RTM-CU24) (KB5001228) - 14.0.3391.2 (X64) Apr 28 2021 10:32:18 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Enterprise 10.0 <X64> (Build 18363: )
...
Рейтинг: 0 / 0
17.06.2021, 18:45
    #40078386
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Владислав Колосов,

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

попробуйте у себя выполнить
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
drop table if exists [tmem], [tnonmem];
create table [tmem] (id int primary key nonclustered) with (memory_optimized=on)
create table [tnonmem] (id int primary key nonclustered)
set statistics xml on;

insert into [dbo].[tmem] 
select top(1000000) row_number() over (order by 1/0) from master.dbo.spt_values c1 
cross join master.dbo.spt_values c2 
option (maxdop 1, querytraceon 8649, querytraceon 8757);

insert into [dbo].[tmem] 
select top(1000000) 1000000+row_number() over (order by 1/0) from master.dbo.spt_values c1 
cross join master.dbo.spt_values c2 
option (maxdop 2, querytraceon 8649, querytraceon 8757);


insert into [dbo].[tnonmem] with(tablock) 
select top(1000000) row_number() over (order by 1/0) from master.dbo.spt_values c1 
cross join master.dbo.spt_values c2 
option (maxdop 1, querytraceon 8649, querytraceon 8757);

insert into [dbo].[tnonmem] with(tablock) 
select top(1000000) 1000000+row_number() over (order by 1/0) from master.dbo.spt_values c1 
cross join master.dbo.spt_values c2 
option (maxdop 2, querytraceon 8649, querytraceon 8757);

set statistics xml off;

drop table if exists [tmem], [tnonmem];



в первых трех планах она будет присутствовать, а в последнем нет.
если не так, то видимо это специфика RTM выпуска возможно.

я проверял на своей 2016 Enterprise SP2-CU-6
...
Рейтинг: 0 / 0
17.06.2021, 21:11
    #40078411
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
felix_ff,

по всей видимости, такое поведение by design в моём случае, NonParallelPlanReason присутствует только в первом и третьем планах.
...
Рейтинг: 0 / 0
18.06.2021, 16:26
    #40078664
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
...
Рейтинг: 0 / 0
18.06.2021, 17:07
    #40078674
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка в InMemory таблицу и параллельный план выполнения
Александр Гладченко,

да, я читал об этом исправлении, оно касается лишь просмотра МО, а если МО таблица является целью, то план выполнения остается последовательным: INSERT, UPDATE, DELETE, and MERGE statements that involve modification of a memory-optimized table or table variable continue to be serial.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вставка в InMemory таблицу и параллельный план выполнения / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]