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

Откуда:
Сообщений: 123
Подскажите, как правильно сжать пользовательскую базу?
Сейчас указан ее начальный размер 33 ГБ
Есть подозрение, что это избыточное значение
Если выполню скрипт
USE master;
GO
ALTER DATABASE DATA 
MODIFY FILE
    (NAME = DATA,
    SIZE = 20MB);
GO

просто уменьшится ее начальный размер, но если она содержит напр 20 ГБ данных, в занятом месте на диске будет указано 33ГБ?
И потом через сжатие уменьшиться до 20ГБ?
Боюсь убить базу, но свободное место на диске заставляет что-то думать
25 фев 16, 19:47    [18864390]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Для начала посмотрите "на картину в общем":

IF OBJECT_ID('tempdb.dbo.#space') IS NOT NULL
	DROP TABLE #space

CREATE TABLE #space (
	  database_id INT PRIMARY KEY
	, data_used_size DECIMAL(18,2)
	, log_used_size DECIMAL(18,2)
)

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = STUFF((
	SELECT '
	USE [' + d.name + ']
	INSERT INTO #space (database_id, data_used_size, log_used_size)
	SELECT
		  DB_ID()
		, SUM(CASE WHEN [type] = 0 THEN space_used END)
		, SUM(CASE WHEN [type] = 1 THEN space_used END)
	FROM (
		SELECT s.[type], space_used = SUM(FILEPROPERTY(s.name, ''SpaceUsed'') * 8. / 1024)
		FROM sys.database_files s
		GROUP BY s.[type]
	) t;'
	FROM sys.databases d
	WHERE d.[state] = 0
	FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')

EXEC sys.sp_executesql @SQL

SELECT
	  d.database_id
	, d.name
	, d.state_desc
	, d.recovery_model_desc
	, t.total_size
	, t.data_size
	, s.data_used_size
	, t.log_size
	, s.log_used_size
	, bu.full_last_date
	, bu.full_size
	, bu.log_last_date
	, bu.log_size
FROM (
	SELECT
		  database_id
		, log_size = CAST(SUM(CASE WHEN [type] = 1 THEN size END) * 8. / 1024 AS DECIMAL(18,2))
		, data_size = CAST(SUM(CASE WHEN [type] = 0 THEN size END) * 8. / 1024 AS DECIMAL(18,2))
		, total_size = CAST(SUM(size) * 8. / 1024 AS DECIMAL(18,2))
	FROM sys.master_files
    --WHERE database_id = DB_ID('DATA')
	GROUP BY database_id
) t
JOIN sys.databases d ON d.database_id = t.database_id
LEFT JOIN #space s ON d.database_id = s.database_id
LEFT JOIN (
    SELECT
          database_name
        , full_last_date = MAX(CASE WHEN [type] = 'D' THEN backup_finish_date END)
        , full_size = MAX(CASE WHEN [type] = 'D' THEN backup_size END)
        , log_last_date = MAX(CASE WHEN [type] = 'L' THEN backup_finish_date END)
        , log_size = MAX(CASE WHEN [type] = 'L' THEN backup_size END)
    FROM (
        SELECT
              s.database_name
            , s.[type]
            , s.backup_finish_date
            , backup_size =
                        CAST(CASE WHEN s.backup_size = s.compressed_backup_size
                                    THEN s.backup_size
                                    ELSE s.compressed_backup_size
                        END / 1048576.0 AS DECIMAL(18,2))
            , RowNum = ROW_NUMBER() OVER (PARTITION BY s.database_name, s.[type] ORDER BY s.backup_finish_date DESC)
        FROM msdb.dbo.backupset s
        WHERE s.[type] IN ('D', 'L')
    ) f
    WHERE f.RowNum = 1
    GROUP BY f.database_name
) bu ON d.name = bu.database_name
ORDER BY t.total_size DESC

Сколько свободного места в файлах данных и лога?
25 фев 16, 19:55    [18864424]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
hulk77
Member

Откуда:
Сообщений: 123
Такой вот результат http://prntscr.com/a7tz5q
25 фев 16, 20:18    [18864536]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
Glory
Member

Откуда:
Сообщений: 104760
hulk77
Такой вот результат

Все ваши 33Гб заняты. Откуда вы взяли информацию о том, что "она содержит напр 20 ГБ данных", непонятно
25 фев 16, 22:15    [18864940]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
hulk77
Member

Откуда:
Сообщений: 123
Glory
hulk77
Такой вот результат

Все ваши 33Гб заняты. Откуда вы взяли информацию о том, что "она содержит напр 20 ГБ данных", непонятно


Да удалял часть данных с таблиц
Хорошо если так
А как правильно поступить с базой tempbd? Ее начальный объем 2 ГБ
Можно ли уменьшить ее начальный объем этим же способом?
25 фев 16, 22:21    [18864969]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
Glory
Member

Откуда:
Сообщений: 104760
hulk77
Можно ли уменьшить ее начальный объем этим же способом?

Как вы себе представляете уменьшение занятого места ?
25 фев 16, 22:23    [18864981]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
o-o
Guest
не надо темпдб трогать.
это ж не только "временные таблицы".
у вас DBCC CHECKDB делается?
оно темпдб отъедает прилично.
обратно вырастет, да еще и ждать придется.
и что это за диск такой позорный, что 2 Гига под темпдб и то жалко?
25 фев 16, 23:03    [18865114]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
hulk77
Member

Откуда:
Сообщений: 123
Glory
hulk77
Можно ли уменьшить ее начальный объем этим же способом?

Как вы себе представляете уменьшение занятого места ?


фактически занято 2МБ, а через то что начальный размер базы 2ГБ, шринкование базы не уменьшает ее размер
http://prntscr.com/a7wky7
Можно ли как-то уменьшить начальный размер tempdb?
25 фев 16, 23:15    [18865136]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
o-o
Guest
они даже на 2 Гига, они полтора под темпдб жмотят.
кошмаррр
25 фев 16, 23:36    [18865198]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение начального размера баз  [new]
hulk77
Member

Откуда:
Сообщений: 123
та выделили 120 ГБ ccd, вроде база только 30, но плюс система и своп. так сейчас только 10 свободно.
а поскольку ссд ограничен в количестве операций записи, технология распределения записи по всем не занятым блокам вроде как порядочно продлевает срок жизни.
поэтому пытаюсь всеми способами освободить немного свободного места.

Спасибо за советы и помощь, скрипт AlanDenton сохранил, спасибо за него
26 фев 16, 10:15    [18865967]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить