MS SQL ဆာဗာ- စတီရွိုက်များပေါ်တွင် အရန်သိမ်းဆည်းပါ။

ခဏနေ။ ခဏနေ။ မှန်ပါသည်၊ ဤသည်မှာ SQL Server အရန်ကူးခြင်းအမျိုးအစားများအကြောင်း အခြားဆောင်းပါးမဟုတ်ပါ။ ပြန်လည်ရယူခြင်းမော်ဒယ်များကြား ခြားနားချက်များနှင့် ကြီးထွားနေသော မှတ်တမ်းကို မည်သို့ကိုင်တွယ်ရမည်ကိုပင် ကျွန်ုပ် မပြောပါ။

(ဖြစ်ကောင်းဖြစ်နိုင်သည်) ဤပို့စ်ကိုဖတ်ပြီးနောက်၊ ပုံမှန်နည်းလမ်းများကိုအသုံးပြု၍ သင့်ထံမှဖယ်ရှားလိုက်သောအရန်ကူးယူမှုကို မနက်ဖြန်ညတွင် ဖယ်ရှားပစ်မည်၊ ကောင်းပြီ၊ 1.5 ဆပိုမိုမြန်ဆန်ကြောင်း သေချာစေမည်ဖြစ်သည်။ သင်သည် အနည်းငယ်သော BACKUP DATABASE ဘောင်များကို ပိုမိုအသုံးပြုခြင်းကြောင့်သာ ဖြစ်သည်။

ပို့စ်ရဲ့ အကြောင်းအရာက မင်းအတွက် ထင်ရှားနေတယ်ဆိုရင် တောင်းပန်ပါတယ်။ “habr sql server backup” ဟူသော စကားစုအတွက် Google မှရရှိသည့်အရာအားလုံးကို ကျွန်တော်ဖတ်ခဲ့ပြီး ဆောင်းပါးတစ်ပုဒ်တွင် ပါရာမီတာများကို အသုံးပြု၍ backup time သည် တစ်နည်းနည်းဖြင့် လွှမ်းမိုးနိုင်သည်ဟူသောအချက်ကို ဆောင်းပါးတစ်ခုတည်းတွင် မတွေ့ရှိရပါ။

Alexander Gladchenko ၏မှတ်ချက်ကိုငါချက်ချင်းအာရုံစိုက်ပါလိမ့်မည် (@mssqlhelp):

ထုတ်လုပ်မှုတွင် BUFFERCOUNT၊ BLOCKSIZE၊ MAXTRANSFERSIZE ဘောင်များကို ဘယ်တော့မှ မပြောင်းပါ။ ထိုသို့သော ဆောင်းပါးများကို ရေးသားရန်သာ ဖန်တီးထားခြင်း ဖြစ်သည်။ လက်တွေ့တွင် သင်သည် မှတ်ဉာဏ်ပြဿနာများကို အချိန်တိုအတွင်း ဖယ်ရှားနိုင်မည်ဖြစ်သည်။

ဉာဏ်အမြော်အမြင်ဆုံးနှင့် သီးသန့်အကြောင်းအရာကို ပို့စ်တင်ရခြင်းမှာ အေးမြပေလိမ့်မည်၊ သို့သော် ကံမကောင်းစွာဖြင့်၊ ဤအရာသည် မဟုတ်ပါ။ အင်္ဂလိပ်ဘာသာနှင့် ရုရှားဘာသာစကား ဆောင်းပါး/ပို့စ်များ နှစ်ခုစလုံး ရှိသည် (သူတို့ကို မည်ကဲ့သို့ မှန်ကန်စွာ ခေါ်ရမည်ကို ကျွန်ုပ် အမြဲတမ်း ရှုပ်ထွေးနေပါသည်) ဤအကြောင်းအရာအတွက် ရည်ညွှန်းထားသည်။ ဒါတွေကတော့ ကျွန်တော်တွေ့ခဲ့ရတဲ့ အချက်တွေထဲက တစ်ချို့ပါ။ အချိန်, два, သုံးခု ( sql.ru တွင်).

ထို့ကြောင့်၊ အစပြုရန်၊ ကျွန်ုပ်သည် အနည်းငယ်ဖြုတ်ချထားသော BACKUP syntax ကို ပူးတွဲတင်ပြပါမည်။ msdn (နည်းအားဖြင့်၊ ကျွန်ုပ်သည် BACKUP DATABASE အကြောင်းကို အထက်တွင် ရေးခဲ့ပြီး၊ ဤအရာအားလုံးသည် ငွေပေးငွေယူမှတ်တမ်း အရန်ကူးခြင်းနှင့် ကွဲပြားသော အရန်ကူးယူခြင်း နှစ်ခုလုံးနှင့် သက်ဆိုင်သော်လည်း လူသိနည်းသော အကျိုးသက်ရောက်မှုဖြင့် ဖြစ်နိုင်သည်)။

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 я написал только чтобы казаться умнее

ယေဘုယျအားဖြင့်၊ အရန်ကူးခြင်းဆိုင်ရာ ဆောင်းပါးများတွင် အများအားဖြင့် ဖော်ပြထားသော ကန့်သတ်ဘောင်အားလုံး၏ ၇၅-၉၀ ရာခိုင်နှုန်းသည် ဤနေရာတွင် ဖော်ပြထားပါသည်။ ကောင်းပြီ၊ INIT၊ SKIP လည်းရှိတယ်။ MSDN ကို သင် သွားရောက်ဖူးပါသလား။ ဖန်သားပြင်တစ်ခုနှင့် တစ်ခြမ်းအတွက် ရွေးချယ်စရာများ ရှိသည်ကို သင်မြင်ဖူးပါသလား။ ငါလည်းမြင်တယ်...

BLOCKSIZE၊ BUFFERCOUNT နှင့် MAXTRANSFERSIZE ကုဒ်၏ပထမဘလောက်တွင်ကျန်ရှိနေသော parameters သုံးခုအကြောင်း ဆက်လက်ဆွေးနွေးမည်ကို သင်သဘောပေါက်ထားပြီးဖြစ်သည်။ ဤသည်မှာ MSDN မှ ၎င်းတို့၏ ရှင်းလင်းချက်ဖြစ်သည်။

BLOCKSIZE = { á€á€Żá€śá€¸á€Ąá€›á€˝á€šá€şá€Ąá€…ဏး | @ blocksize_variable } - ဘိုက်ဖြင့် ရုပ်ပိုင်းဆိုင်ရာ ပိတ်ဆို့အရွယ်အစားကို ညွှန်ပြသည်။ ပံ့ပိုးပေးထားသော အရွယ်အစားများမှာ 512၊ 1024၊ 2048၊ 4096၊ 8192၊ 16၊ 384 နှင့် 32 bytes (768 KB) ဖြစ်သည်။ မူရင်းတန်ဖိုးမှာ တိပ်စက်များအတွက် 65 ဖြစ်ပြီး အခြားစက်ပစ္စည်းများအတွက် 536 ဖြစ်သည်။ ပုံမှန်အားဖြင့် BACKUP ထုတ်ပြန်ချက်သည် စက်ပစ္စည်းအတွက် သင့်လျော်သော ဘလောက်အရွယ်အစားကို အလိုအလျောက်ရွေးချယ်ပေးသောကြောင့် ပုံမှန်အားဖြင့် ဤကန့်သတ်ချက်သည် မလိုအပ်ပါ။ ဘလောက်အရွယ်အစားကို သတ်မှတ်ခြင်းသည် အလိုအလျောက်ပိတ်ဆို့သည့်အရွယ်အစားရွေးချယ်မှုကို ပြတ်သားစွာ လွှမ်းမိုးထားသည်။

BUFFERCOUNT = { á€€á€źá€Źá€¸á€á€śá€Ąá€›á€ąá€Ąá€á€˝á€€á€ş | @ buffercount_variable } - အရန်သိမ်းခြင်းလုပ်ငန်းအတွက် အသုံးပြုမည့် I/O ကြားခံအရေအတွက် စုစုပေါင်းကို သတ်မှတ်သည်။ အပြုသဘောဆောင်သော ကိန်းပြည့်တန်ဖိုးကို သင်သတ်မှတ်နိုင်သော်လည်း Sqlservr.exe လုပ်ငန်းစဉ်တွင် virtual address space များလွန်နေခြင်းကြောင့် buffers အများအပြားသည် မမ်မိုရီပြင်ပတွင် အမှားအယွင်းဖြစ်စေနိုင်သည်။

ကြားခံများအသုံးပြုသည့်နေရာ စုစုပေါင်းပမာဏကို အောက်ပါဖော်မြူလာဖြင့် ဆုံးဖြတ်သည်- BUFFERCOUNT * MAXTRANSFERSIZE.

အမြင့်ဆုံးလွှဲပြောင်းမှု = { á€Ąá€™á€źá€„á€ˇá€şá€†á€Żá€śá€¸á€œá€˝á€žá€˛á€•á€źá€ąá€Źá€„á€şá€¸á€™á€žá€Żá€Ąá€›á€˝á€šá€şá€Ąá€…á€Źá€¸ | @ maxtransfersize_variable } သည် SQL Server နှင့် backup set media အကြားဖလှယ်ရန်အတွက် အကြီးဆုံးဒေတာပက်ကေ့ချ်အရွယ်အစားကို bytes ဖြင့်သတ်မှတ်သည်။ 65 bytes (536 KB) မှ 64 bytes (4 MB) အထိ ပံ့ပိုးထားသည်။

ငါကတော့ ဒီဟာကိုအရင်ဖတ်ပြီးပြီ၊ ဒါပေမယ့် ကုန်ထုတ်စွမ်းအားအပေါ် ဘယ်လောက်ထိ သက်ရောက်မှုရှိနိုင်တယ်ဆိုတာကိုတော့ တစ်ခါမှ မကြုံဖူးပါဘူး။ ထို့အပြင်၊ သိသာထင်ရှားစွာ၊ ငါသည် "ထွက်လာခြင်း" အမျိုးအစားကိုပြုလုပ်ရန်လိုအပ်ပြီးယခုအချိန်တွင်ပင်သူတို့လုပ်နေသောအရာကိုအတိအကျနားမလည်ကြောင်းဝန်ခံပါ။ buffered I/O နှင့် hard drive နှင့်အလုပ်လုပ်ခြင်းအကြောင်းပိုမိုဖတ်ရှုရန်လိုကောင်းလိုပါသည်။ တစ်နေ့ကျရင် ဒါကိုလုပ်မယ်၊ ဒါပေမယ့် အခုအချိန်မှာ ဒီတန်ဖိုးတွေက အရန်သိမ်းယူတဲ့အမြန်နှုန်းကို ဘယ်လိုသက်ရောက်မှုရှိလဲဆိုတာ စစ်ဆေးမယ့် script တစ်ခုရေးနိုင်ပါပြီ။

အရွယ်အစား 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
);

script ၏နိယာမသည်ရိုးရှင်းသည် - ဘောင်တစ်ခုစီ၏တန်ဖိုးကိုပြောင်းလဲသည့်တစ်ခုစီသည် nested loops၊ ဤဘောင်များကို BACKUP command ထဲသို့ထည့်ပါ၊ msdb.dbo.backupset မှသမိုင်းဖြင့်နောက်ဆုံးမှတ်တမ်းကိုသိမ်းဆည်းပါ၊ အရန်ဖိုင်ကိုဖျက်ရန်နှင့်နောက်ထပ်ထပ်လုပ်ပါ။ . အရန်သိမ်းဆည်းမှုလုပ်ဆောင်မှုဒေတာကို အရန်သိမ်းဆည်းမှုမှယူသွားသောကြောင့် တိကျမှုအနည်းငယ်ပျောက်ဆုံးသွားသည် (စက္ကန့်အပိုင်းအစများမရှိပါ)၊ သို့သော် ၎င်းကို ကျွန်ုပ်တို့ဆက်လက်ရှင်သန်နေပါမည်။

မိတ္တူများကိုဖျက်ရန် ပထမဦးစွာ သင်သည် xp_cmdshell ကိုဖွင့်ထားရန် လိုအပ်သည် (ထို့နောက် သင်မလိုအပ်ပါက ၎င်းကို disable လုပ်ရန် မမေ့ပါနှင့်)။

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 တွင်ထည့်သွင်းထားသော parameters များအကြောင်းသာပြောပြပါမည်။

BLOCKSIZE အတွက် ကျွန်ုပ်တို့တွင် "ပိတ်ထားသည်" တန်ဖိုးများစာရင်းရှိပြီး BLOCKSIZE < 4KB ဖြင့် အရန်ကူးယူခြင်း မလုပ်ဆောင်ခဲ့ပါ။ 64KB မှ 64MB အထိ 4KB မှ 1024KB အထိ များပြားသော မည်သည့်နံပါတ်ကိုမဆို MAXTRANSFERSIZE။ ကျွန်ုပ်၏စနစ်ရှိ ပုံသေမှာ 512KB၊ ကျွန်ုပ်သည် 1024 - 2048 - 4096 - XNUMX ဖြစ်သည်။

BUFFERCOUNT နှင့် ပိုခက်ခဲသည် - ၎င်းသည် အပြုသဘောဆောင်သည့် နံပါတ် ဖြစ်နိုင်သော်လည်း လင့်ခ်က ဆိုသည်။ BACKUP DATABASE တွင် ၎င်းကို မည်သို့တွက်ချက်ပြီး တန်ဖိုးကြီးများသည် အဘယ်ကြောင့် အန္တရာယ်ရှိသနည်း။. BUFFERCOUNT အရန်ကူးယူမှုကို အမှန်တကယ်ပြုလုပ်ထားသည်နှင့်ပတ်သက်သည့် အချက်အလက်ကို မည်သို့ရယူရမည်ကို ပြောသည် - ကျွန်ုပ်အတွက်မူ ၎င်းသည် 7 ဖြစ်သည်။ ၎င်းကို လျှော့ချရန် အမှတ်မရှိပါ၊ နှင့် အထက်ကန့်သတ်ချက်ကို လက်တွေ့တွင် ရှာဖွေတွေ့ရှိခဲ့သည် - BUFFERCOUNT = 896 နှင့် MAXTRANSFERSIZE = 4194304 ဖြင့် အရန်သိမ်းဆည်းမှုသည် ကျဆင်းသွားသည် error တစ်ခု (အပေါ်က link မှာရေးထားတဲ့အကြောင်း)

Msg 3013၊ အဆင့် 16၊ ပြည်နယ် 1၊ လိုင်း 7 အရန်သိမ်းဆည်းမှုဒေတာဘေ့စ်သည် ပုံမှန်မဟုတ်စွာ ရပ်တန့်နေသည်။

Msg 701၊ Level 17၊ State 123၊ Line 7 ဤမေးမြန်းချက်ကို လုပ်ဆောင်ရန် အရင်းအမြစ်စုပေါင်း 'မူလ' တွင် စနစ်မှတ်ဉာဏ် မလုံလောက်ပါ။

နှိုင်းယှဉ်မှုအတွက်၊ မည်သည့်ကန့်သတ်ချက်များကိုမျှမဖော်ပြဘဲ အရန်ကူးယူခြင်း၏ရလဒ်များကို ဦးစွာပြသပါမည်။

BACKUP DATABASE [bt]
TO DISK = 'D:SQLServerbackupbt.bak'
WITH COMPRESSION;

ကောင်းပြီ၊ အရန်ကူးခြင်းနှင့် အရန်ကူးခြင်း-

ဒေတာဘေ့စ် 'bt' အတွက် စာမျက်နှာ 1070072၊ ဖိုင် 1 တွင် 'bt' ဖိုင်ကို လုပ်ဆောင်ခဲ့သည်။

ဒေတာဘေ့စ် 'bt' အတွက် စာမျက်နှာ 2 ခု၊ ဖိုင် 1 တွင် 'bt_log' ဖိုင်ကို လုပ်ဆောင်ခဲ့သည်။

အရန်ဒေတာဘေ့စ်ကို 1070074 စက္ကန့်အတွင်း (53.171 MB/sec) ဖြင့် စာမျက်နှာ 157.227 ကို အောင်မြင်စွာ လုပ်ဆောင်နိုင်ခဲ့သည်။

ဇာတ်ညွှန်းကိုယ်တိုင်၊ ကန့်သတ်ချက်များကိုစမ်းသပ်ခြင်း၊ နာရီအနည်းငယ်ကြာအောင်လုပ်ဆောင်ခဲ့ပြီး တိုင်းတာမှုအားလုံးပါဝင်ခဲ့သည်။ google စာရင်းဇယား. ပြီးတော့ ဒါက အကောင်းဆုံး ကွပ်မျက်ချိန်သုံးကြိမ်ပါရှိတဲ့ ရလဒ်တွေကို ရွေးချယ်ခြင်းဖြစ်ပါတယ် (ကျွန်တော် ကောင်းမွန်တဲ့ ဂရပ်တစ်ခုကို ဖန်တီးဖို့ ကြိုးစားခဲ့ပေမယ့် ပို့စ်မှာ ဇယားတစ်ခုနဲ့ ရေးရမှာဖြစ်ပြီး မှတ်ချက်တွေမှာ၊ @mixsture ထည့်သည် အလွန်မိုက်ဂရပ်ဖစ်).

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;

MS SQL ဆာဗာ- စတီရွိုက်များပေါ်တွင် အရန်သိမ်းဆည်းပါ။

အာရုံစူးစိုက်မှုကနေ အလွန်အရေးကြီးတဲ့ မှတ်ချက်တစ်ခုပါ။ @mixsture မှ မှတ်ချက်:

ဤတန်ဖိုးများ၏ အကွာအဝေးအတွင်း ပါရာမီတာများနှင့် မိတ္တူအမြန်နှုန်းကြား ဆက်ဆံရေးသည် ကျပန်းဖြစ်ပြီး ပုံစံမရှိဟု ကျွန်ုပ်တို့ ယုံကြည်စိတ်ချစွာ ပြောနိုင်ပါသည်။ သို့သော် built-in ကန့်သတ်ချက်များမှဝေးရာသို့ရွှေ့ခြင်းသည်ရလဒ်အပေါ်ကောင်းမွန်သောအကျိုးသက်ရောက်မှုရှိသည်။

အဲဒါတွေ။ Standard BACKUP ဘောင်များကို စီမံခန့်ခွဲခြင်းဖြင့်သာ အရန်သိမ်းခြင်းကို ဖယ်ရှားသည့်အချိန်၌ 2 ဆ တိုးလာသည်- 26 စက္ကန့်၊ အစတွင် 53 နှင့် 4 ဖြစ်သည်။ အဲဒါ မဆိုးဘူး မဟုတ်လား။ ဒါပေမယ့် ပြန်လည်ထူထောင်ရေးမှာ ဘာတွေဖြစ်မလဲဆိုတာကို ကြည့်ဖို့ လိုပါတယ်။ အခု ပြန်ကောင်းလာဖို့ ၄ ဆ ပိုကြာရင် ဘယ်လိုလုပ်မလဲ။

ပထမဦးစွာ၊ မူရင်းဆက်တင်များဖြင့် အရန်ကူးယူရန် အချိန်မည်မျှကြာကြောင်း တိုင်းတာကြပါစို့။

RESTORE DATABASE [bt]
FROM DISK = 'D:SQLServerbackupbt.bak'
WITH REPLACE, RECOVERY;

ကောင်းပြီ၊ နည်းလမ်းတွေရှိတယ်၊ အစားထိုးတာက အစားထိုးမဟုတ်ဘူး၊ ပြန်လည်ထူထောင်ရေးဟာ ပြန်လည်ထူထောင်ရေးမဟုတ်ဘူးဆိုတာ မင်းကိုယ်တိုင်သိတယ်။ ပြီးတော့ ငါဒီလိုလုပ်တယ်

ဒေတာဘေ့စ် 'bt' အတွက် စာမျက်နှာ 1070072၊ ဖိုင် 1 တွင် 'bt' ဖိုင်ကို လုပ်ဆောင်ခဲ့သည်။

ဒေတာဘေ့စ် 'bt' အတွက် စာမျက်နှာ 2 ခု၊ ဖိုင် 1 တွင် 'bt_log' ဖိုင်ကို လုပ်ဆောင်ခဲ့သည်။

ဒေတာဘေ့စ်ကို ပြန်လည်ရယူရန် စာမျက်နှာ 1070074 ကို 40.752 စက္ကန့် (205.141 MB/sec) အတွင်း အောင်မြင်စွာ လုပ်ဆောင်ခဲ့သည်။

ယခု ပြောင်းလဲထားသော BLOCKSIZE၊ BUFFERCOUNT နှင့် MAXTRANSFERSIZE တို့ဖြင့် သိမ်းဆည်းထားသော အရန်များကို ပြန်လည်ရယူရန် ကြိုးစားပါမည်။

BLOCKSIZE = 16384, BUFFERCOUNT = 224, MAXTRANSFERSIZE = 4194304

ဒေတာဘေ့စ်ကို ပြန်လည်ရယူရန် စာမျက်နှာ 1070074 ကို 32.283 စက္ကန့် (258.958 MB/sec) အတွင်း အောင်မြင်စွာ လုပ်ဆောင်ခဲ့သည်။

BLOCKSIZE = 4096, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 4194304

ဒေတာဘေ့စ်ကို ပြန်လည်ရယူရန် စာမျက်နှာ 1070074 ကို 32.682 စက္ကန့် (255.796 MB/sec) အတွင်း အောင်မြင်စွာ လုပ်ဆောင်ခဲ့သည်။

BLOCKSIZE = 16384, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 2097152

ဒေတာဘေ့စ်ကို ပြန်လည်ရယူရန် စာမျက်နှာ 1070074 ကို 32.091 စက္ကန့် (260.507 MB/sec) အတွင်း အောင်မြင်စွာ လုပ်ဆောင်ခဲ့သည်။

BLOCKSIZE = 4096, BUFFERCOUNT = 56, MAXTRANSFERSIZE = 4194304

ဒေတာဘေ့စ်ကို ပြန်လည်ရယူရန် စာမျက်နှာ 1070074 ကို 32.401 စက္ကန့် (258.015 MB/sec) အတွင်း အောင်မြင်စွာ လုပ်ဆောင်ခဲ့သည်။

ပြန်လည်ရယူခြင်းဒေတာဘေ့စထုတ်ပြန်ချက်သည် ပြန်လည်ရယူနေစဉ်အတွင်း ပြောင်းလဲခြင်းမရှိပါ၊ ဤဘောင်များကို ၎င်းတွင်မဖော်ပြထားပါ၊ SQL Server ကိုယ်တိုင်က ၎င်းတို့အား အရန်သိမ်းဆည်းမှုမှ ဆုံးဖြတ်ပေးပါသည်။ ပြန်လည်နာလန်ထူလာရင်တောင် 20% နီးပါး မြန်မြန်ဆန်ဆန် အမြတ်ရနိုင်တယ်ဆိုတာ ရှင်းပါတယ်။ရိုးရိုးသားသားပြောရလျှင်၊ ကျွန်ုပ်ပြန်လည်နာလန်ထူရန်အချိန်များစွာမဖြုန်းဘဲ၊ "အမြန်ဆုံး" မိတ္တူများစွာကိုဖြတ်ကျော်ပြီး ယိုယွင်းပျက်စီးခြင်းမရှိကြောင်းသေချာစေပါသည်။).

ကိစ္စတစ်ခုအနေနှင့်၊ ဤအရာများသည် လူတိုင်းအတွက် အသင့်တော်ဆုံးသော ကန့်သတ်ချက်အချို့မဟုတ်ကြောင်း ရှင်းပြပါရစေ။ စမ်းသပ်ခြင်းဖြင့် သင်ကိုယ်တိုင်အတွက် အကောင်းဆုံး ကန့်သတ်ဘောင်များကိုသာ ရနိုင်သည်။ ဒီရလဒ်တွေကို ငါရခဲ့တယ်၊ မင်း မတူညီတဲ့ရလဒ်တွေကို ရလိမ့်မယ်။ သို့သော် သင့်အရန်ကူးယူမှုများကို “ချိန်ညှိ” နိုင်သည်ကို သင်တွေ့မြင်ရပြီး ၎င်းတို့သည် အမှန်တကယ် ပုံဖော်နိုင်ပြီး ပိုမိုမြန်ဆန်စွာ အသုံးပြုနိုင်သည်ကို သင်တွေ့မြင်ရသည်။

သင့်စနစ်တွင် သီးခြားကွဲလွဲမှုများရှိနိုင်သောကြောင့် စာရွက်စာတမ်းတစ်ခုလုံးကို အပြည့်အစုံဖတ်ရန်လည်း ကျွန်ုပ်အလေးအနက် အကြံပြုအပ်ပါသည်။

အရန်ကူးယူခြင်းအကြောင်း စတင်ရေးသားကတည်းက၊ "ချိန်ညှိခြင်း" ဘောင်များထက် ပိုမိုသာလွန်သော "ပိုကောင်းအောင်ပြုလုပ်ခြင်း" အကြောင်းကို ချက်ချင်းရေးလိုပါသည် (ကျွန်ုပ်နားလည်သလောက်၊ ၎င်းကို အနည်းဆုံး အရန်ကိရိယာအချို့မှ ကန့်သတ်ချက်များနှင့်အတူ ဖြစ်နိုင်သည် အစောပိုင်းတွင်ဖော်ပြထားသည်) သို့သော်၎င်းကို Habre တွင်ဖော်ပြခြင်းမရှိသေးပါ။

စာရွက်စာတမ်းရှိ ဒုတိယစာကြောင်းကိုကြည့်လျှင် BACKUP DATABASE အောက်ရှိ၊

TO <backup_device> [ ,...n ]

backup_devices အများအပြားကို သင်သတ်မှတ်ပါက သင်မည်သို့ဖြစ်လာမည်ထင်သနည်း။ syntax က ခွင့်ပြုပါတယ်။ အလွန်စိတ်ဝင်စားစရာကောင်းသည့်အရာတစ်ခုဖြစ်လာလိမ့်မည် - မိတ္တူကူးခြင်းသည်စက်ပစ္စည်းများစွာပေါ်တွင်ရိုးရှင်းစွာ "ပျံ့နှံ့" လိမ့်မည်။ အဲဒါတွေ။ "စက်ပစ္စည်း" တစ်ခုချင်းစီသည် အသုံးမဝင်၊ ပျောက်ဆုံးသွားကာ အရန်သိမ်းမှုတစ်ခုလုံး ဆုံးရှုံးသွားမည်ဖြစ်သည်။ သို့သော် ထိုသို့သော လိမ်းကျံခြင်းသည် အရန်သိမ်းခြင်းအမြန်နှုန်းကို မည်သို့အကျိုးသက်ရောက်မည်နည်း။

တူညီသောဖိုင်တွဲတစ်ခုတွင် ဘေးချင်းကပ်နေသော “စက်ပစ္စည်း” နှစ်ခုတွင် အရန်ကူးယူရန် ကြိုးစားကြပါစို့။

BACKUP DATABASE [bt]
TO 
    DISK = 'D:SQLServerbackupbt1.bak',
    DISK = 'D:SQLServerbackupbt2.bak'   
WITH COMPRESSION;

အဘယ့်ကြောင့်နည်းဟူမူ၊

ဒေတာဘေ့စ် 'bt' အတွက် စာမျက်နှာ 1070072၊ ဖိုင် 1 တွင် 'bt' ဖိုင်ကို လုပ်ဆောင်ခဲ့သည်။

ဒေတာဘေ့စ် 'bt'၊ ဖိုင် 'bt' အတွက် စာမျက်နှာ 2 ခုကို လုပ်ဆောင်ခဲ့သည်ဖိုင် 1 တွင် log' ။

အရန်ဒေတာဘေ့စ်ကို 1070074 စက္ကန့်အတွင်း (40.092 MB/sec) ဖြင့် စာမျက်နှာ 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;

အရန်ဒေတာဘေ့စ်ကို 1070074 စက္ကန့်အတွင်း (34.234 MB/sec) ဖြင့် စာမျက်နှာ 244.200 ကို အောင်မြင်စွာ လုပ်ဆောင်နိုင်ခဲ့သည်။

စုစုပေါင်း၊ အရန်ကူးယူသည့်အချိန်၏ ၃၅% ခန့်သည် ဒစ်တစ်ခုတွင် ဖိုင် 35 ဖိုင်ကို တစ်ကြိမ်တည်းတွင် အရန်ကူးထားသောကြောင့်သာ ရရှိခြင်းဖြစ်သည်။ ပိုကြီးတဲ့ နံပါတ်တစ်ခုကို စစ်ဆေးခဲ့တယ် - ငါ့လက်တော့ပ်မှာ အမြတ်မရှိဘူး၊ အကောင်းဆုံးကတော့ - စက် 4 ခု။ မင်းအတွက် - ငါမသိဘူး၊ မင်းစစ်ဆေးဖို့လိုတယ်။ ကောင်းပြီ၊ သင့်တွင် ဤစက်ပစ္စည်းများရှိပါက၊ ဤအရာများသည် အမှန်တကယ်ကွဲပြားခြားနားသော disk များဖြစ်သည်၊ ဂုဏ်ယူပါသည်၊ အမြတ်သည် ပို၍ပင်သိသာနေသင့်ပါသည်။

အခု ဒီပျော်ရွှင်မှုကို ဘယ်လိုပြန်ရမလဲဆိုတာ ပြောကြည့်ရအောင်။ ၎င်းကိုလုပ်ဆောင်ရန်၊ သင်သည် ပြန်လည်ရယူခြင်းအမိန့်ကို ပြောင်းလဲပြီး စက်ပစ္စည်းအားလုံးကို စာရင်းပြုစုရမည်ဖြစ်ပါသည်။

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/sec) အတွင်း အောင်မြင်စွာ လုပ်ဆောင်ခဲ့သည်။

အနည်းငယ်မြန်သော်လည်း နီးသောနေရာတွင် ထူးထူးခြားခြားမရှိပါ။ ယေဘုယျအားဖြင့်၊ အရန်ကူးခြင်းကို ပိုမိုမြန်ဆန်စွာ ဖယ်ရှားပြီး ထိုနည်းအတိုင်း ပြန်လည်ရယူသည် - အောင်မြင်ပါသလား။ ကျွန်တော့်အနေနဲ့ကတော့ တော်တော်လေး အောင်မြင်ပါတယ်။ ဒီ အရေးကြီးသောဒါကြောင့် ငါထပ်ပြောမယ် - ဆိုရင်တော့ ဤဖိုင်များထဲမှ အနည်းဆုံးတစ်ခု ဆုံးရှုံးပါက၊ အရန်ကူးယူမှုတစ်ခုလုံး ဆုံးရှုံးမည်ဖြစ်သည်။.

Trace Flags 3213 နှင့် 3605 ကိုအသုံးပြု၍ ပြသထားသော အရန်အချက်အလက်ကို မှတ်တမ်းတွင် ကြည့်ရှုပါက၊ စက်ပစ္စည်းများစွာကို အရန်သိမ်းသည့်အခါ အနည်းဆုံး BUFFERCOUNT အရေအတွက် တိုးလာသည်ကို သတိပြုမိပါလိမ့်မည်။ ဖြစ်နိုင်သည်မှာ၊ သင်သည် BUFFERCOUNT၊ BLOCKSIZE၊ MAXTRANSFERSIZE အတွက် ပိုမိုသင့်လျော်သော ဘောင်များကို ရွေးချယ်ရန် ကြိုးစားနိုင်သည်၊ သို့သော် ကျွန်ုပ်သည် ချက်ချင်း မအောင်မြင်ခဲ့ဘဲ၊ ထိုသို့သော စမ်းသပ်မှုကို ထပ်မံလုပ်ဆောင်ရန် ကျွန်ုပ် ပျင်းလွန်းသော်လည်း မတူညီသော ဖိုင်အရေအတွက်အတွက် ဖြစ်သည်။ ပြီးတော့ ဘီးတွေအတွက် ရှက်စရာ။ အိမ်တွင်ထိုကဲ့သို့သောစမ်းသပ်မှုကိုစီစဉ်လိုပါက၊ ဇာတ်ညွှန်းကိုပြန်လည်ဖန်တီးရန်မခက်ခဲပါ။

နောက်ဆုံးအနေနဲ့ စျေးနှုန်းအကြောင်း ပြောကြရအောင်။ အသုံးပြုသူများ၏အလုပ်နှင့်အပြိုင် မိတ္တူကူးယူခြင်းကို ဖယ်ရှားပါက၊ စမ်းသပ်ရန် အလွန်တာဝန်ယူရမည့်နည်းလမ်းကို သင်လိုအပ်သည်၊ အဘယ်ကြောင့်ဆိုသော် အရန်သိမ်းမှုကို ပိုမိုမြန်ဆန်စွာ ဖယ်ရှားပါက၊ ဒစ်ခ်များသည် ပိုမိုတင်းမာလာကာ ပရိုဆက်ဆာပေါ်ရှိ ဝန်ပိုတိုးလာသည် (သင် compress လုပ်ရန်ကျန်သေးသည် ၎င်းသည် ပျံသန်းနေစဉ်) နှင့်အညီ၊ စနစ်၏ အလုံးစုံ တုံ့ပြန်နိုင်စွမ်း လျော့နည်းသွားသည်။

နောက်တာပါ၊ ဒါပေမယ့် ထုတ်ဖော်ပြောဆိုတာမျိုး မလုပ်ခဲ့ဘူးလို့ ကောင်းကောင်းနားလည်ပါတယ်။ အထက်တွင်ရေးထားသည့်အရာသည် မိတ္တူကူးယူခြင်းအတွက် အကောင်းဆုံးသောဘောင်များကို သင်မည်သို့ရွေးချယ်နိုင်ပုံကို သရုပ်ပြခြင်းဖြစ်သည်။

သင်လုပ်သမျှသည် သင့်ကိုယ်ပိုင်အန္တရာယ်နှင့် စွန့်စားမှုဖြင့်ပြီးကြောင်း သတိရပါ။ သင်၏ အရန်သိမ်းမှုများကို စစ်ဆေးပြီး DBCC CHECKDB အကြောင်း မမေ့ပါနှင့်။

source: www.habr.com

မှတ်ချက် Add