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

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

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


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

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

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

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

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

да не, это вообще с 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
Вставка в InMemory таблицу и параллельный план выполнения
    #40078381
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вставка в InMemory таблицу и параллельный план выполнения
    #40078386
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

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

попробуйте у себя выполнить
Код: 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
Вставка в InMemory таблицу и параллельный план выполнения
    #40078411
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

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

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


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