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

Откуда:
Сообщений: 569
приветствую,

есть временная таблица около 2млн записей, 30 полей.

Что бь обновить 13 полей написал 13 update. Процес заканчивается ошибкой

The transaction log for database 'tempdb' is full due to 'ACTIVE_TRANSACTION'.
SQL SERVER 2012.

Вопрос - как бы я не переписал update все равно лог вырастет одинаково ? т.к. тоже самое кол-во записей изменится

Замер лога 9999 MB
Recovery model Bulk logged

Что можно попытаться сделать ?
15 фев 16, 20:22    [18820473]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а что в вашем понимании есть "временная таблица"?
что-то с именем #mytable?
а тогда рекавери модель - это вашей базы или tempdb?
ваши манипуляции - в транзакции идут? или нет? а может в неявной?
15 фев 16, 20:28    [18820486]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
o-o
Guest
Recovery model у tempdb всегда simple.
Вы логу не поменяли ли maxsize на что-то ограгиченное?
Чей размер лога вы привели, своей базы или темпдб?
Похоже, зависшая транзакция у вас там
15 фев 16, 20:30    [18820492]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
_human
Member

Откуда:
Сообщений: 569
Crimean
а тогда рекавери модель - это вашей базы или tempdb?

базы. думал это существенно

Crimean
ваши манипуляции - в транзакции идут? или нет? а может в неявной?

В явной идут.
Такого рода манипуляции
select *
into #temp
from 
	(values 
		 (1, null, 'a', null)
		,(1, null, 'a', null)
		,(1, 99,   'a', 77)
		,(2, null, 'b', 66)
		,(2, 88,   'b', null)
		,(2, null, 'c', 55)
		,(3, null, 'c', null)
	) as q(id, k, id2, k2)
update t
set t.k = t2.k
from #temp t
	join (select id, k
		  from #temp
		  where k is not null
		  ) t2 on t.id = t2.id
--select * from #temp

o-o
Чей размер лога вы привели, своей базы или темпдб?

Темпдб
o-o
Вы логу не поменяли ли maxsize на что-то ограгиченное?

Если это и было, то это был не я :)
15 фев 16, 22:27    [18820896]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
Glory
Member

Откуда:
Сообщений: 104751
_human
В явной идут.
Такого рода манипуляции

Т.е. у вас в однйо транзакции идет
- заполнение временной таблицы на 2млн записей
- и 13 апдейтов, каждый на 2 млн записей ?
15 фев 16, 22:50    [18820982]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
o-o
Guest
ну вы, не вы, какая уже разница.
у темпдб по дефолту лог растет неограниченно,
а у вас на каких-то 10 Гигах все встало,
или место на диске закончилось, или насильно выставлен max_size.
покажите результат такого:
use tempdb;
go

select file_id, type_desc, 
       cast(size * 8.0 / 1024 as decimal(10,2)) as size_Mb, 
       max_size, growth
from sys.database_files
where type = 1;
15 фев 16, 22:54    [18820995]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
o-o
Guest
и размер свободного места на диске, где лежит лог темпдб, тоже покажите
15 фев 16, 22:57    [18821003]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Glory
_human
В явной идут.
Такого рода манипуляции

Т.е. у вас в однйо транзакции идет
- заполнение временной таблицы на 2млн записей
- и 13 апдейтов, каждый на 2 млн записей ?
И зачем это делать в одной большой транзакции? Чтобы или все или ничего? Ну так вашим ROLLBACK-ом, если что-то пошло не так, будет банальный
DROP TABLE #temp
без всяких транзакций.
16 фев 16, 02:58    [18821438]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
_human
Member

Откуда:
Сообщений: 569
o-o
покажите результат такого:


file_id type_desc size_Mb max_size growth
----------- --------- --------------------------------------- ----------- -----------
2 LOG 10000.00 -1 0
посмотреть сколько места на диске возможности нет.
Mind
И зачем это делать в одной большой транзакции?

там не тольео 13 чудо Update :) и еще куча всего
16 фев 16, 11:16    [18822432]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
WarAnt
Member

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

BOL
growth
int
0 = файл имеет фиксированный размер и не будет увеличиваться.


Чего вы тогда хотите то:))
16 фев 16, 11:22    [18822474]     Ответить | Цитировать Сообщить модератору
 Re: update временной таблицы, переполнение лога  [new]
o-o
Guest
_human
growth 0

ну так кто ограничил лог?
хотя может это спец. мера против тех, кто в транзакции 10 Гиг данных ворочает
16 фев 16, 11:30    [18822530]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить