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

Откуда:
Сообщений: 202
народ, хелп, бьюсь 5-й час.

у меня много данных которые генерятся и заливаются в табличку.
что-то типа :
;with cte(n) as (...)
insert into dbo.table (f1, f2...)
	select j1, j2...
	from from cte 
данных оч многа > 40 млн.
значит заливаю указанным выше способом в итоге локальный диск на котором находится лог БД становится переполненным
и я получаю плюшку вида :
Msg 1105, Level 17, State 2, Line 2
Could not allocate space for object 'dbo.table'.'PK_table' in database 'testDB' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

пробовал и па-моднаму, как отписались атцы в соседней теме
но в итоге описанная мега скорость этого метода не оправдалась и еще на этапе BULK INSERT в целевую таблицу на системном диске сожралось все место базой tempdb так как данных оч многа!

Итак, уважаемые знатоки, внимание вопрос : как пральна делать инсерт такого объема данных?

может, заливать по 1 млн и делать какую-то "очистку" системных БД ?
но тогда как определить этот миллион записей и что нужно чистить и чем? (цикл со счётчиком не предлагать!)

надеюсь на ваши дельные советы !
24 июн 11, 01:00    [10866048]     Ответить | Цитировать Сообщить модератору
 Re: correct INSERT  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
yado4eg, не лейте за один раз все 40 мульенов. Лейте порциями. Лог не резиновый, он у вас и растет больше всего.
24 июн 11, 01:13    [10866089]     Ответить | Цитировать Сообщить модератору
 Re: correct INSERT  [new]
yado4eg
Member

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

окей, сколько записей оптимальнее заливать ?
ну и хотелось бы как-то процес автоматизировать,
а то 40 раз запускать скрипт несурьезно ! не считая всяких там логических соответствий между данными. т.е. мне что бы повторно запускать скрипт нужно будет немного "колдовать" с со следующей порцией данных. а если все вместе то не нужно.
24 июн 11, 01:26    [10866122]     Ответить | Цитировать Сообщить модератору
 Re: correct INSERT  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Как пример:
--DROP DATABASE test
--CREATE DATABASE test
USE test
go

--CREATE TABLE TestTable(rn INT, v VARCHAR(50), f3 INT, f4 INT)
--go

DECLARE @i INT
DECLARE @size INT
SET @size=10000
SET @i=1

WHILE @i<=400
BEGIN
WITH cte AS (
SELECT  ROW_NUMBER() OVER (ORDER BY v1.type) rn
FROM    master..spt_values v1 ,
        master..spt_values v2 ,
        master..spt_values v3 ,
        master..spt_values v4
)
INSERT INTO TestTable(rn, v, f3, f4)
SELECT t.rn, 'val' + CAST(t.rn as varchar(10)) v, NULL f3, NULL f4
FROM cte t
WHERE t.rn>@size*(@i-1) AND t.rn<@size*@i+1
SET @i=@i+1
END
24 июн 11, 01:37    [10866142]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить