Имя: Пароль:
IT
1С v8
MSSQL SHRINKDATABASE SLEEP TASK
,
0 Geroy
 
25.01.23
13:23
MSSQL 2016

База 1.7 Тб
Для разработчиков делаем урезанную копию (без 10 больших таблиц)

Таблица убираем Truncate, после выполняем SHRINKDATABASE
Через некорое время, задание засыпает

Task State - SUSPENDED
Command - DbccFilesCompact
Wait type - SLEEP TASK

Как найти причину, почему оно не выполняется?)
1 ptiz
 
25.01.23
13:37
(0) А оно точно не выполняется? Нагрузки нет на диски и процессор?
2 Geroy
 
25.01.23
13:45
К базе не  соединений, к кластеру 1С не подключена
Нагрузки нет

В логах

DBCC SHRINKDATABASE for
database ID 11 is waiting for the snapshot transaction with timestamp 5101448
and other snapshot transactions linked to timestamp 5101448 or with timestamps older than 123707744 to finish.

Куда копать? что это за транзакции
3 Kassern
 
25.01.23
13:47
(0) Проще наверное выгрузить чистую конфу и на нее накатить через выгрузку/загрузку данных нужные справочники и документы за обрезанный период. Все, что связано само догрузится.
4 OldCondom
 
25.01.23
13:50
Гугл на первых выводах говорит:
Разрешить эту проблему можно одним из следующих способов.

Прервите выполнение транзакции, которая блокирует операцию сжатия.
Прервите операцию сжатия. При прерывании операции сжатия вся уже выполненная работа сохраняется.
Пока операция сжатия ожидает завершения блокирующей транзакции, ничего делать не нужно.
5 ptiz
 
25.01.23
13:51
(2) Долго висит? Часов 6 может работать эта операция.
6 Geroy
 
25.01.23
13:53
(4) Видел данное описание, какую транзакцию ? откуда она
1. размер базу из бэкапа
2. перевёл в режим Simple
3. Обрезал ненужные таблицы
4. Запускаю шринк


(5) бесконечно долго, она засыпает и ждет

DBCC SHRINKDATABASE for
database ID 11 is waiting for the snapshot transaction with timestamp 5101448
and other snapshot transactions linked to timestamp 5101448 or with timestamps older than 123707744 to finish.
7 OldCondom
 
25.01.23
13:54
зашринкуй сначала лог транзакций
8 Geroy
 
25.01.23
13:58
(7) делаю так

DBCC SHRINKFILE (N'base_log' , 0, TRUNCATEONLY)
DBCC SHRINKFILE (N'base' , 0, TRUNCATEONLY)
DBCC SHRINKDATABASE(N'base')
9 OldCondom
 
25.01.23
14:13
DBCC OPENTRAN
затем KILL
10 Geroy
 
25.01.23
14:17
(9) это выполнить перед ?
11 OldCondom
 
25.01.23
14:28
(10) Это список активных транзакций. Очевидно, что надо грохнуть ту, что мешает. Очевидно, что ПЕРЕД
12 Geroy
 
26.01.23
09:57
(11)
1.DBCC OPENTRAN
No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Completion time: 2023-01-26T09:54:01.6915629+03:00

2. sys.dm_exec_requests
Status        wait_type    Command              DatabaseName    cpu_time    total_elapsed_time    percent_complete
suspended   SLEEP_TASK    DbccFilesCompact  base      4326958            5087912                    29.47133

3. Логи
Date        1/26/2023 9:53:17 AM
Log        SQL Server (Current - 1/26/2023 7:01:00 AM)

Source        spid70

Message
DBCC SHRINKDATABASE for database ID 11 is waiting for the snapshot transaction with timestamp 739176370 and other snapshot transactions linked to timestamp 739176370 or with timestamps older than 778886028 to finish.


Куда копать?
13 Mihenius
 
26.01.23
10:58
А точно ничего больше не мешает?

USE master
GO
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('Имя базы')
GO


EXEC sp_who2 -- ищем мешающий номер процесса

KILL --убиваем номер мешающего процесса
14 katamoto
 
26.01.23
11:32
(12) OPENTRAN без параметров в контексте текущей базы выполнится, скорее всего у вас это master был. DBCC OPENTRAN ('base') запускайте
15 Geroy
 
26.01.23
12:38
(13)  Только 1 строка с этим заданием
lastwaittype
SLEEP_TASK          
          
cmd
DbccFilesCompact

status
suspended    
                

(14) DBCC OPENTRAN ('base') - пусто
No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Completion time: 2023-01-26T12:33:42.5876795+03:00
16 Geroy
 
26.01.23
12:39
В логах каждые 5 минут

Message
DBCC SHRINKDATABASE for database ID 11 is waiting for the snapshot transaction with timestamp 739176370 and other snapshot transactions linked to timestamp 739176370 or with timestamps older than 824183246 to finish.
17 Проводкин
 
26.01.23
12:53
(16)"waiting for the snapshot transaction with timestamp"  архивчик делается (снимок). может как-то эти процессы начинают друг  друга ждать ?... по итогу все стоит
18 katamoto
 
26.01.23
12:54
select * from sys.dm_tran_active_snapshot_database_transactions и там в sequence_num ищите эти таймстампы и смотрите к каким сессиями принадлежат
19 DrZombi
 
гуру
26.01.23
14:48
(0) Думается оно таки не долго выполняется.

https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-shrinkdatabase-transact-sql?view=sql-server-ver16
Уменьшает размер файлов данных и журналов в указанной базе данных.

Проверьте файлик, возможно он ужо ужался.
Перед ужатем вы должны удалить сами данные :)
20 DrZombi
 
гуру
26.01.23
14:51
(16) Переведите базу в режим "Модель восстановления - Простая" :)
21 Geroy
 
26.01.23
15:10
(19) ну вы уж слишком, советы для начинающих - это уже давно сделано
22 Geroy
 
26.01.23
15:12
(18) Спасибо большое, с помощью "sys.dm_tran_active_snapshot_database_transactions" нашел причину

Проблемное задание в базе источник, с которого выполнялся бекап для дальнейшего развертывания и урезания таблиц
Странно, но факт
23 ptiz
 
26.01.23
15:20
(22)  Как вариант, можно было в single user перевести перед шринком.
24 Geroy
 
26.01.23
15:21
(23) пробовал, не помогло
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс