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

Откуда:
Сообщений: 984
Здравствуйте. Вот такой запрос:
DROP TABLE [dbo].[Fct_Subconto]
GO

SELECT [IdNci_0062]
      ,[Date_Month]
      ,[Year_Prov]
      ,[Month_Prov]
      ,[IDDIM_0090]
      ,[IDDim_0050]
      ,[АП]
      ,[СРН]
      ,[IdDim_0029Clc]
	  ,[IdDIM_0021]
      ,[СНДРС_УВ]
      ,[СНКРС_УВ]
      ,[ДО_УВ]
      ,[КО_УВ]
      ,[СКДРС_УВ]
      ,[СККРС_УВ]
      ,[СНД_УВ]
      ,[СНК_УВ]
      ,[СКД_УВ]
      ,[СКК_УВ]
      ,[ДОННР_УВ]
      ,[КОННР_УВ]
      ,[ДОКНР_УВ]
      ,[КОКНР_УВ]
      ,[СНДРС_НАЦ]
      ,[СНКРС_НАЦ]
      ,[ДО_НАЦ]
      ,[КО_НАЦ]
      ,[СКДРС_НАЦ]
      ,[СККРС_НАЦ]
      ,[СНД_НАЦ]
      ,[СНК_НАЦ]
      ,[СКД_НАЦ]
      ,[СКК_НАЦ]
      ,[ДОННР_НАЦ]
      ,[КОННР_НАЦ]
      ,[ДОКНР_НАЦ]
      ,[КОКНР_НАЦ]
      ,[СНДРС_ВВР]
      ,[СНКРС_ВВР]
      ,[ДО_ВВР]
      ,[КО_ВВР]
      ,[СКДРС_ВВР]
      ,[СККРС_ВВР]
      ,[СНД_ВВР]
      ,[СНК_ВВР]
      ,[СКД_ВВР]
      ,[СКК_ВВР]
      ,[ДОННР_ВВР]
      ,[КОННР_ВВР]
      ,[ДОКНР_ВВР]
      ,[КОКНР_ВВР]
      ,[СНДРС_ДОЛ]
      ,[СНКРС_ДОЛ]
      ,[ДО_ДОЛ]
      ,[КО_ДОЛ]
      ,[СКДРС_ДОЛ]
      ,[СККРС_ДОЛ]
      ,[СНД_ДОЛ]
      ,[СНК_ДОЛ]
      ,[СКД_ДОЛ]
      ,[СКК_ДОЛ]
      ,[ДОННР_ДОЛ]
      ,[КОННР_ДОЛ]
      ,[ДОКНР_ДОЛ]
      ,[КОКНР_ДОЛ]
INTO [dbo].[Fct_Subconto]
  FROM [dbo].[Fct_0020_OSB_Subconto]

Приводит к росту базы TempDB до 12 гб. Реально в таблицу вставляются около 2 млн. строк. После вставки размер занимаемой таблицей не больше 4 гб. Как можно сделать так, чтобы вставка данных не занимала сколько места в TempDB
5 сен 17, 13:54    [20772748]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Pvase,

с сервером точно не ошиблись?
5 сен 17, 14:00    [20772764]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
а зачем таблицу дропаете? не лучше тогда уж truncate
5 сен 17, 14:04    [20772773]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Если вставлять по кусочкам, а модель базы Simple, то лог будет по размеру не сильно больше самого большого кусочка.

Как вариант - можно выгрузить в файл и вставить BULK Loadом (не журналируется).
5 сен 17, 14:06    [20772784]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
WarAnt
Pvase,

с сервером точно не ошиблись?

Таки да, вот версия: Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64)
5 сен 17, 14:08    [20772795]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Konst_One
а зачем таблицу дропаете? не лучше тогда уж truncate

Та это я тестирую разные варианты, раньше было так:
TRUNCATE TABLE [dbo].[Fct_Subconto]
GO

INSERT INTO [dbo].[Fct_Subconto] WITH (TABLOCK)
	([IdNci_0062]
           ,[Date_Month]
           ,[Year_Prov]
           ,[Month_Prov]
           ,[IDDIM_0090]
           ,[IDDim_0050]
           ,[АП]
           ,[СРН]
           ,[IdDim_0029Clc]
		   ,[IdDIM_0021]
           ,[СНДРС_УВ]
           ,[СНКРС_УВ]
           ,[ДО_УВ]
           ,[КО_УВ]
           ,[СКДРС_УВ]
           ,[СККРС_УВ]
           ,[СНД_УВ]
           ,[СНК_УВ]
           ,[СКД_УВ]
           ,[СКК_УВ]
           ,[ДОННР_УВ]
           ,[КОННР_УВ]
           ,[ДОКНР_УВ]
           ,[КОКНР_УВ]
           ,[СНДРС_НАЦ]
           ,[СНКРС_НАЦ]
           ,[ДО_НАЦ]
           ,[КО_НАЦ]
           ,[СКДРС_НАЦ]
           ,[СККРС_НАЦ]
           ,[СНД_НАЦ]
           ,[СНК_НАЦ]
           ,[СКД_НАЦ]
           ,[СКК_НАЦ]
           ,[ДОННР_НАЦ]
           ,[КОННР_НАЦ]
           ,[ДОКНР_НАЦ]
           ,[КОКНР_НАЦ]
           ,[СНДРС_ВВР]
           ,[СНКРС_ВВР]
           ,[ДО_ВВР]
           ,[КО_ВВР]
           ,[СКДРС_ВВР]
           ,[СККРС_ВВР]
           ,[СНД_ВВР]
           ,[СНК_ВВР]
           ,[СКД_ВВР]
           ,[СКК_ВВР]
           ,[ДОННР_ВВР]
           ,[КОННР_ВВР]
           ,[ДОКНР_ВВР]
           ,[КОКНР_ВВР]
           ,[СНДРС_ДОЛ]
           ,[СНКРС_ДОЛ]
           ,[ДО_ДОЛ]
           ,[КО_ДОЛ]
           ,[СКДРС_ДОЛ]
           ,[СККРС_ДОЛ]
           ,[СНД_ДОЛ]
           ,[СНК_ДОЛ]
           ,[СКД_ДОЛ]
           ,[СКК_ДОЛ]
           ,[ДОННР_ДОЛ]
           ,[КОННР_ДОЛ]
           ,[ДОКНР_ДОЛ]
           ,[КОКНР_ДОЛ])
SELECT [IdNci_0062]
      ,[Date_Month]
      ,[Year_Prov]
      ,[Month_Prov]
      ,[IDDIM_0090]
      ,[IDDim_0050]
      ,[АП]
      ,[СРН]
      ,[IdDim_0029Clc]
	  ,[IdDIM_0021]
      ,[СНДРС_УВ]
      ,[СНКРС_УВ]
      ,[ДО_УВ]
      ,[КО_УВ]
      ,[СКДРС_УВ]
      ,[СККРС_УВ]
      ,[СНД_УВ]
      ,[СНК_УВ]
      ,[СКД_УВ]
      ,[СКК_УВ]
      ,[ДОННР_УВ]
      ,[КОННР_УВ]
      ,[ДОКНР_УВ]
      ,[КОКНР_УВ]
      ,[СНДРС_НАЦ]
      ,[СНКРС_НАЦ]
      ,[ДО_НАЦ]
      ,[КО_НАЦ]
      ,[СКДРС_НАЦ]
      ,[СККРС_НАЦ]
      ,[СНД_НАЦ]
      ,[СНК_НАЦ]
      ,[СКД_НАЦ]
      ,[СКК_НАЦ]
      ,[ДОННР_НАЦ]
      ,[КОННР_НАЦ]
      ,[ДОКНР_НАЦ]
      ,[КОКНР_НАЦ]
      ,[СНДРС_ВВР]
      ,[СНКРС_ВВР]
      ,[ДО_ВВР]
      ,[КО_ВВР]
      ,[СКДРС_ВВР]
      ,[СККРС_ВВР]
      ,[СНД_ВВР]
      ,[СНК_ВВР]
      ,[СКД_ВВР]
      ,[СКК_ВВР]
      ,[ДОННР_ВВР]
      ,[КОННР_ВВР]
      ,[ДОКНР_ВВР]
      ,[КОКНР_ВВР]
      ,[СНДРС_ДОЛ]
      ,[СНКРС_ДОЛ]
      ,[ДО_ДОЛ]
      ,[КО_ДОЛ]
      ,[СКДРС_ДОЛ]
      ,[СККРС_ДОЛ]
      ,[СНД_ДОЛ]
      ,[СНК_ДОЛ]
      ,[СКД_ДОЛ]
      ,[СКК_ДОЛ]
      ,[ДОННР_ДОЛ]
      ,[КОННР_ДОЛ]
      ,[ДОКНР_ДОЛ]
      ,[КОКНР_ДОЛ]
  FROM [dbo].[Fct_0020_OSB_Subconto]
5 сен 17, 14:11    [20772806]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
LSV
Если вставлять по кусочкам, а модель базы Simple, то лог будет по размеру не сильно больше самого большого кусочка.

Как вариант - можно выгрузить в файл и вставить BULK Loadом (не журналируется).

Спасибо, но увеличивается не журнал транзакций, а именно база TempDB.
5 сен 17, 14:12    [20772812]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
IdNci_0062 - это PK ?
5 сен 17, 14:13    [20772817]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
+ Модель восстановления для базы - Simple.
5 сен 17, 14:14    [20772826]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Konst_One
IdNci_0062 - это PK ?

Здесь Primary Key нет, во втором запросе есть, это ID, простой счетчик + 1.
5 сен 17, 14:15    [20772835]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
а сам селект на млн записей из [dbo].[Fct_0020_OSB_Subconto] не хотите на куски побить и вставлять в цикле
5 сен 17, 14:17    [20772847]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Pvase
LSV
Если вставлять по кусочкам, а модель базы Simple, то лог будет по размеру не сильно больше самого большого кусочка.

Как вариант - можно выгрузить в файл и вставить BULK Loadом (не журналируется).

Спасибо, но увеличивается не журнал транзакций, а именно база TempDB.
Ну в указанном совете ТемпДБ тоже не будет расти. :)
ТемпДБ может быть задействован, н-р если большую таблицу/выборку нужно сложным образом отсортировать. Есть и другие случаи, когда используется ТемпДБ.
Это временное хранилище данных.
5 сен 17, 14:18    [20772854]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Pvase,

план запроса посмотрите, есть ли там "table spool"
5 сен 17, 14:20    [20772864]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
The Data Loading Performance Guide:
https://technet.microsoft.com/ru-ru/library/dd425070(v=sql.100).aspx
5 сен 17, 14:22    [20772872]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Дедушка
Pvase,

план запроса посмотрите, есть ли там "table spool"

Картинка с другого сайта.
5 сен 17, 14:28    [20772904]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Дедушка
Pvase,

план запроса посмотрите, есть ли там "table spool"

Вот здесь ссылка: https://onedrive.live.com/?authkey=!AFTUWfv65SiMLvc&cid=493DA339DE79A6A4&id=493DA339DE79A6A4!93026&parId=493DA339DE79A6A4!92782&o=OneUp
5 сен 17, 14:31    [20772925]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Pvase,

пока есть индексы tempdb будет пухнуть, от этого не избавиться, можно только снизить размер опухоли использовав вставку кусками.
5 сен 17, 14:35    [20772954]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Konst_One
IdNci_0062 - это PK ?

Ошибся, вот так выглядит PK:
CREATE UNIQUE CLUSTERED INDEX [IX_Fct_0020_AccObor_ID] ON [dbo].[Fct_0020_AccObor]
(
	[Date_Month] ASC,
	[IdNci_0062] ASC,
	[IdDIM_0090] ASC,
	[IdDim_0050] ASC,
	[IdDim_0029Clc] ASC,
	[IdDim_0029Acc] ASC,
	[IdDim_0029Doc] ASC,
	[IdDim_0021] ASC,
	[IdDim_0021_0] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
5 сен 17, 14:36    [20772962]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36926
Pvase
Дедушка
Pvase,

план запроса посмотрите, есть ли там "table spool"

Вот здесь ссылка: https://onedrive.live.com/?authkey=!AFTUWfv65SiMLvc&cid=493DA339DE79A6A4&id=493DA339DE79A6A4!93026&parId=493DA339DE79A6A4!92782&o=OneUp
Вы специально сообщаете нам, что проблему вызывает один запрос, а выполняете другой?
5 сен 17, 14:37    [20772967]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Гавриленко Сергей Алексеевич
Pvase
пропущено...

Вот здесь ссылка: https://onedrive.live.com/?authkey=!AFTUWfv65SiMLvc&cid=493DA339DE79A6A4&id=493DA339DE79A6A4!93026&parId=493DA339DE79A6A4!92782&o=OneUp
Вы специально сообщаете нам, что проблему вызывает один запрос, а выполняете другой?

Ивзините, не хотел вас ввести в заблуждение, проблема возникает в обеих запросах, что INSERT, что SELECT INTO - проблема одна и та же, очень сильно растет база tempdb.
5 сен 17, 14:54    [20773047]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Это я тестирую сразу три запроса, они похожие, и дал ссылку на другую таблицу. Но проблема существует по всем таблицам, где вставляется очень много строк (в приведенном примере вставляется 19 млн строк за 9 минут с ростом tempdb до 8 гб), в примере в начале вставка просиходит за 40 минут с ростом Tempdb гораздо больше.
5 сен 17, 14:59    [20773065]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Pvase
Member

Откуда:
Сообщений: 984
Еще проблема в том, что если запросы выполнять параллельно, то суммарный рост TempDB это похоже больше на умножения. Так TempDB вырастает до 60 ГБ, заканчивается место на диске и ничего хорошего из этого не происходит.
5 сен 17, 15:03    [20773080]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
диски добавьте на сервер, что он у вас мучается бедняга
5 сен 17, 15:10    [20773102]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
автор
Приводит к росту базы TempDB до 12 гб. Реально в таблицу вставляются около 2 млн. строк. После вставки размер занимаемой таблицей не больше 4 гб. Как можно сделать так, чтобы вставка данных не занимала сколько места в TempDB

откажитесь от индексов, добавьте RAM
5 сен 17, 15:32    [20773193]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2013, INSERT более 1 млн строк, занимает очень много места в tempdb  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7671
На картинке же нарисована сортировка и спул, что же непонятного. Сортировка из-за вставки в кластерный индекс. Памяти добавьте, как уже писали.
5 сен 17, 15:37    [20773227]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить