๊ธฐ๋ค๋ฆฌ๋ค! ๊ธฐ๋ค๋ฆฌ๋ค! ์ฌ์ค, ์ด๊ฒ์ SQL Server ๋ฐฑ์ ์ ํ์ ๋ํ ๋ ๋ค๋ฅธ ๊ธฐ์ฌ๊ฐ ์๋๋๋ค. ๋ณต๊ตฌ ๋ชจ๋ธ์ ์ฐจ์ด์ ๊ณผ ๋๋ฌด ์๋ ๋ก๊ทธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ด์ผ๊ธฐํ์ง ์๊ฒ ์ต๋๋ค.
์๋ง๋ (์๋ง๋) ์ด ๊ฒ์๋ฌผ์ ์ฝ์ ํ ํ์ค ์๋จ์ ์ฌ์ฉํ์ฌ ์ ๊ฑฐ๋ ๋ฐฑ์ ์ด ๋ด์ผ ๋ฐค 1.5๋ฐฐ ๋ ๋น ๋ฅด๊ฒ ์ ๊ฑฐ๋๋์ง ํ์ธํ ์ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ BACKUP DATABASE ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ๊ธ ๋ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ธ์ ๋ด์ฉ์ด ๋๋ฌด ๋ปํ๋ค๋ฉด ์ฃ์กํฉ๋๋ค. ๋๋ "habr SQL Server ๋ฐฑ์ "์ด๋ผ๋ ๋ฌธ๊ตฌ์ ๋ํด Google์์ ์ฐพ์ ๋ชจ๋ ๊ฒ์ ์ฝ์์ผ๋ฉฐ ๋จ์ผ ๊ธฐ์ฌ์์ ๋ฐฑ์ ์๊ฐ์ด ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ป๊ฒ๋ ์ํฅ์ ๋ฐ์ ์ ์๋ค๋ ์ฌ์ค์ ๋ํ ์ธ๊ธ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
Alexander Gladchenko์ ์๊ฒฌ์ ์ฆ์ ์ฃผ๋ชฉํ๊ฒ ์ต๋๋ค.
ํ๋ก๋์ ์์๋ BUFFERCOUNT, BLOCKSIZE, MAXTRANSFERSIZE ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ์ง ๋ง์ญ์์ค. ๊ทธ๋ฌํ ๊ธฐ์ฌ๋ฅผ ์ฐ๊ธฐ ์ํด์๋ง ๋ง๋ค์ด์ก์ต๋๋ค. ์ค์ ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ฆ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๋ฌผ๋ก ๊ฐ์ฅ ๋๋ํ๊ณ ๋
์ ์ ์ธ ์ฝํ
์ธ ๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ ๋ฉ์ง ์ผ์ด์ง๋ง ์ํ๊น๊ฒ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ด ์ฃผ์ ์ ๊ดํ ์์ด ๋ฐ ๋ฌ์์์ด ๊ธฐ์ฌ/๊ฒ์๋ฌผ์ด ๋ชจ๋ ์์ต๋๋ค(์ ๋ ํญ์ ์ด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ถ๋ฌ์ผ ํ ์ง ํผ๋์ค๋ฝ์ต๋๋ค). ๋ด๊ฐ ๋ง๋ ๊ฒ ์ค ์ผ๋ถ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ์ฐ์ ๋ค์์์ ์ฝ๊ฐ ๋จ์ํ๋ BACKUP ๊ตฌ๋ฌธ์ ์ฒจ๋ถํ๊ฒ ์ต๋๋ค.
BACKUP DATABASE { database_name | @database_name_var }
TO <backup_device> [ ,...n ]
<...>
[ WITH { <...>
| <general_WITH_options> [ ,...n ] } ]
[;]
<general_WITH_options> [ ,...n ]::=
<...>
--Media Set Options
<...>
| BLOCKSIZE = { blocksize | @blocksize_variable }
--Data Transfer Options
BUFFERCOUNT = { buffercount | @buffercount_variable }
| MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }
<...>
<โฆ> - ๋ญ๊ฐ๊ฐ ์์๋ค๋ ๋ป์ธ๋ฐ, ์ง๊ธ์ ์ฃผ์ ์ ๊ด๋ จ์ด ์์ด ์ญ์ ํ์ต๋๋ค.
๋ณดํต ์ด๋ป๊ฒ ๋ฐฑ์ ์ ํ์๋์? ์์ญ์ต ๊ฐ์ ๊ธฐ์ฌ์์ ๋ฐฑ์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ด๋ป๊ฒ "๊ฐ๋ฅด์น"๋์? ์ผ๋ฐ์ ์ผ๋ก ์์ฃผ ํฌ์ง ์์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ผํ์ฑ ๋ฐฑ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์์ฑํฉ๋๋ค.
BACKUP DATABASE smth
TO DISK = 'D:Backupsmth.bak'
WITH STATS = 10, CHECKSUM, COMPRESSION, COPY_ONLY;
--ะปะฐะดะฝะพ, CHECKSUM ั ะฝะฐะฟะธัะฐะป ัะพะปัะบะพ ััะพะฑั ะบะฐะทะฐัััั ัะผะฝะตะต
๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ๋ฐฑ์ ์ ๋ํ ๊ธฐ์ฌ์์ ์ผ๋ฐ์ ์ผ๋ก ์ธ๊ธ๋๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์์ 75-90%๊ฐ ์ฌ๊ธฐ์ ๋์ด๋์ด ์์ต๋๋ค. ์, INIT, SKIP๋ ์์ต๋๋ค. MSDN์ ๋ฐฉ๋ฌธํด ๋ณด์ จ๋์? ํ๋ฉด XNUMX๊ฐ์ ๋ํ ์ต์ ์ด ์๋ค๋ ๊ฒ์ ๋ณด์ จ๋์? ๋๋ ๋ดค๋๋ฐ...
์๋ง๋ ์ฒซ ๋ฒ์งธ ์ฝ๋ ๋ธ๋ก์ ๋จ์ ์๋ ์ธ ๊ฐ์ง ๋งค๊ฐ๋ณ์์ธ BLOCKSIZE, BUFFERCOUNT ๋ฐ MAXTRANSFERSIZE์ ๋ํด ๋ ์์ธํ ์ค๋ช ํ ๊ฒ์์ ์ด๋ฏธ ์๊ณ ๊ณ์ค ๊ฒ์ ๋๋ค. MSDN์ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ธ๋ก ํฌ๊ธฐ = { ๋ธ๋ก ํฌ๊ธฐ | @ ๋ธ๋ก ํฌ๊ธฐ_๋ณ์ } - ๋ฌผ๋ฆฌ์ ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ํ๋ ๋๋ค. ์ง์๋๋ ํฌ๊ธฐ๋ 512, 1024, 2048, 4096, 8192, 16, 384 ๋ฐ 32๋ฐ์ดํธ(768KB)์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ํ ์ดํ ์ฅ์น์ ๊ฒฝ์ฐ 65์ด๊ณ ๊ธฐํ ์ฅ์น์ ๊ฒฝ์ฐ 536์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก BACKUP ๋ฌธ์ด ์ฅ์น์ ์ ํฉํ ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ์ ํํ๋ฏ๋ก ์ด ๋งค๊ฐ๋ณ์๋ ํ์ํ์ง ์์ต๋๋ค. ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ฉด ์๋ ๋ธ๋ก ํฌ๊ธฐ ์ ํ์ด ๋ช ์์ ์ผ๋ก ๋ฌด์๋ฉ๋๋ค.
๋ฒํผ์นด์ดํธ = { ๋ฒํผ ์ | @ buffercount_๋ณ์ } - ๋ฐฑ์ ์์ ์ ์ฌ์ฉ๋ ์ด I/O ๋ฒํผ ์๋ฅผ ์ ์ํฉ๋๋ค. ์์ ์ ์ ๊ฐ์ ์ง์ ํ ์ ์์ง๋ง ๋ฒํผ ์๊ฐ ๋ง์ผ๋ฉด Sqlservr.exe ํ๋ก์ธ์ค์ ๊ณผ๋ํ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ผ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฒํผ๊ฐ ์ฌ์ฉํ๋ ์ด ๊ณต๊ฐ๋์ ๋ค์ ๊ณต์์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
BUFFERCOUNT * MAXTRANSFERSIZE
.
์ต๋ ์ ์ก ํฌ๊ธฐ = { ์ต๋ ์ ์ก ํฌ๊ธฐ | @ ์ต๋ ์ ์ก ํฌ๊ธฐ_๋ณ์ }๋ SQL Server์ ๋ฐฑ์ ์ธํธ ๋ฏธ๋์ด ๊ฐ์ ๊ตํํ ์ต๋ ๋ฐ์ดํฐ ํจํท ํฌ๊ธฐ(๋ฐ์ดํธ)๋ฅผ ์ง์ ํฉ๋๋ค. 65๋ฐ์ดํธ(536KB)๋ถํฐ ์ต๋ 64๋ฐ์ดํธ(4MB)์ ๋ฐฐ์๊ฐ ์ง์๋ฉ๋๋ค.
๋งน์ธํฉ๋๋ค. ์ด์ ์ ์ด ๋ด์ฉ์ ์ฝ์ด๋ณธ ์ ์ด ์์ง๋ง ๊ทธ๊ฒ์ด ์์ฐ์ฑ์ ์ผ๋ง๋ ๋ง์ ์ํฅ์ ๋ฏธ์น ์ ์๋์ง๋ ์ ํ ์๊ฐํด ๋ณธ ์ ์ด ์์ต๋๋ค. ๋์ฑ์ด, ๋๋ ์ผ์ข ์ "์ปค๋ฐ ์์"์ํด์ผํ๊ณ ์ง๊ธ๋ ๊ทธ๋ค์ด ์ ํํ ๋ฌด์์ํ๊ณ ์๋์ง ์์ ํ ์ดํดํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ์ธ์ ํด์ผํฉ๋๋ค. ์๋ง๋ ๋ฒํผ๋ง๋ I/O ๋ฐ ํ๋ ๋๋ผ์ด๋ธ ์์ ์ ๋ํด ๋ ์ฝ์ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ธ์ ๊ฐ๋ ์ด ์์ ์ ์ํํ๊ฒ ์ง๋ง ์ง๊ธ์ ์ด๋ฌํ ๊ฐ์ด ๋ฐฑ์ ์ํ ์๋์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
10GB ์ ๋์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด SSD์ ๋ฃ๊ณ , ๋ฐฑ์ ์ฉ ๋๋ ํ ๋ฆฌ๋ HDD์ ๋์์ต๋๋ค.
๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์์ ํ ์ด๋ธ์ ๋ง๋ญ๋๋ค(์์ ํ ์ด๋ธ์ด ์์ผ๋ฏ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ ์์ธํ ์ดํด๋ณผ ์ ์์ง๋ง ์ค์ค๋ก ๊ฒฐ์ ํฉ๋๋ค).
DROP TABLE IF EXISTS ##bt_results;
CREATE TABLE ##bt_results (
id int IDENTITY (1, 1) PRIMARY KEY,
start_date datetime NOT NULL,
finish_date datetime NOT NULL,
backup_size bigint NOT NULL,
compressed_size bigint,
block_size int,
buffer_count int,
transfer_size int
);
์คํฌ๋ฆฝํธ์ ์๋ฆฌ๋ ๊ฐ๋จํฉ๋๋ค. ๊ฐ๊ฐ ํ๋์ ๋งค๊ฐ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ์ค์ฒฉ ๋ฃจํ, BACKUP ๋ช ๋ น์ ์ด๋ฌํ ๋งค๊ฐ ๋ณ์ ์ฝ์ , msdb.dbo.backupset์ ๊ธฐ๋ก๊ณผ ํจ๊ป ๋ง์ง๋ง ๋ ์ฝ๋ ์ ์ฅ, ๋ฐฑ์ ํ์ผ ์ญ์ ๋ฐ ๋ค์ ๋ฐ๋ณต์ ๋๋ค. . ๋ฐฑ์ ์คํ ๋ฐ์ดํฐ๋ ๋ฐฑ์ ์ธํธ์์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ ํ๋๊ฐ ๋ค์ ๋จ์ด์ง์ง๋ง(์ด ๋จ์๋ ์์) ์ด ์ ๋๋ ๊ฒฌ๋ ์ ์์ต๋๋ค.
๋จผ์ ๋ฐฑ์ ์ ์ญ์ ํ๋ ค๋ฉด xp_cmdshell์ ํ์ฑํํด์ผ ํฉ๋๋ค(๊ทธ๋ฐ ๋ค์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋นํ์ฑํํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค).
EXEC sp_configure 'show advanced options', 1;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
GO
๊ธ์ ์ฌ์ค:
DECLARE @tmplt AS nvarchar(max) = N'
BACKUP DATABASE [bt]
TO DISK = ''D:SQLServerbackupbt.bak''
WITH
COMPRESSION,
BLOCKSIZE = {bs},
BUFFERCOUNT = {bc},
MAXTRANSFERSIZE = {ts}';
DECLARE @sql AS nvarchar(max);
/* BLOCKSIZE values */
DECLARE @bs int = 4096,
@max_bs int = 65536;
/* BUFFERCOUNT values */
DECLARE @bc int = 7,
@min_bc int = 7,
@max_bc int = 800;
/* MAXTRANSFERSIZE values */
DECLARE @ts int = 524288, --512KB, default = 1024KB
@min_ts int = 524288,
@max_ts int = 4194304; --4MB
SELECT TOP 1
@bs = COALESCE (block_size, 4096),
@bc = COALESCE (buffer_count, 7),
@ts = COALESCE (transfer_size, 524288)
FROM ##bt_results
ORDER BY id DESC;
WHILE (@bs <= @max_bs)
BEGIN
WHILE (@bc <= @max_bc)
BEGIN
WHILE (@ts <= @max_ts)
BEGIN
SET @sql = REPLACE (REPLACE (REPLACE(@tmplt, N'{bs}', CAST(@bs AS nvarchar(50))), N'{bc}', CAST (@bc AS nvarchar(50))), N'{ts}', CAST (@ts AS nvarchar(50)));
EXEC (@sql);
INSERT INTO ##bt_results (start_date, finish_date, backup_size, compressed_size, block_size, buffer_count, transfer_size)
SELECT TOP 1 backup_start_date, backup_finish_date, backup_size, compressed_backup_size, @bs, @bc, @ts
FROM msdb.dbo.backupset
ORDER BY backup_set_id DESC;
EXEC xp_cmdshell 'del "D:SQLServerbackupbt.bak"', no_output;
SET @ts += @ts;
END
SET @bc += @bc;
SET @ts = @min_ts;
WAITFOR DELAY '00:00:05';
END
SET @bs += @bs;
SET @bc = @min_bc;
SET @ts = @min_ts;
END
์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๊ฐ์๊ธฐ ์ค๋ช ์ด ํ์ํ๋ฉด ๋๊ธ์ด๋ PM์ ์์ฑํ์ธ์. ์ง๊ธ์ BACKUP DATABASE์ ๋ฃ์ ๋งค๊ฐ๋ณ์์ ๋ํด์๋ง ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค.
BLOCKSIZE์ ๊ฒฝ์ฐ "๋ซํ" ๊ฐ ๋ชฉ๋ก์ด ์์ผ๋ฉฐ BLOCKSIZE < 4KB๋ก ๋ฐฑ์ ์ ์ํํ์ง ์์์ต๋๋ค. MAXTRANSFERSIZE๋ 64KB์ ๋ฐฐ์(64KB์์ 4MB๊น์ง)์ธ ๋ชจ๋ ์ซ์์ ๋๋ค. ๋ด ์์คํ ์ ๊ธฐ๋ณธ๊ฐ์ 1024KB์ด๋ฉฐ 512 - 1024 - 2048 - 4096์ ์ฌ์ฉํ์ต๋๋ค.
BUFFERCOUNT๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ด๋ ค์ ์ต๋๋ค. ์์์ผ ์ ์์ง๋ง ๋งํฌ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ ์์ต๋๋ค.
๋ฉ์์ง 3013, ์์ค 16, ์ํ 1, ์ค 7 BACKUP DATABASE๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ฉ๋๋ค.
๋ฉ์์ง 701, ์์ค 17, ์ํ 123, ์ค 7 ์ด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ์๋ '๊ธฐ๋ณธ' ๋ฆฌ์์ค ํ์ ์์คํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํฉ๋๋ค.
๋น๊ต๋ฅผ ์ํด ๋จผ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํ ์ง์ ํ์ง ์๊ณ ๋ฐฑ์ ์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
BACKUP DATABASE [bt]
TO DISK = 'D:SQLServerbackupbt.bak'
WITH COMPRESSION;
์, ๋ฐฑ์ ๋ฐ ๋ฐฑ์ :
ํ์ผ 1070072์ ๋ฐ์ดํฐ๋ฒ ์ด์ค 'bt', ํ์ผ 'bt'์ ๋ํด 1 ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค.
ํ์ผ 2์ ๋ฐ์ดํฐ๋ฒ ์ด์ค 'bt', ํ์ผ 'bt_log'์ ๋ํด 1ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค.
BACKUP DATABASE๋ 1070074์ด(53.171MB/์ด) ๋ง์ 157.227ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
๋งค๊ฐ ๋ณ์๋ฅผ ํ
์คํธํ๋ ์คํฌ๋ฆฝํธ ์์ฒด๋ ๋ช ์๊ฐ ๋ง์ ์๋ํ์ผ๋ฉฐ ๋ชจ๋ ์ธก์ ์
SELECT TOP 7 WITH TIES
compressed_size,
block_size,
buffer_count,
transfer_size,
DATEDIFF(SECOND, start_date, finish_date) AS backup_time_sec
FROM ##bt_results
ORDER BY backup_time_sec ASC;
์ฃผ์, ๋งค์ฐ ์ค์ํ ๋ฉ๋ชจ์
๋๋ค.
์ด๋ฌํ ๊ฐ ๋ฒ์ ๋ด์์ ๋งค๊ฐ๋ณ์์ ๋ฐฑ์ ์๋ ๊ฐ์ ๊ด๊ณ๋ ๋ฌด์์์ด๋ฉฐ ํจํด์ด ์๋ค๊ณ ์์ ์๊ฒ ๋งํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ด์ฅ๋ ๋งค๊ฐ๋ณ์์์ ๋ฒ์ด๋๋ ๊ฒ์ ๋ถ๋ช ํ ๊ฒฐ๊ณผ์ ์ข์ โโ์ํฅ์ ๋ฏธ์ณค์ต๋๋ค.
์ ๊ฒ๋ค. ํ์ค BACKUP ๋งค๊ฐ๋ณ์๋ฅผ ๊ด๋ฆฌํจ์ผ๋ก์จ๋ง ๋ฐฑ์ ์ ๊ฑฐ ์๊ฐ์ด 2๋ฐฐ ์ฆ๊ฐํ์ต๋๋ค. ์ด๊ธฐ์๋ 26์ด์์ง๋ง 53์ด์์ต๋๋ค. ๋์์ง ์์ฃ ? ํ์ง๋ง ์ฐ๋ฆฌ๋ ๋ณต์ ๊ณผ์ ์์ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ์ง์ผ๋ด์ผ ํฉ๋๋ค. ์ด์ ๋ณต๊ตฌํ๋ ๋ฐ 4๋ฐฐ ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ์ด๋ป๊ฒ ๋๋์?
๋จผ์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ๋ฐฑ์ ์ ๋ณต์ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํด ๋ณด๊ฒ ์ต๋๋ค.
RESTORE DATABASE [bt]
FROM DISK = 'D:SQLServerbackupbt.bak'
WITH REPLACE, RECOVERY;
๊ธ์, ๋น์ ์ ๋ฐฉ๋ฒ์ด ์๊ณ ๊ต์ฒด๊ฐ ๊ต์ฒด๊ฐ ์๋๋ฉฐ ๋ณต๊ตฌ๊ฐ ๋ณต๊ตฌ๊ฐ ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ด๋ ๊ฒ ํฉ๋๋ค:
ํ์ผ 1070072์ ๋ฐ์ดํฐ๋ฒ ์ด์ค 'bt', ํ์ผ 'bt'์ ๋ํด 1 ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค.
ํ์ผ 2์ ๋ฐ์ดํฐ๋ฒ ์ด์ค 'bt', ํ์ผ 'bt_log'์ ๋ํด 1ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค.
RESTORE DATABASE๋ 1070074์ด(40.752MB/์ด) ๋ง์ 205.141ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
์ด์ BLOCKSIZE, BUFFERCOUNT ๋ฐ MAXTRANSFERSIZE๊ฐ ๋ณ๊ฒฝ๋ ๋ฐฑ์ ์ ๋ณต์ํด ๋ณด๊ฒ ์ต๋๋ค.
BLOCKSIZE = 16384, BUFFERCOUNT = 224, MAXTRANSFERSIZE = 4194304
RESTORE DATABASE๋ 1070074์ด(32.283MB/์ด) ๋ง์ 258.958ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
BLOCKSIZE = 4096, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 4194304
RESTORE DATABASE๋ 1070074์ด(32.682MB/์ด) ๋ง์ 255.796ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
BLOCKSIZE = 16384, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 2097152
RESTORE DATABASE๋ 1070074์ด(32.091MB/์ด) ๋ง์ 260.507ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
BLOCKSIZE = 4096, BUFFERCOUNT = 56, MAXTRANSFERSIZE = 4194304
RESTORE DATABASE๋ 1070074์ด(32.401MB/์ด) ๋ง์ 258.015ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
RESTORE DATABASE ๋ฌธ์ ๋ณต๊ตฌ ์ค์ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ ์ด๋ฌํ ๋งค๊ฐ ๋ณ์๋ ์ฌ๊ธฐ์ ์ง์ ๋์ง ์์ผ๋ฉฐ SQL Server ์์ฒด๊ฐ ๋ฐฑ์ ์์ ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ณต ํ์๋ ๊ฑฐ์ 20% ๋ ๋น ๋ฅธ ์ด๋์ด ์์ ์ ์๋ค๋ ๊ฒ์ด ๋ถ๋ช ํฉ๋๋ค(์์งํ ๋งํด์ ๋ณต๊ตฌ์ ๋ง์ ์๊ฐ์ ์๋นํ์ง ์์๊ณ "๊ฐ์ฅ ๋น ๋ฅธ" ๋ฐฑ์ ์ ์ฌ๋ฌ ๊ฐ ์คํํ์ฌ ์ฑ๋ฅ ์ ํ๊ฐ ์๋์ง ํ์ธํ์ต๋๋ค.).
ํน์๋ผ๋ ์ด๊ฒ์ด ๋ชจ๋ ์ฌ๋์๊ฒ ์ต์ ์ธ ์ผ๋ถ ๋งค๊ฐ๋ณ์๊ฐ ์๋๋ผ๋ ์ ์ ๋ถ๋ช ํ ํ๊ฒ ์ต๋๋ค. ํ ์คํธ๋ฅผ ํตํด์๋ง ์ต์ ์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋๋ ์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ง๋ง ์ฌ๋ฌ๋ถ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฑ์ ์ "์กฐ์ "ํ ์ ์๊ณ ์ค์ ๋ก ๋ ๋น ๋ฅด๊ฒ ๊ตฌ์ฑํ๊ณ ๋ฐฐํฌํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ํ ์์คํ ์ ๋ฐ๋ผ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ์ค๋ช ์ ์ ์ฒด๋ฅผ ์ฝ์ด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
๋ฐฑ์ ์ ๋ํด ์ฐ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ "์กฐ์ " ๋งค๊ฐ๋ณ์๋ณด๋ค ๋ ์ผ๋ฐ์ ์ธ ํ๋ ์ด์์ "์ต์ ํ"์ ๋ํด ์ฆ์ ์์ฑํ๊ณ ์ถ์ต๋๋ค. ์์์ ์ค๋ช ), Habrรฉ์์๋ ์์ง ์ค๋ช ๋์ง ์์์ต๋๋ค.
BACKUP DATABASE ๋ฐ๋ก ์๋์ ์๋ ๋ฌธ์์ ๋ ๋ฒ์งธ ์ค์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
TO <backup_device> [ ,...n ]
์ฌ๋ฌ ๊ฐ์ backup_device๋ฅผ ์ง์ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์๋์? ๊ตฌ๋ฌธ์ด ์ด๋ฅผ ํ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ์ผ์ด ์ผ์ด๋ ๊ฒ์ ๋๋ค. ๋ฐฑ์ ์ ๋จ์ํ ์ฌ๋ฌ ์ฅ์น์ "ํ์ฐ"๋ฉ๋๋ค. ์ ๊ฒ๋ค. ๊ฐ "์ฅ์น"๋ ๊ฐ๋ณ์ ์ผ๋ก ์ธ๋ชจ๊ฐ ์์ผ๋ฉฐ ํ๋๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฑฐ๋ ์ ์ฒด ๋ฐฑ์ ์ ์์ด๋ฒ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฒ์ง์ด ๋ฐฑ์ ์๋์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ๊น์?
๋์ผํ ํด๋์ ๋๋ํ ์์นํ ๋ ๊ฐ์ "์ฅ์น"์ ๋ฐฑ์ ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
BACKUP DATABASE [bt]
TO
DISK = 'D:SQLServerbackupbt1.bak',
DISK = 'D:SQLServerbackupbt2.bak'
WITH COMPRESSION;
์ธ๊ณ์ ์๋ฒ์ง๋ค์ด์ฌ, ์ ์ด๋ฐ ์ผ์ด ๋ฒ์ด์ง๊ณ ์์ต๋๊น?
ํ์ผ 1070072์ ๋ฐ์ดํฐ๋ฒ ์ด์ค 'bt', ํ์ผ 'bt'์ ๋ํด 1 ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค 'bt', ํ์ผ 'bt'์ ๋ํด 2ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค.ํ์ผ 1์ '๋ก๊ทธ'๋ฅผ ์ ๋ ฅํฉ๋๋ค.
BACKUP DATABASE๋ 1070074์ด(40.092MB/์ด) ๋ง์ 208.519ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
๊ฐ์๊ธฐ ๋ฐฑ์ ์๋๊ฐ 25% ๋นจ๋ผ์ก์ต๋๊น? ์ฅ์น๋ฅผ ๋ช ๊ฐ ๋ ์ถ๊ฐํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
BACKUP DATABASE [bt]
TO
DISK = 'D:SQLServerbackupbt1.bak',
DISK = 'D:SQLServerbackupbt2.bak',
DISK = 'D:SQLServerbackupbt3.bak',
DISK = 'D:SQLServerbackupbt4.bak'
WITH COMPRESSION;
BACKUP DATABASE๋ 1070074์ด(34.234MB/์ด) ๋ง์ 244.200ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
๋ฐฑ์ ์ด ํ ๋์คํฌ์ ์๋ 35๊ฐ ํ์ผ์ ๋์์ ๊ธฐ๋ก๋๋ฏ๋ก ์ ์ฒด์ ์ผ๋ก ๋ฐฑ์ ์ํ ์๊ฐ์ ์ฝ 4%๊ฐ ํฅ์๋ฉ๋๋ค. ๋ ํฐ ์ซ์๋ฅผ ํ์ธํ์ต๋๋ค. ๋ด ๋ ธํธ๋ถ์๋ ์ด๋์ด ์์ต๋๋ค. ์ต์ ์ผ๋ก๋ 4๊ฐ์ ์ฅ์น์ ๋๋ค. ๋น์ ์ ์ํด-๋ชจ๋ฅด๊ฒ ์ด์. ํ์ธํด์ผํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, ๋ง์ฝ ๋น์ ์ด ์ด๋ฌํ ์ฅ์น๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ์ด๊ฒ์ ์ ๋ง ๋ค๋ฅธ ๋์คํฌ์ ๋๋ค. ์ถํํฉ๋๋ค. ์ด๋์ ํจ์ฌ ๋ ์ค์ํ ๊ฒ์ ๋๋ค.
์ด์ ์ด ํ๋ณต์ ํ๋ณตํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํฉ์๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ณต๊ตฌ ๋ช ๋ น์ ๋ณ๊ฒฝํ๊ณ ๋ชจ๋ ์ฅ์น๋ฅผ ๋์ดํด์ผ ํฉ๋๋ค.
RESTORE DATABASE [bt]
FROM
DISK = 'D:SQLServerbackupbt1.bak',
DISK = 'D:SQLServerbackupbt2.bak',
DISK = 'D:SQLServerbackupbt3.bak',
DISK = 'D:SQLServerbackupbt4.bak'
WITH REPLACE, RECOVERY;
RESTORE DATABASE๋ 1070074์ด(38.027MB/์ด) ๋ง์ 219.842ํ์ด์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
์กฐ๊ธ ๋ ๋น ๋ฅด์ง๋ง ๊ฐ๊น์ด ๊ณณ์์๋ ์ค์ํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐฑ์ ์ ๋ ๋นจ๋ฆฌ ์ ๊ฑฐ๋๊ณ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ณต์๋ฉ๋๋ค. ์ฑ๊ณตํฉ๋๊น? ๋๋ก์๋ ๊ฝค ์ฑ๊ณต์ ์ธ ์ผ์ด๋ค. ์ด๊ฒ ะฒะฐะถะฝะพ, ๊ทธ๋์ ๋ฐ๋ณตํฉ๋๋ค - ๋ง์ฝ ๋น์ ์ด ์ด๋ฌํ ํ์ผ ์ค ํ๋๋ผ๋ ์์ค๋๋ฉด ์ ์ฒด ๋ฐฑ์ ๋ ์์ค๋ฉ๋๋ค.
Trace Flags 3213, 3605๋ฅผ ์ฌ์ฉํ์ฌ ํ์๋ ๋ฐฑ์ ์ ๋ณด๋ฅผ ๋ก๊ทธ์์ ์ดํด๋ณด๋ฉด ์ฌ๋ฌ ์ฅ์น์ ๋ฐฑ์ ํ ๋ ์ ์ด๋ BUFFERCOUNT ๊ฐ์๊ฐ ์ฆ๊ฐํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์๋ง๋ BUFFERCOUNT, BLOCKSIZE, MAXTRANSFERSIZE์ ๋ํด ๋ ์ต์ ์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ํํ๋ ค๊ณ ์๋ํ ์ ์์ง๋ง ์ฆ์ ์ฑ๊ณตํ์ง ๋ชปํ๊ณ ์ด๋ฌํ ํ ์คํธ๋ฅผ ๋ค์ ์ํํ๊ธฐ์๋ ๋๋ฌด ๊ฒ์ผ๋ฅธ๋ฐ ํ์ผ ์๊ฐ ๋ค๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐํด๊ฐ ์์ฝ๋ค์. ์ง์์ ์ด๋ฌํ ํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ๋ง๋๋ ๊ฒ์ด ์ด๋ ต์ง ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๊ฐ๊ฒฉ์ ๋ํด ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋ฐฑ์ ์ด ์ฌ์ฉ์ ์์ ๊ณผ ๋์์ ์ ๊ฑฐ๋๋ ๊ฒฝ์ฐ ํ ์คํธ์ ๋ํด ๋งค์ฐ ์ฑ ์๊ฐ ์๋ ์ ๊ทผ ๋ฐฉ์์ ์ทจํด์ผ ํฉ๋๋ค. ๋ฐฑ์ ์ด ๋ ๋นจ๋ฆฌ ์ ๊ฑฐ๋๋ฉด ๋์คํฌ์ ๋ ๋ง์ ๋ถ๋ด์ด ๊ฐํด์ง๊ณ ํ๋ก์ธ์์ ๋ก๋๊ฐ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค(์ฌ์ ํ ์์ถํด์ผ ํจ). ์ฆ์์์) ๋ฐ๋ผ์ ์์คํ ์ ์ ๋ฐ์ ์ธ ์๋ต์ฑ์ด ๊ฐ์ํฉ๋๋ค.
๋๋ด์ ๋๋ค๋ง, ์ ๊ฐ ์ด๋ค ํญ๋ก๋ ํ์ง ์์๋ค๋ ์ ์ ์ถฉ๋ถํ ์ดํดํฉ๋๋ค. ์์ ์ฐ์ฌ์ง ๋ด์ฉ์ ๋ฐฑ์ ์ ์ํํ๊ธฐ ์ํ ์ต์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋๋ค.
๊ทํ๊ฐ ํ๋ ๋ชจ๋ ์ผ์ ๊ทํ ์์ ์ ์ํ๊ณผ ์ํ์ ๋ฐ๋ผ ์ํ๋๋ค๋ ์ ์ ๊ธฐ์ตํ์ญ์์ค. ๋ฐฑ์ ์ ํ์ธํ๊ณ DBCC CHECKDB๋ฅผ ์์ง ๋ง์ธ์.
์ถ์ฒ : habr.com