Здравствуйте, кубик, Вы писали:
К>С обучающими целями нужно вырастить базе большой лог файл в несколько гигабайт. Не просто зарезервить пространство, а забить чем то. К>Как это сделать ?
Крутить транзакции. Если стоит полноценная backup policy, то лог не будет урезаться вплоть до выполнения бэкапа.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: SQL Server: как вырастить лог файл искусственно?
Здравствуйте, кубик, Вы писали:
К>Всем привет,
К>С обучающими целями нужно вырастить базе большой лог файл в несколько гигабайт. Не просто зарезервить пространство, а забить чем то. К>Как это сделать ?
А нафига?
Для начала поменяем Recovery Mode на Full:
Alter Database [DB1] Set Recovery Full
И создадим таблицу для транзакций:
Create table T1(buffer nvarchar(max))
go
Insert T1(buffer) Values('hello')
Потом в цикле делаем
Insert T1(buffer) Select buffer from T1
Можно просто N раз нажать на F5 в Managment Studio
С пропускной способностью диска он забъется логом в несколько раз быстрее чем данными.
Re[2]: SQL Server: как вырастить лог файл искусственно?
Здравствуйте, Olaf, Вы писали: O>Согласен
Вот так побыстрее можно забить лог, да и файл данных будет поменьше при этом:
SQL
declare @i int = 1
insert into t1(buffer)
select 'Hello'
while @i <= 25
begin
insert into t1(buffer)
select 'Hello'
from t1 t
update t1 set buffer = 'Hell'
if @i%10 = 0
begin
delete top (50) percent from t1
end
set @i = @i + 1
end
delete from t1
С размером лога можно экспериментировать, изменяя длину строки, например.
Re[4]: SQL Server: как вырастить лог файл искусственно?
create table t1(data uniqueidentifier default newid())
insert into t1(id) default values
declare @i int = 1
while @i <= 1000000 // tune as desired
begin
update t1 set data = newid()
commit tran
set @i = @i + 1
end
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: SQL Server: как вырастить лог файл искусственно?
Здравствуйте, VladCore, Вы писали:
VC>Для начала поменяем Recovery Mode на Full: VC>
VC>Alter Database [DB1] Set Recovery Full
VC>
И очень важно после этого не забыть сделать фулл бэкап базы. Иначе она останется в simple mode. Сам при экспериментах позабыл, минуты две в ступоре сидел, почему лог после выполнения запроса пустой, пока не вспомнил.
Re[5]: SQL Server: как вырастить лог файл искусственно?
Здравствуйте, Sinclair, Вы писали: S>Здравствуйте, _ABC_, Вы писали: S>Зачем так сложно?
Разминка для ума. Задача — за разумный срок забить лог на несколько (2.5-5) ГБ. Разумный срок — до 3 минут на моем лаптопе.
Первый вариант — за 3 минуты забил лог на 2ГБ (из которых 10% свободны).
Твой вариант — за 3 минуты забил лог на 260 МБ.
Мой первый вариант — за 2 минуты отрастил лог до 5ГБ, из которых примерно 50% свободны.
Второй вариант ниже — за 2:10 лог вырос до 3.3ГБ, из которых занято 97%.
вариант 2
--drop table t1
--go
--create table t1(data nvarchar(max))truncate table t1
insert into t1(data) select 'Hello'
declare
@i int = 1
, @v nvarchar(max)
while @i <= 200
begin
set @v = 'Hello' + str(@i)
insert into t1(data)
select top 65000 'Hello'
from t1
update top (65000) t1 set data = @v
set @i = @i + 1
end
Из потенциально интересных моментов:
1. Вставка константы 'Hello', а не колонки buffer/data — экономится порядка минуты. Посмотри на планы выполнения для того, чтобы разницу увидеть.
2. В логе поинтереснее будет копаться если вдруг понадобится для каких-то целей — он более разнообразен.
3. Масштабируется это решение лучше, чем первый вариант. Рост по константе, а не экспоненте.
Можно еще дальше покопаться, найти оптимальные константы, может индексы создать. Если будет время — покопаюсь.