Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Transaction logs
|
|||
|---|---|---|---|
|
#18+
Люди, просветите, пожалуйста. Я только-начинающий-администратор MS SQL 2000. И такая у меня проблема. Есть у меня база main на сервере ~300Mb, есть к ней transaction log, и время от времени он вырастает очень нехило, последний рекорд ~1,2Gb. Вопрос первый почему он ТАК много и внезапно растет? Я читал, конечно, что такое transaction log, но почему он автоматически не уменьшается? (это вопрос №2) Его что руками надо чистить? (№3 ) Если я поставлю Recovery - Simple или Bulk-logged - это критично к безопасности данных? (UPS у нас есть, базы бэкапятся...) Просьба не пинать, а если отвечать лень, то дайте хоть URL, где про это написано... Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2002, 09:50 |
|
||
|
Transaction logs
|
|||
|---|---|---|---|
|
#18+
Об этом в BOL неплохо написано. Если выбрать SIMPLE MODE, то BACKUP transaction log вообще не выполняется, а выполнюется только полный или дифференциальный BACKUP всей базы данных. Сие означает, что при восстановлении можно восстановить данные лишь на момент последнего копирования базы, которое выполняется как правило ночью. Вся дневная работа при трахе будет потеряна. Сжатие transaction log в этом режиме выполняется периодически сервером - в предыдущих версиях это называлось TRUNCATE ON EVENT. BULK_LOGGED MODE означает, что при работе часть информации - операции SELECT INTO BULK INSERT, BCP - не попадают в transaction log , а, значит, при восстановлении не будут восстановлены. Однако в этом режиме transaction log необходимо копировать. Сжатие transaction log выполняется ТОЛЬКО при его копировании - команде BACKUP log. И наконец FULL MODE означает, что ВСЯ информация проходит через transaction log , который, как и в режиме BULK_LOGGED MODE, необходимо копировать, и он во время копирования будет сжиматься. Частое копирование transaction log не занимает много времени, выполняется и днем, обеспечивает восстановление данных на момент последнего копирования transaction log . Следует иметь в виду, что обрезаются только те сегменты transaction log , которые содержат информацию об уже ЗАКОНЧЕННЫХ транзакциях. Чтоб определить состояние transaction log рекомендую команду DBCC LOGINFO. Прилагаю текст процедуры для насильственного сжатия transaction log: ------------------------------------------------------------------------------------ drop proc sp_force_shrink_log go create proc sp_force_shrink_log -------------------------------------------------------------------------------- -- Purpose: Shrink transaction log of the current database in SQL Server -- -------------------------------------------------------------------------------- @target_percent tinyint = 0, @target_size_MB int = 10, @max_iterations int = 1000, @backup_log_opt nvarchar(1000) = 'with truncate_only' as set nocount on declare @db sysname, @last_row int, @log_size decimal(15,2), @unused1 decimal(15,2), @unused decimal(15,2), @shrinkable decimal(15,2), @iteration int, @file_max int, @file int, @fileid varchar(5) select @db = db_name(), @iteration = 0 create table #loginfo ( id int identity, FileId int, FileSize numeric(22,0), StartOffset numeric(22,0), FSeqNo int, Status int, Parity smallint, CreateTime varchar(250) ) create unique clustered index loginfo_FSeqNo on #loginfo ( FSeqNo, StartOffset ) create table #logfiles ( id int identity(1,1), fileid varchar(5) not null ) insert #logfiles ( fileid ) select convert( varchar, fileid ) from sysfiles where status & 0x40 = 0x40 select @file_max = @@rowcount if object_id( 'table_to_force_shrink_log' ) is null exec( 'create table table_to_force_shrink_log ( x nchar(3000) not null )' ) insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' ) select @last_row = @@rowcount select @log_size = sum( FileSize ) / 1048576.00, @unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00, @shrinkable = sum( case when id < @last_row - 1 and Status = 0 then FileSize else 0 end ) / 1048576.00 from #loginfo select @unused1 = @unused -- save for later select 'iteration' = @iteration, 'log size, MB' = @log_size, 'unused log, MB' = @unused, 'shrinkable log, MB' = @shrinkable, 'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size ) while @shrinkable * 100 / @log_size > @target_percent and @shrinkable > @target_size_MB and @iteration < @max_iterations begin select @iteration = @iteration + 1 -- this is just a precaution exec( 'insert table_to_force_shrink_log select name from sysobjects delete table_to_force_shrink_log') select @file = 0 while @file < @file_max begin select @file = @file + 1 select @fileid = fileid from #logfiles where id = @file exec( 'dbcc shrinkfile( ' + @fileid + ' )' ) end exec( 'backup log [' + @db + '] ' + @backup_log_opt ) truncate table #loginfo insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' ) select @last_row = @@rowcount select @log_size = sum( FileSize ) / 1048576.00, @unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00, @shrinkable = sum( case when id < @last_row - 1 and Status = 0 then FileSize else 0 end ) / 1048576.00 from #loginfo select 'iteration' = @iteration, 'log size, MB' = @log_size, 'unused log, MB' = @unused, 'shrinkable log, MB' = @shrinkable, 'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size ) end if @unused1 < @unused select 'After ' + convert( varchar, @iteration ) + ' iterations the unused portion of the log has grown from ' + convert( varchar, @unused1 ) + ' MB to ' + convert( varchar, @unused ) + ' MB.' union all select 'Since the remaining unused portion is larger than 10 MB,' where @unused > 10 union all select 'you may try running this procedure again with a higher number of iterations.' where @unused > 10 union all select 'Sometimes the log would not shrink to a size smaller than several Megabytes.' where @unused <= 10 else select 'It took ' + convert( varchar, @iteration ) + ' iterations to shrink the unused portion of the log from ' + convert( varchar, @unused1 ) + ' MB to ' + convert( varchar, @unused ) + ' MB' exec( 'drop table table_to_force_shrink_log' ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2002, 12:13 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1823392]: |
0ms |
get settings: |
5ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 370ms |

| 0 / 0 |
