Сделал копию базы данных, но размер копии больше - PullRequest
2 голосов
/ 27 июня 2011

Я щелкнул правой кнопкой мыши базу данных -> задачи -> скопировать базу данных и создал копию.

Я заметил, что копия примерно в два раза больше по размеру (мб). Почему это?

Ответы [ 2 ]

2 голосов
/ 28 июня 2011

Я предполагаю, что MDF будут одинаковыми (те же данные), но LDF больше из-за регистрации количества данных. Запустите это для базы данных:

SELECT size/128.0 AS MB, name, physical_name FROM sys.database_files

Кроме того, каковы модели восстановления? Если новый FULL, то LDF будет расти до тех пор, пока не произойдет резервное копирование журнала (я подозреваю, что «старый» был усечен или около того). Проверьте с помощью:

SELECT recovery_model_desc, name FROM sys.databases
0 голосов
/ 28 июня 2011

Я пытался использовать этот мастер, и файлы данных и журналов были для меня одинакового размера.Мне интересно, была ли сокращена исходная база данных с момента копирования (это могло быть сделано фоновым заданием, планом обслуживания или другим пользователем), или если вы используете какие-либо продукты сжатия (в SQL или в Windows).Также, если вы можете определить, какие объекты занимают больше места, это может пролить свет на вещи.Обратите внимание на два прокомментированных места, в которых вам придется жестко задавать имя старой и новой базы данных.

DECLARE 
    @old_db SYSNAME = N'old_db_name',
    @new_db SYSNAME = N'new_db_name';

WITH [old] AS
(
    SELECT 
        t = OBJECT_SCHEMA_NAME([object_id], DB_ID(@old_db)) 
            + '.' + OBJECT_NAME([object_id], DB_ID(@old_db)),
        r = row_count,
        s = used_page_count
    FROM old_db_name.sys.dm_db_partition_stats -- change this line!
    WHERE index_id IN (0,1)
    AND OBJECT_SCHEMA_NAME([object_id], DB_ID(@old_db)) <> 'sys'
),
[new] AS
(
    SELECT 
        t = OBJECT_SCHEMA_NAME([object_id], DB_ID(@new_db)) 
            + '.' + OBJECT_NAME([object_id], DB_ID(@new_db)),
        r = row_count,
        s = used_page_count
    FROM new_db_name.sys.dm_db_partition_stats -- change this line!
    WHERE index_id IN (0,1)
    AND OBJECT_SCHEMA_NAME([object_id], DB_ID(@new_db)) <> 'sys'
)
SELECT
    [old].t, [new].t,
    [old_rc] = SUM([old].r), [old_kb] = SUM([old].s*8),
    [new_rc] = SUM([new].r), [new_kb] = SUM([new].s*8),
    spot = CASE WHEN COALESCE(SUM([old].r), -1) <> COALESCE(SUM([new].r), -1)
        OR COALESCE(SUM([old].s*8), -1) <> COALESCE(SUM([new].s*8), -1) THEN
            ' <----------' ELSE '' END
FROM
    [old] FULL OUTER JOIN [new]
    ON [old].t = [new].t
GROUP BY [old].t, [new].t
ORDER BY [old].t, [new].t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...