รอ! รอ! จริงอยู่นี่ไม่ใช่บทความอื่นเกี่ยวกับประเภทของการสำรองข้อมูล SQL Server ฉันจะไม่พูดถึงความแตกต่างระหว่างโมเดลการกู้คืนและวิธีจัดการกับบันทึกที่รกเกินไปด้วยซ้ำ
บางที (อาจจะ) หลังจากอ่านโพสต์นี้แล้ว คุณจะสามารถมั่นใจได้ว่าข้อมูลสำรองที่ถูกลบออกจากคุณโดยใช้วิธีการมาตรฐานจะถูกลบออกในคืนวันพรุ่งนี้ เร็วขึ้น 1.5 เท่า และเนื่องจากคุณใช้พารามิเตอร์ฐานข้อมูลสำรองเพิ่มขึ้นเล็กน้อยเท่านั้น
หากเนื้อหาในโพสต์ชัดเจนสำหรับคุณ ฉันขอโทษ ฉันอ่านทุกสิ่งที่ Google ได้รับสำหรับวลี "การสำรองข้อมูลเซิร์ฟเวอร์ habr sql" และฉันไม่พบการกล่าวถึงข้อเท็จจริงที่ว่าเวลาในการสำรองข้อมูลอาจได้รับอิทธิพลจากการใช้พารามิเตอร์ในทางใดทางหนึ่ง
ฉันจะดึงความสนใจของคุณไปที่ความคิดเห็นของ Alexander Gladchenko ทันที (
อย่าเปลี่ยนพารามิเตอร์ BUFFERCOUNT, BLOCKSIZE, MAXTRANSFERSIZE ในการผลิต ทำขึ้นเพื่อการเขียนบทความดังกล่าวเท่านั้น ในทางปฏิบัติ คุณจะกำจัดปัญหาความจำได้ในเวลาอันรวดเร็ว
แน่นอนว่าคงจะเจ๋งมากถ้าเป็นคนที่ฉลาดที่สุดและโพสต์เนื้อหาพิเศษ แต่น่าเสียดายที่มันไม่เป็นเช่นนั้น มีบทความ/โพสต์ทั้งภาษาอังกฤษและภาษารัสเซีย (ฉันมักจะสับสนว่าจะเรียกอย่างถูกต้องว่าอะไร) สำหรับหัวข้อนี้ นี่คือบางส่วนที่ฉันเจอ:
อันดับแรก ฉันจะแนบไวยากรณ์การสำรองข้อมูลที่ถูกตัดทอนลงเล็กน้อย
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 หรือไม่? คุณเคยเห็นไหมว่ามีตัวเลือกสำหรับหนึ่งหน้าจอครึ่ง? ฉันยังเห็น...
คุณคงทราบแล้วว่าต่อไปเราจะพูดถึงพารามิเตอร์สามตัวที่ยังคงอยู่ในบล็อกแรกของโค้ด - BLOCKSIZE, BUFFERCOUNT และ MAXTRANSFERSIZE นี่คือคำอธิบายจาก MSDN:
ขนาดบล็อคS = { ขนาดบล็อก | @ blockize_variable } - ระบุขนาดฟิสิคัลบล็อกเป็นไบต์ ขนาดที่รองรับคือ 512, 1024, 2048, 4096, 8192, 16, 384 และ 32 ไบต์ (768 KB) ค่าดีฟอลต์คือ 65 สำหรับอุปกรณ์เทปและ 536 สำหรับอุปกรณ์อื่นๆ โดยทั่วไปพารามิเตอร์นี้ไม่จำเป็นเนื่องจากคำสั่ง BACKUP จะเลือกขนาดบล็อกที่เหมาะสมสำหรับอุปกรณ์โดยอัตโนมัติ การตั้งค่าขนาดบล็อกจะแทนที่การเลือกขนาดบล็อกอัตโนมัติอย่างชัดเจน
บัฟเฟอร์ = { จำนวนบัฟเฟอร์ | @ buffercount_variable } - กำหนดจำนวนบัฟเฟอร์ I/O ทั้งหมดที่จะใช้สำหรับการดำเนินการสำรองข้อมูล คุณสามารถระบุค่าจำนวนเต็มบวกใดๆ ได้ แต่บัฟเฟอร์จำนวนมากอาจทำให้เกิดข้อผิดพลาดหน่วยความจำไม่เพียงพอเนื่องจากพื้นที่ที่อยู่เสมือนมากเกินไปในกระบวนการ Sqlservr.exe
จำนวนพื้นที่ทั้งหมดที่ใช้โดยบัฟเฟอร์ถูกกำหนดโดยสูตรต่อไปนี้:
BUFFERCOUNT * MAXTRANSFERSIZE
.
ขนาดการโอนสูงสุด = { การถ่ายโอนสูงสุด | @ ขนาดการถ่ายโอนสูงสุด_ตัวแปร } ระบุขนาดแพ็กเก็ตข้อมูลที่ใหญ่ที่สุดในหน่วยไบต์ เพื่อแลกเปลี่ยนระหว่าง SQL Server และสื่อชุดการสำรองข้อมูล รองรับหลายรายการตั้งแต่ 65 ไบต์ (536 KB) จนถึง 64 ไบต์ (4 MB)
ฉันสาบาน - ฉันเคยอ่านข้อความนี้มาก่อน แต่ก็ไม่เคยเกิดขึ้นกับฉันเลยว่าสิ่งเหล่านี้จะส่งผลต่อประสิทธิภาพการทำงานมากน้อยเพียงใด ยิ่งกว่านั้นเห็นได้ชัดว่าฉันต้อง "เปิดเผย" และยอมรับว่าแม้ตอนนี้ฉันยังไม่เข้าใจสิ่งที่พวกเขากำลังทำอยู่ ฉันอาจต้องอ่านเพิ่มเติมเกี่ยวกับบัฟเฟอร์ I/O และการทำงานกับฮาร์ดไดรฟ์ สักวันหนึ่งฉันจะทำเช่นนี้ แต่ตอนนี้ฉันสามารถเขียนสคริปต์ที่จะตรวจสอบว่าค่าเหล่านี้ส่งผลต่อความเร็วในการสำรองข้อมูลอย่างไร
ฉันสร้างฐานข้อมูลขนาดเล็กขนาดประมาณ 10 GB วางไว้บน 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 สำหรับตอนนี้ ฉันจะบอกคุณเกี่ยวกับพารามิเตอร์ที่ฉันใส่ไว้ในฐานข้อมูลสำรองเท่านั้น
สำหรับ BLOCKSIZE เรามีรายการค่า "ปิด" และฉันไม่ได้สำรองข้อมูลด้วย BLOCKSIZE < 4KB MAXTRANSFERSIZE หมายเลขใด ๆ ที่เป็นทวีคูณของ 64KB - ตั้งแต่ 64KB ถึง 4MB ค่าเริ่มต้นในระบบของฉันคือ 1024KB ฉันใช้ 512 - 1024 - 2048 - 4096
มันยากกว่าด้วย BUFFERCOUNT - อาจเป็นจำนวนบวกก็ได้ แต่ลิงก์บอกว่า
ข่าวสารเกี่ยวกับ 3013 ระดับ 16 สถานะ 1 บรรทัด 7 ฐานข้อมูลสำรองกำลังยุติการทำงานอย่างผิดปกติ
ข่าวสารเกี่ยวกับ 701 ระดับ 17 สถานะ 123 บรรทัด 7 มีหน่วยความจำระบบไม่เพียงพอในกลุ่มทรัพยากร 'ค่าเริ่มต้น' เพื่อเรียกใช้แบบสอบถามนี้
เพื่อการเปรียบเทียบ ก่อนอื่นฉันจะแสดงผลลัพธ์ของการสำรองข้อมูลโดยไม่ต้องระบุพารามิเตอร์ใดๆ เลย:
BACKUP DATABASE [bt]
TO DISK = 'D:SQLServerbackupbt.bak'
WITH COMPRESSION;
สำรองและสำรองข้อมูล:
ประมวลผล 1070072 หน้าสำหรับฐานข้อมูล 'bt', ไฟล์ 'bt' ในไฟล์ 1
ประมวลผล 2 หน้าสำหรับฐานข้อมูล 'bt' ไฟล์ 'bt_log' ในไฟล์ 1
ฐานข้อมูลสำรองประมวลผลเพจ 1070074 สำเร็จใน 53.171 วินาที (157.227 MB/วินาที)
สคริปต์เองกำลังทดสอบพารามิเตอร์ ทำงานได้ภายในสองสามชั่วโมง การวัดทั้งหมดเสร็จสิ้นแล้ว
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;
Attention, หมายเหตุที่สำคัญมากจาก
เราสามารถพูดได้อย่างมั่นใจว่าความสัมพันธ์ระหว่างพารามิเตอร์และความเร็วการสำรองข้อมูลภายในช่วงของค่าเหล่านี้เป็นแบบสุ่มไม่มีรูปแบบ แต่เห็นได้ชัดว่าการย้ายออกจากพารามิเตอร์ในตัวมีผลดีต่อผลลัพธ์อย่างเห็นได้ชัด
เหล่านั้น. การจัดการพารามิเตอร์การสำรองข้อมูลมาตรฐานเท่านั้นที่ทำให้เวลาในการลบข้อมูลสำรองเพิ่มขึ้น 2 เท่า: 26 วินาที เทียบกับ 53 วินาทีในช่วงเริ่มต้น นั่นก็ไม่เลวใช่มั้ย? แต่เราต้องดูว่าจะเกิดอะไรขึ้นกับการฟื้นฟู จะเกิดอะไรขึ้นถ้าตอนนี้ใช้เวลาฟื้นตัวนานกว่า 4 เท่า?
ขั้นแรก มาวัดว่าต้องใช้เวลานานเท่าใดในการกู้คืนข้อมูลสำรองด้วยการตั้งค่าเริ่มต้น:
RESTORE DATABASE [bt]
FROM DISK = 'D:SQLServerbackupbt.bak'
WITH REPLACE, RECOVERY;
คุณเองก็รู้ดีว่ามีวิธีอยู่ การแทนที่ไม่ใช่การแทนที่ การฟื้นตัวไม่ใช่การฟื้นตัว และฉันก็ทำแบบนี้:
ประมวลผล 1070072 หน้าสำหรับฐานข้อมูล 'bt', ไฟล์ 'bt' ในไฟล์ 1
ประมวลผล 2 หน้าสำหรับฐานข้อมูล 'bt' ไฟล์ 'bt_log' ในไฟล์ 1
คืนค่าฐานข้อมูลประมวลผลเพจ 1070074 สำเร็จใน 40.752 วินาที (205.141 MB/วินาที)
ตอนนี้ฉันจะพยายามกู้คืนข้อมูลสำรองที่มีการเปลี่ยนแปลง BLOCKSIZE, BUFFERCOUNT และ MAXTRANSFERSIZE
BLOCKSIZE = 16384, BUFFERCOUNT = 224, MAXTRANSFERSIZE = 4194304
คืนค่าฐานข้อมูลประมวลผลเพจ 1070074 สำเร็จใน 32.283 วินาที (258.958 MB/วินาที)
BLOCKSIZE = 4096, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 4194304
คืนค่าฐานข้อมูลประมวลผลเพจ 1070074 สำเร็จใน 32.682 วินาที (255.796 MB/วินาที)
BLOCKSIZE = 16384, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 2097152
คืนค่าฐานข้อมูลประมวลผลเพจ 1070074 สำเร็จใน 32.091 วินาที (260.507 MB/วินาที)
BLOCKSIZE = 4096, BUFFERCOUNT = 56, MAXTRANSFERSIZE = 4194304
คืนค่าฐานข้อมูลประมวลผลเพจ 1070074 สำเร็จใน 32.401 วินาที (258.015 MB/วินาที)
คำสั่ง RESTORE DATABASE จะไม่เปลี่ยนแปลงระหว่างการกู้คืน ไม่ได้ระบุพารามิเตอร์เหล่านี้ในนั้น SQL Server จะกำหนดพารามิเตอร์เหล่านั้นจากการสำรองข้อมูล และเป็นที่ชัดเจนว่าแม้จะฟื้นตัวก็ยังสามารถได้รับกำไร - เร็วขึ้นเกือบ 20% (พูดตามตรง ฉันไม่ได้ใช้เวลามากนักในการกู้คืน ฉันลองใช้การสำรองข้อมูลที่ "เร็วที่สุด" หลายครั้งและทำให้แน่ใจว่าไม่มีการเสื่อมสภาพ).
ในกรณีนี้ ฉันขอชี้แจงว่าพารามิเตอร์เหล่านี้ไม่ใช่พารามิเตอร์บางตัวที่เหมาะสมที่สุดสำหรับทุกคน คุณสามารถรับพารามิเตอร์ที่เหมาะสมที่สุดสำหรับตัวคุณเองได้โดยการทดสอบเท่านั้น ฉันได้ผลลัพธ์เหล่านี้ คุณจะได้ผลลัพธ์ที่แตกต่างออกไป แต่คุณเห็นว่าคุณสามารถ "ปรับแต่ง" การสำรองข้อมูลของคุณได้ และสามารถสร้างและปรับใช้ได้เร็วขึ้น
ฉันขอแนะนำอย่างยิ่งให้คุณอ่านเอกสารประกอบทั้งหมด เนื่องจากอาจมีความแตกต่างเฉพาะกับระบบของคุณ
ตั้งแต่ฉันเริ่มเขียนเกี่ยวกับการสำรองข้อมูลฉันต้องการเขียนเกี่ยวกับ "การเพิ่มประสิทธิภาพ" อีกหนึ่งรายการทันทีซึ่งเป็นเรื่องปกติมากกว่าพารามิเตอร์ "การปรับแต่ง" (เท่าที่ฉันเข้าใจมันถูกใช้โดยยูทิลิตี้สำรองข้อมูลอย่างน้อยบางตัวอาจใช้ร่วมกับพารามิเตอร์ อธิบายไว้ก่อนหน้านี้) แต่ยังไม่ได้อธิบายไว้ในHabréเช่นกัน
หากเราดูบรรทัดที่สองในเอกสารประกอบ ใต้ฐานข้อมูลสำรอง เราจะเห็น:
TO <backup_device> [ ,...n ]
คุณคิดว่าจะเกิดอะไรขึ้นหากคุณระบุ backup_device หลายเครื่อง ไวยากรณ์อนุญาต และสิ่งที่น่าสนใจมากจะเกิดขึ้น - การสำรองข้อมูลจะ "กระจาย" ไปยังอุปกรณ์ต่างๆ เหล่านั้น. “อุปกรณ์” แต่ละเครื่องจะไม่มีประโยชน์ สูญหายไปหนึ่งเครื่อง สูญเสียข้อมูลสำรองทั้งหมด แต่การละเลงดังกล่าวจะส่งผลต่อความเร็วในการสำรองข้อมูลอย่างไร
มาลองสำรองข้อมูลใน “อุปกรณ์” สองเครื่องที่อยู่เคียงข้างกันในโฟลเดอร์เดียวกัน:
BACKUP DATABASE [bt]
TO
DISK = 'D:SQLServerbackupbt1.bak',
DISK = 'D:SQLServerbackupbt2.bak'
WITH COMPRESSION;
บิดาแห่งโลก ทำไมจึงทำเช่นนี้?
ประมวลผล 1070072 หน้าสำหรับฐานข้อมูล 'bt', ไฟล์ 'bt' ในไฟล์ 1
ประมวลผล 2 หน้าสำหรับฐานข้อมูล 'bt' ไฟล์ 'bt'เข้าสู่ระบบ' ในไฟล์ 1.
ฐานข้อมูลสำรองประมวลผลเพจ 1070074 สำเร็จใน 40.092 วินาที (208.519 MB/วินาที)
การสำรองข้อมูลเร็วขึ้น 25% ทันทีหรือไม่? จะเกิดอะไรขึ้นถ้าเราเพิ่มอุปกรณ์อีกสองสามเครื่อง?
BACKUP DATABASE [bt]
TO
DISK = 'D:SQLServerbackupbt1.bak',
DISK = 'D:SQLServerbackupbt2.bak',
DISK = 'D:SQLServerbackupbt3.bak',
DISK = 'D:SQLServerbackupbt4.bak'
WITH COMPRESSION;
ฐานข้อมูลสำรองประมวลผลเพจ 1070074 สำเร็จใน 34.234 วินาที (244.200 MB/วินาที)
โดยรวมแล้วจะได้รับประมาณ 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;
คืนค่าฐานข้อมูลประมวลผลเพจ 1070074 สำเร็จใน 38.027 วินาที (219.842 MB/วินาที)
เร็วขึ้นเล็กน้อย แต่อยู่ใกล้ๆ ไม่มีนัยสำคัญ โดยทั่วไปการสำรองข้อมูลจะถูกลบออกเร็วขึ้นและกู้คืนในลักษณะเดียวกัน - สำเร็จหรือไม่ สำหรับฉันมันค่อนข้างประสบความสำเร็จ นี้ มันเป็นสิ่งสำคัญฉันจึงขอย้ำอีกครั้ง - ถ้าคุณ หากคุณสูญเสียไฟล์เหล่านี้อย่างน้อยหนึ่งไฟล์ คุณจะสูญเสียข้อมูลสำรองทั้งหมด.
หากคุณดูในบันทึกข้อมูลการสำรองข้อมูลที่แสดงโดยใช้ Trace Flags 3213 และ 3605 คุณจะสังเกตเห็นว่าเมื่อสำรองข้อมูลไปยังอุปกรณ์หลายเครื่อง จำนวน BUFFERCOUNT จะเพิ่มขึ้นเป็นอย่างน้อย อาจเป็นไปได้ว่าคุณสามารถลองเลือกพารามิเตอร์ที่เหมาะสมที่สุดสำหรับ BUFFERCOUNT, BLOCKSIZE, MAXTRANSFERSIZE ได้ แต่ฉันไม่ประสบความสำเร็จในทันทีและฉันขี้เกียจเกินไปที่จะดำเนินการทดสอบดังกล่าวอีกครั้ง แต่สำหรับไฟล์จำนวนอื่น และมันก็น่าเสียดายเรื่องล้อ หากคุณต้องการจัดการการทดสอบดังกล่าวที่บ้าน การสร้างสคริปต์ใหม่ไม่ใช่เรื่องยาก
สุดท้ายนี้เรามาพูดถึงเรื่องราคากันดีกว่า หากการสำรองข้อมูลถูกลบควบคู่ไปกับงานของผู้ใช้ คุณจะต้องใช้แนวทางการทดสอบที่มีความรับผิดชอบสูง เพราะหากการสำรองข้อมูลถูกลบเร็วกว่า ดิสก์จะถูกตึงมากขึ้น โหลดบนโปรเซสเซอร์จะเพิ่มขึ้น (คุณยังต้องบีบอัด ได้ทันที) และการตอบสนองโดยรวมของระบบก็ลดลงตามไปด้วย
ล้อเล่นนะ แต่ฉันเข้าใจดีว่าฉันไม่ได้เปิดเผยอะไรเลย สิ่งที่เขียนไว้ข้างต้นเป็นเพียงการสาธิตวิธีที่คุณสามารถเลือกพารามิเตอร์ที่เหมาะสมที่สุดสำหรับการสำรองข้อมูล
โปรดจำไว้ว่าทุกสิ่งที่คุณทำนั้นทำด้วยความเสี่ยงและอันตรายของคุณเอง ตรวจสอบข้อมูลสำรองของคุณและอย่าลืม DBCC CHECKDB
ที่มา: will.com