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

Откуда:
Сообщений: 7
Всем привет. MS SQL 2012. Есть база размером 905 Гб. Неиспользованного места внутри базы ~790 Гб. Надо урезать базу до размеров "реальных" данных.(т.е. ~120 Гб). Делал SHRINK DATABASE. Стоял три дня результата нет, остановил процесс. Сделал full backup. Bak-файл весит 20 ГБ. И у меня возникла идея. А что если создать пустую базу с ограниченным размером ~ 150 Гб и залить туда этот файл бэкапа. Получится? Или как оптимально SHRINK-ануть базу. Или каков будет размер базы если просто восстановить (потащятся ли 790 ГБ неиспользованного места в новую базу)?
24 фев 14, 10:14    [15617424]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Если в базе много LOB данных, то немудрено что всё это будет долго shrink'оваться. Официального лекарства от этого нет.
Я перекидывал insert'ами данные в новые таблицы в отдельных файлгруппах (чтоб эти FG не шринковать потом никогда), потом truncate исходных таблиц. Помогало.
24 фев 14, 10:40    [15617650]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
... вместо PS.
Ты ведь знаешь что shrink это плохо?
24 фев 14, 10:41    [15617657]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bajo
Неиспользованного места внутри базы ~790 Гб.

Как получена эта цифра ?

Bajo
. А что если создать пустую базу с ограниченным размером ~ 150 Гб и залить туда этот файл бэкапа. Получится?

Нет. Восстановлению полного бэкапа плевать на текущие размеры файлов. У него есть свои размеры файлов, взятые из бэкапа

Bajo
Или как оптимально SHRINK-ануть базу.

Для начала узнать, где собственно свободное место
24 фев 14, 11:12    [15617961]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Bajo
Member

Откуда:
Сообщений: 7
Glory,есть параметры в свойствах базы когда заходишь через Management Studio. Allocated Space. А как узнать это свободное место? И почему SHRINK плохо?
24 фев 14, 12:12    [15618389]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bajo
,есть параметры в свойствах базы когда заходишь через Management Studio. Allocated Space.

И для какого именно файла базы вы нашли там "Неиспользованного места внутри базы ~790 Гб." ?
24 фев 14, 13:24    [15619098]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Bajo
Member

Откуда:
Сообщений: 7
Glory, там просто написано Size в свойствах базы. Я до этого делал SHRINK DATABASE FILE до этого был 1070 ГБ. Получилось до 900 Гб шринкануть. Поставил шринк файла до 890 Гб стоял очень долго. Отменил. Есть инструменты какие -нибудь побыстрее урезать лишнее пространство?
24 фев 14, 15:05    [15619982]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bajo
там просто написано Size в свойствах базы.

USE mydb;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
DBCC SQLPERF(LOGSPACE);
24 фев 14, 15:22    [15620143]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Bajo
Member

Откуда:
Сообщений: 7
Glory
Bajo
там просто написано Size в свойствах базы.

USE mydb;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
DBCC SQLPERF(LOGSPACE);


Я новичок в T-SQL. Можете описать что делают эти строчки?
24 фев 14, 15:40    [15620307]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bajo
Можете описать что делают эти строчки?

Отвас пока требуется привести результат их выполнения.
24 фев 14, 15:46    [15620371]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Bajo
Member

Откуда:
Сообщений: 7
Glory, сделано. выполнялся где 1 час 15 минут. Что дальше?

К сообщению приложен файл. Размер - 3Kb
24 фев 14, 19:57    [15622143]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Glory
Member

Откуда:
Сообщений: 104751
1. Файл данных занимает около 90Гб из 900Гб общего размера. Значит остальное место занимает лог.
2. Но где результат DBCC SQLPERF(LOGSPACE); ?
24 фев 14, 21:35    [15622562]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Bajo
Member

Откуда:
Сообщений: 7
Glory
1. Файл данных занимает около 90Гб из 900Гб общего размера. Значит остальное место занимает лог.
2. Но где результат DBCC SQLPERF(LOGSPACE); ?
1. Не лог. 2. Там была третья таблица было указано размер лога 5 ГБ, unused где-то 80%. Запустил shrink data file. если за 4-5 часов не выполнится остановлю.
25 фев 14, 07:03    [15623438]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Bajo
Glory
1. Файл данных занимает около 90Гб из 900Гб общего размера. Значит остальное место занимает лог.
2. Но где результат DBCC SQLPERF(LOGSPACE); ?
1. Не лог. 2. Там была третья таблица было указано размер лога 5 ГБ, unused где-то 80%. Запустил shrink data file. если за 4-5 часов не выполнится остановлю.
Посмотрите отдельно по файлам:
--	Размеры файлов
SELECT	isnull(g.name, ' LOG') as GroupName,
	s.file_id,
	s.name AS LogicalFileName,
	s.physical_name AS [FileName],
	s.size * CONVERT(float,8) AS [Size],
	CAST(CASE s.type WHEN 2 THEN 0 ELSE CAST(FILEPROPERTY(s.name, 'SpaceUsed') AS float) * CONVERT(float,8) END AS float) AS [UsedSpace],
	s.drop_lsn
FROM sys.master_files AS s 
	LEFT JOIN sys.filegroups AS g
		ON s.data_space_id=g.data_space_id
where s.database_id = db_id() 
order by GroupName, LogicalFileName
25 фев 14, 10:39    [15624020]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Bajo
Member

Откуда:
Сообщений: 7
Все получилось. Оказалось просто надо поменять Initial Size с 900000 МБ на нужный размер и все. Получается MS SQL перемещает файлы, которые находятся вне рамки нужного размера на начало файла БД и все. И SHRINK не нужен был.
28 фев 14, 07:10    [15643969]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера базы перед восстанавлением  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bajo
Получается MS SQL перемещает файлы, которые находятся вне рамки нужного размера на начало файла БД и все

Получается, что MS SQL не шринкает файлы меньше оригинального размера
28 фев 14, 10:31    [15644440]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить