powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / При вставки строк в таблицы dbo.table VS #table
13 сообщений из 13, страница 1 из 1
При вставки строк в таблицы dbo.table VS #table
    #40062919
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица физическая и временная

Код: 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.
30.
31.
32.
33.
SET NOCOUNT ON;


-- физ таблиц
drop table dbo.test
create table dbo.test(a int not null)

declare @i as int = 1;

while @i < 10000
begin
	
	insert into dbo.test values(@i)
	set @i = @i + 1

end



-- врем таблица
drop table #test
create table #test(a int not null)


declare @i as int = 1;

while @i < 10000
begin
	
	insert into #test values(@i)
	set @i = @i + 1

end


План запроса у них один, почему вставка во временную таблицу быстрее, из-за статистики или из-за записи на диск?
Если вставку в физ таблицу сделать с помощью транзакции, скорость получаем похожую при вставки во временную

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- физ таблиц
begin tran

drop table dbo.test
create table dbo.test(a int not null)

declare @i as int = 1;

while @i < 10000
begin
	
	insert into dbo.test values(@i)
	set @i = @i + 1

end

COMMIT
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062931
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha,

модель восстановления в базе какая?
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062948
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha
Если вставку в физ таблицу сделать с помощью транзакции, скорость получаем похожую при вставки во временную
Всегда так было.
При коммите транзакции выполнение продолжается после физической записи лога на диск (точнее, когда контроллер скажет, что запись в лог состоялась). Соответственно, без общей транзакции будет ожидание на каждую записанную строку.
А при записи во временную таблицу запись в лог кешируется.
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062949
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Focha,

модель восстановления в базе какая?
От модели такое поведение не зависит.
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062951
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Focha
Если вставку в физ таблицу сделать с помощью транзакции, скорость получаем похожую при вставки во временную
Всегда так было.
При коммите транзакции выполнение продолжается после физической записи лога на диск (точнее, когда контроллер скажет, что запись в лог состоялась). Соответственно, без общей транзакции будет ожидание на каждую записанную строку.
А при записи во временную таблицу запись в лог кешируется.

Логи отключить можно как-то на конкретную схему? БД не OLTP, да и вообще используется для расчетов
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062958
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha,

ALTER DATABASE ... SET DELAYED_DURABILITY = FORCED
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062959
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha,

Ваш скрипт выполняется в режиме autocommit. Т.е. каждый insert - отдельная транзакция.
В обычной БД по commit происходит сброс буфера ЖТ на диск.
Но tempdb - специальная БД и в ней по coommit ничего на диск не сбрасывается.

Отсюда и разница в скорости.
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062960
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архивариус
Focha,

ALTER DATABASE ... SET DELAYED_DURABILITY = FORCED

спасибо, да теперь вставка в физическую таблицу ускорилась.
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40062980
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha
архивариус
Focha,

ALTER DATABASE ... SET DELAYED_DURABILITY = FORCED

спасибо, да теперь вставка в физическую таблицу ускорилась.
Что, прям на проде? :-)
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40063029
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторSET DELAYED_DURABILITY = FORCED

Сурово! Надеюсь, база маловажная?
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40063117
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Что, прям на проде? :-)
не OLTP
Владислав Колосов
Сурово! Надеюсь, база маловажная?
да

Пользователи загружают данные из Экселей и потом запускают расчет и получают результат.
Если сервер отключится, заново загрузят.
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40063153
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha,

в таком случае, если позволяют ресурсы памяти, можно использовать InMemory таблицы с durability = schema_only, вставка будет ещё быстрее. Такие таблицы в журнал ничего не пишут.
...
Рейтинг: 0 / 0
При вставки строк в таблицы dbo.table VS #table
    #40063203
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha
alexeyvgЧто, прям на проде? :-)
не OLTP Тут важно не "OLTP/не OLTP", а то, можете вы базу потерять, или нет.

Focha
Если сервер отключится, заново загрузят.
Загрузят - это создадут с нуля, или восстановят из бакапа? Учтите ,что она может быть необратимо порушена, не получится взять и загрузить туда данные.
Тогда да, установить SET DELAYED_DURABILITY = FORCED - хорошее решение.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / При вставки строк в таблицы dbo.table VS #table
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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