powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как определить максимальный размер будущего полного бэкапа?
29 сообщений из 29, показаны все 2 страниц
Как определить максимальный размер будущего полного бэкапа?
    #39770256
Молодой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перед созданием бэкапа хочется гарантировано иметь достаточно места на диске.
Будет создаваться полный бэкап без сжатия.

Для оценки текущего размера всех файлов данных использую запрос:

Код: sql
1.
2.
3.
4.
5.
select SUM(size * 8.0 / 1024) as [Size, Mb]
from sys.master_files
WHERE database_id = DB_ID()
AND type_desc = 'ROWS'
GROUP BY database_id



Вопросы:

1) Верно ли моё предположение, что максимальный размер будущего бэкапа не превысит размером
сумму текущих размеров всех файлов данных?

2) Правильно ли я рассчитываю размер всех файлов данных?
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770261
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В полный бэкап входят только занятые страницы, а просто зарезервированные - нет.
2. В полный бэкап кроме данных еще входит бэкап лога за время снятия полного бэкапа.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770263
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и не понятно, зачем это все.
Как вы, к примеру, предотвратите ситуацию, когда на начала бэкапа место еще нет, а в процессе кто-то его занял?
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770277
Молодой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том что совершенно неизвестно какого размера будет база на момент
создания бэкапа, сколько файлов данных в ней будет, и как интенсивно она будет использоваться, но:
1) Бэкап надо гарантировано создать
2) Пользователю, который это будет делать, надо дать подсказки на какой диск его бэкап ТОЧНО влезет, а куда нет.

Как вы, к примеру, предотвратите ситуацию, когда на начала бэкапа место еще нет, а в процессе кто-то его занял?
- Никак не смогу. Это оставляем на совести пользователя


1. В полный бэкап входят только занятые страницы, а просто зарезервированные - нет.
- Это означает что бэкап обычно чуть меньше суммы размеров файлов данных.

2. В полный бэкап кроме данных еще входит бэкап лога за время снятия полного бэкапа.
- А вот это уже хуже. Это означает что при интенсивном использовании БД во время бэкапа, рамер всё таки может
превысить сумму файлов данных.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770292
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваша задача в общем случае слаборешаема. В полный бэкап база попадает не на момент его начала, а на момент его окончания.

Можно, конечно, переводить базу перед бэкапм в read_only...
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770303
Молодой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОК

1) Вводим допущение, что все sysamin, на время создания бэкапа - вменяемые люди.
2) Переводим БД в RESTRICTED_USER.
3) Оценка размеров файлов данных.
4) Бэкап.


По идее всё должно работать.

Спасибо за консультацию
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770423
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой2) Переводим БД в RESTRICTED_USER.ИМХО ненужная перестраховка.
Конечно, теоретически может базу во время бакапа раздуть так, что не хватит места на диске, но неужели это произойдёт в реальной жизни??? Тем более, что обычно в файлах ещё и есть свободное место.

Я бы даже ещё меньше перестраховался, и считал бы, что для бакапов нужно не сумма размеров файлов, а сумма занятого места в файлах. Как там SSMS это определяет:
Код: sql
1.
2.
3.
4.
5.
SELECT
(SELECT SUM(CAST(df.size as float)) FROM sys.database_files AS df WHERE df.type in ( 0, 2, 4 ) ) AS [DbSize],
(SUM(a.total_pages) + (SELECT ISNULL(SUM(CAST(df.size as bigint)), 0) FROM sys.database_files AS df WHERE df.type = 2 )) AS [SpaceUsed]
FROM
sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id left join sys.internal_tables it on p.object_id = it.object_id
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770509
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой1) Вводим допущение, что все sysamin, на время создания бэкапа - вменяемые люди.Если делаете такие оптимистичные допущения, то введите ещё одно. Папка, куда кладётся бекап, имеет NTFS атрибут- "сжатый". И нужно места в 3-4 раза меньше. Иначе рискуете получить ситуацию, что места для бекапа недостаточно ни на одном доступном диске. Обработайте и ситуацию, когда бекап пытаются сделать на сетевую шару.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770556
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownМолодой1) Вводим допущение, что все sysamin, на время создания бэкапа - вменяемые люди.Если делаете такие оптимистичные допущения, то введите ещё одно. Папка, куда кладётся бекап, имеет NTFS атрибут- "сжатый". И нужно места в 3-4 раза меньше. Иначе рискуете получить ситуацию, что места для бекапа недостаточно ни на одном доступном диске. Обработайте и ситуацию, когда бекап пытаются сделать на сетевую шару.

Вообще-то бэкап и так обычно выполняется со сжатием. Так что это примерно как жать архив еще одним архиватором...
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770569
Dzianis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot AndrF]tunknownпропущено...

Вообще-то бэкап и так обычно выполняется со сжатием. Так что это примерно как жать архив еще одним архиватором...

Автор не собирается сжимать бекап

МолодойБудет создаваться полный бэкап без сжатия.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770706
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzianisАвтор не собирается сжимать бекап

МолодойБудет создаваться полный бэкап без сжатия.Это, конечно, странно.
Он быстрее, и требует меньше места.
Другое дело, что оценить размер будет невозможно...
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770721
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЭто, конечно, странно.
Он быстрее, и требует меньше места.
Другое дело, что оценить размер будет невозможно...

Точно по любому не вычислить, а сжатый явно не будет больше не сжатого. Потому не заморачиваясь брать суммарный размер данных и лога - тогда точно поместится..
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770724
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой,
приблизительно sp_spaceused -> Reserved
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770725
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДругое дело, что оценить размер будет невозможно...Я не уверен конеш, но мне кажется, что своб. место все равно должно быть не меньше, чем размер базы. Даже в случае режима сжатия.
Во всяком случае, в процессе создания бекап имеет сначала несжатый размер, а потом становится сжатым.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770726
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoalexeyvgДругое дело, что оценить размер будет невозможно...Я не уверен конеш, но мне кажется, что своб. место все равно должно быть не меньше, чем размер базы. Даже в случае режима сжатия.
Во всяком случае, в процессе создания бекап имеет сначала несжатый размер, а потом становится сжатым.
да повесится проще чем такие объёмы под диски для создания бекапа иметь
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770814
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFalexeyvgЭто, конечно, странно.
Он быстрее, и требует меньше места.
Другое дело, что оценить размер будет невозможно...

Точно по любому не вычислить, а сжатый явно не будет больше не сжатого. Потому не заморачиваясь брать суммарный размер данных и лога - тогда точно поместится..Угу, только такая оценка, при которой пользователю не дают сделать бакап на диск, на котором точно достаточно места, вызовет у него дикую ярость по поводу такого идиотско-навязчивого сервиса.

Не пойму, чем хуже получить ошибку "не удалось сделать бакап, потому что не хватило места", чем ошибку "не дам сделать бакап, а вдруг не хватит места"?
Второе ИМХО намного хуже, по крайней мере, для меня, если бы я был тем админом.

На последней работе у меня бы вообще никогда не получилось бы сделать бакап, с таким подходом.

Я бы лучше показывал все доступные диски, но диски, на которых свободного места меньше, чем Reserved, отмечал бы красненьким.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770826
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoalexeyvgДругое дело, что оценить размер будет невозможно...Я не уверен конеш, но мне кажется, что своб. место все равно должно быть не меньше, чем размер базы. Даже в случае режима сжатия.
Во всяком случае, в процессе создания бекап имеет сначала несжатый размер, а потом становится сжатым.Сам становиться сжатым или кто помогает?
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770828
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgМолодой2) Переводим БД в RESTRICTED_USER.ИМХО ненужная перестраховка.
Конечно, теоретически может базу во время бакапа раздуть так, что не хватит места на диске, но неужели это произойдёт в реальной жизни??? Тем более, что обычно в файлах ещё и есть свободное место.

Я бы даже ещё меньше перестраховался, и считал бы, что для бакапов нужно не сумма размеров файлов, а сумма занятого места в файлах. Как там SSMS это определяет:
Код: sql
1.
2.
3.
4.
5.
SELECT
(SELECT SUM(CAST(df.size as float)) FROM sys.database_files AS df WHERE df.type in ( 0, 2, 4 ) ) AS [DbSize],
(SUM(a.total_pages) + (SELECT ISNULL(SUM(CAST(df.size as bigint)), 0) FROM sys.database_files AS df WHERE df.type = 2 )) AS [SpaceUsed]
FROM
sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id left join sys.internal_tables it on p.object_id = it.object_id

У меня так получилось даже меньше чем через
Код: sql
1.
FILEPROPERTY(df.name, 'SpaceUsed')
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770861
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindСам становиться сжатым или кто помогает? В чем собственно сарказм ? Понаблюдайте за размером файла. Он возможно фальшивый, но ОС скорее всего считает именно его. Т.е. резервируется все равно большой файл.
Т.е. для предотвращения нехватки места бесполезно знать, насколько бекап сжимается, ИМХО.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770862
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoMindСам становиться сжатым или кто помогает? В чем собственно сарказм ? Понаблюдайте за размером файла. Он возможно фальшивый, но ОС скорее всего считает именно его. Т.е. резервируется все равно большой файл.
Т.е. для предотвращения нехватки места бесполезно знать, насколько бекап сжимается, ИМХО.
Это ваши фантазии, у нас бы не сложилось ни единого бекапа на базах в 2-5тб
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770871
Col
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой
sp_spaceused показывает примерный размер нежатого бакапа
Линк на первоисточник где собственно именно это и написано:
https://support.microsoft.com/en-us/help/2001026/inf-space-requirements-for-backup-devices-in-sql-server

По поводу Вашей задачи, вот скрипт ее решаюший:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
   USE [master]
   GO
   DECLARE @estimatedBackSizeMB INT
   DECLARE @estimatedDriveFreeSpaceMB INT
   DECLARE @dbCheckMessage varchar(80)
   DECLARE @enoughSpaceForBackupFlag INT
   DECLARE @drvLetter VARCHAR (5)
   SET NOCOUNT ON
   set @drvLetter = 'C'
   SET @dbCheckMessage = concat ('Checking database ', DB_NAME ())
   PRINT @dbCheckMessage

   SELECT @estimatedBackSizeMB = round (sum (a.total_pages) * 8192 / SQUARE (1024.0), 0)
   FROM sys.partitions p
   JOIN sys.allocation_units a
      ON p.partition_id = a.container_id
   LEFT JOIN sys.internal_tables it
      ON p.object_id = it.object_id

   CREATE TABLE #freespace (drive VARCHAR (5), MBFree DECIMAL (8, 2))

   INSERT INTO #freespace (
      Drive,
      MBFree) EXEC xp_fixeddrives

   SELECT @estimatedDriveFreeSpaceMB = MBFree 
   FROM #freespace
   WHERE drive = @drvLetter

   IF @estimatedBackSizeMB * 1.15 < @estimatedDriveFreeSpaceMB
      SET @enoughSpaceForBackupFlag = 1
   ELSE
      SET @enoughSpaceForBackupFlag = 0
/*
   SELECT DatabaseName = db_name(),	
      Estimated_Back_Size_MB = @estimatedBackSizeMB,
      Estimated_Drive_Free_Space_MB = @estimatedDriveFreeSpaceMB,
      EnoughSpaceForBackupFlag = @enoughSpaceForBackupFlag
*/
   DROP TABLE #freespace

   IF @enoughSpaceForBackupFlag = 1
   BEGIN
   PRINT 'Continue to Backup...'
   DECLARE @path NVARCHAR(256); -- Path for backup files
   DECLARE @fileName NVARCHAR(256); -- Filename for backup
   DECLARE @fileDate NVARCHAR(20); -- Used for file name
   DECLARE @name NVARCHAR(50); -- Database name

   -- Build the path and file name.
    SET @path = 'C:\Temp\'
	SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
    SET @name = DB_NAME ()
    SET @fileName = @path + @name  + '_' + @fileDate + '.BAK'
	  -- Backup the database.
    BACKUP DATABASE @name TO DISK = @fileName WITH  COPY_ONLY, NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10 
      -- Loop to the next database.
    END
ELSE 
   PRINT 'Drive Space Problem...'



   SET NOCOUNT OFF
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770873
Col
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot alexeyvg]AndrFпропущено...
Не пойму, чем хуже получить ошибку "не удалось сделать бакап, потому что не хватило места", чем ошибку "не дам сделать бакап, а вдруг не хватит места"?
Второе ИМХО намного хуже, по крайней мере, для меня, если бы я был тем админом.

А может не надо ошибку получать совсем?
Можно ведь забакапиться в другое место, или подчистить место для бакапа, конструкция IF...ELSE позволяет и первое и второе, а то и первое после второго ;)
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770877
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ColalexeyvgНе пойму, чем хуже получить ошибку "не удалось сделать бакап, потому что не хватило места", чем ошибку "не дам сделать бакап, а вдруг не хватит места"?
Второе ИМХО намного хуже, по крайней мере, для меня, если бы я был тем админом.

А может не надо ошибку получать совсем?
Можно ведь забакапиться в другое место, или подчистить место для бакапа, конструкция IF...ELSE позволяет и первое и второе, а то и первое после второго ;)Да, круто, хочу сделать бакап в NAS, а оно тихо делает бакап на диск C на том же сервере, потому что программист очень умный, он утром прочитал про IF...ELSE, это его первая работа, и он ещё не получал люлей за то, что все транзакции банка за год пропали :-)

Не, не надо нам такого сервиса, с IF...ELSE!
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39770890
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoMindСам становиться сжатым или кто помогает? В чем собственно сарказм ? Понаблюдайте
Т.е. для предотвращения нехватки места бесполезно знать, насколько бекап сжимается, ИМХО.Вам занятся нечем, вы и проверяйте ваши фантазии, ну или хотя бы включите мозг. Бэкап со сжатем выполняется быстрее чем без сжатия. Как вы думаете возможно ли такое если сервер будет сначала делать полный несжатый бэкап, а потом уже на диске его пережимать?
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39771377
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у него еще и базы в совместимости 2005 не жмутся.
все да, а эти нет, так что нет пределов фантазии:
L_argoПо своим наблюдениям скажу, что база тоже должна быть не ниже 2008.

Стоял склсервер 2008R2 этерпрайз.
Там была база с 2005 совместимостью. Она при бекапе не упаковывалась.
Когда я ей поставил совместимость 2008, то она начала паковаться.
Чисто эмпирическое наблюдение.
21786947
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39771398
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindВам занятся нечем, вы и проверяйте ваши фантазии, ну или хотя бы включите мозг. Бэкап со сжатем выполняется быстрее чем без сжатия. Как вы думаете возможно ли такое если сервер будет сначала делать полный несжатый бэкап, а потом уже на диске его пережимать?Чушь. А разве я утверждал, что сервер сначала делает несжатый бекап, а потом пакует ???
Я всего лишь предположил, что перед началом бекапа сервер резервирует место, как для несжатого бекапа.
И это вполне логично, т.к. база может быть из одной таблички, в кот. лежит mpeg4. И тогда никакого сжатия не будет.
Не уверен, что сервер может предугадать будущий упакованный размер.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39771417
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoЯ всего лишь предположил, что перед началом бекапа сервер резервирует место, как для несжатого бекапа.
И это вполне логично, т.к. база может быть из одной таблички, в кот. лежит mpeg4. И тогда никакого сжатия не будет.Это нелогично, потому что тогда сервер не сможет сделать бакап, который мог бы сделать.
И практикой это подтверждается, о чём вам уже несколько раз написали.
L_argoНе уверен, что сервер может предугадать будущий упакованный размер.Да, не может даже теоретически, даже сделав бакап "без записи", потому что во время бакапа база может изменяться, расти, и любая оценка т.о. становится бесполезной. Скервер может начать бакап утром, а к вечеру, когда он завершится, в базу добавится ещё террабайт. И этот дополнительный террабайт тоже в итоге окажется в этом бакапе, начатом утром.
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39771419
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgL_argoЯ всего лишь предположил, что перед началом бекапа сервер резервирует место, как для несжатого бекапа.
И это вполне логично, т.к. база может быть из одной таблички, в кот. лежит mpeg4. И тогда никакого сжатия не будет.Это нелогично, потому что тогда сервер не сможет сделать бакап, который мог бы сделать.
И практикой это подтверждается, о чём вам уже несколько раз написали.Забыл добавить - ещё и потому, что такая оценка будет неправильной, потому что база может меняться во время бакапа.

Т.о. получаем две ошибки:
1) не делаем бакап, хотя места хватает
2) даже если место зарезервировали "без сжатия", всё равно места может не хватить, и предыдущая жертва была напрасной
...
Рейтинг: 0 / 0
Как определить максимальный размер будущего полного бэкапа?
    #39771424
Col
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Я же давал линк, неужели так тяжело прочесть страницу текта?
Давайте тогда уж приведу прямую цитату, которая объясняет как высчитывается место для резервации файла бакапа с компрессией:
авторFor compressed backups, it is not possible to accurately estimate the final size of the target backup device, as it depends on how compressible the data is. SQL Server creates a target backup device with a pre-allocated size that is equal to one third the reserved size of the database that is being backed up.

Я там жирненьким отметил если лень и это прочесть.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как определить максимальный размер будущего полного бэкапа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]