Реплика екінші сайтқа көшірілгеннен кейін жазу кешігуі атып кетті, ал туннель ең жаңа компонент, сондықтан кінә оған жүктеледі. Туннель кінәсіз болуы мүмкін: синхронды бекітуі бар қолжетімділік тобының ішінде бастапқы реплика қашықтағы журнал жазуы аяқталмайынша бекітуді растай алмайды, сондықтан әр транзакция барып-қайтуды төлейді, байланыс қанша мегабит тасыса да. Өткізу қабілеті секундына байтты өлшейді, кешігу бір алмасудың қанша уақыт алатынын өлшейді, ал бекітуге аяқталу үшін бір ғана шағын алмасу жеткілікті. Бір сан дауды шешеді: шағын транзакцияны бекіту ұзақтығы, қолжетімділік дерекқорының ішінде және сол инстанциядағы жергілікті кестеге қарсы қайта өлшенген.

Бастапқы реплика шын мәнінде нені күтеді

Синхронды бекіту кезінде бастапқы серіктес өзінің журнал жазбалары қатайтылғанын растамайынша бекіту растауын ұстап тұрады. Қатайтылған қосалқының транзакция журналына тұрақты жазылғанды білдіреді, оның дерек беттерінде қайта орындалмаған. Redo бастапқының бекітуіне бір миллисекунд қоспай-ақ минуттарға артта қала алады.

Microsoft-тың қолжетімділік режимдері туралы құжаттамасы сол қол алысуды түсіндіреді және серіктес шығып қалғанда платформаның не істейтінін сипаттайды. Синхронды деп белгіленген реплика күту туралы ереже, әр бекіту үшін сау қашықтағы көшірме бар деген тұрақты уәде емес. Ажыратылған жол бөлек анықталған, және бұл тек бекітудің сәтсіз аяқталуы емес.

Сондықтан сіз көріп отырған күту — қосынды: журнал тасымалы, екі хостта жоспарлау және қашықтағы қоймаға жазу. Қаныққан журнал көлемі бар қосалқы ешбір жылдамдық сынағы көрсетпейтін уақытты қосады. Шағым VPN-ді атағанда сол диск сирек өлшенеді.

Өткізу қабілеті — барып-қайту кешігуі емес

Жылдамдық сынағы жолды қысқа уақытқа басып, жылдамдықты хабарлайды. Бекіту тар не нәрсені сұрайды: шағын хабардың арғы жаққа жетуі, сақталуы және қайтуы қанша уақыт алады. Жол ұзындығы, кезек және пакет жоғалтуы сол санды анықтайды, және провайдер шекті көтергенде олардың ешқайсысы жақсармайды.

Сондықтан «жылдам» туннель көптеген шағын тізбекті транзакциялардан құралған жазбаға ауыр жүктемеге көрінетін айыппұл қосуы мүмкін. Сол байт сомасы мың бекітуге бөлінсе, барып-қайтуды мың рет төлейді; бір жаппай тасымал оны бір рет төлейді.

Желі иесінен өкілдік жүктеме астында реплика бағытының өзінде кешігу мен жоғалтуды өлшеуді сұраңыз. Кеңсе ноутбугінен VPN шлюзіне ping немесе жақын түйінге жылдамдық сынағы журнал шын мәнінде жүретін бағытқа ештеңе дерлік жүктемейді. Өлшеу терезесі жазу баяу болатын сағаттармен қабаттасуын қамтамасыз етіңіз.

Бірдеңені өзгертуден бұрын реплика күйін оқыңыз

Инстанциялар өздері туралы хабарлайтын нәрседен бастаңыз, өйткені екі жақ серіктестіктің қаншалықты сау екені туралы келіспеуі мүмкін және бақылау тақтасының орташа мәні қай кезектің қозғалып жатқанын жасырады. Төмендегі сұраулар түрлі сұрақтарға жауап береді: біреуі әр дерекқор бойынша репликация күйін оқиды, екіншісі әр репликаның қалай конфигурацияланғанын оқиды. Режимге қол тигізбес бұрын екеуін де іске қосыңыз.

SELECT ag.name AS ag_name, drs.database_id, drs.synchronization_state_desc,
       drs.log_send_queue_size, drs.redo_queue_size, drs.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states AS drs
JOIN sys.availability_groups AS ag ON ag.group_id = drs.group_id;

SELECT ar.replica_server_name, ar.availability_mode_desc, ar.failover_mode_desc
FROM sys.availability_replicas AS ar;

Бірінші нәтиже журнал тасымалын redo-дан бөледі. log_send_queue_size өсіп, redo_queue_size тегіс тұрса, журнал келмеген; керісінше болса, ол келген және қайта ойнату артта қалған. Бекіту жолында тек бірінші жағдай отырады.

Екінші нәтиже қай репликалардың шынымен сіз болжағандай конфигурацияланғанын растайды, өйткені бұрынғы оқиға кезінде өзгертілген режим өзгертілген және құжатталмаған күйде қалады. Топтың әдепкі мәнінің орнына сізді қызықтыратын жолды оқыңыз: availability_mode_desc және failover_mode_desc әр реплика үшін. secondary_lag_seconds тек SQL Server 2016 және одан кейінгі нұсқаларда бар, сондықтан ескі құрылым сізге тек жіберу кезегі мен redo бағандарын қалдырады.

Содан кейін бақылау тақтасының орташа мәніне сенудің орнына өкілдік жазуды өлшеңіз. Төмендегі блокты қолжетімділік дерекқорында іске қосыңыз, содан кейін оны сол инстанциядағы топтан тыс дерекқордағы сол кесте пішініне қарсы қайта іске қосыңыз. Екі ұзақтық арасындағы айырмашылық қашықтағы журналдың өрескел бағасы, және желі командасымен дауда ол графиктен әлдеқайда жақсы тұрады. Одан кейін бір уақытта бір айнымалыны өзгертіңіз, әйтпесе айырмашылық мәнсіз болады.

IF OBJECT_ID('dbo.CommitProbe') IS NULL
    CREATE TABLE dbo.CommitProbe (probe_id int PRIMARY KEY, touched_at datetime2(3));
IF NOT EXISTS (SELECT 1 FROM dbo.CommitProbe WHERE probe_id = 1)
    INSERT INTO dbo.CommitProbe (probe_id) VALUES (1);
SET STATISTICS TIME ON;
BEGIN TRANSACTION;
UPDATE dbo.CommitProbe SET touched_at = SYSUTCDATETIME() WHERE probe_id = 1;
COMMIT TRANSACTION;
SET STATISTICS TIME OFF;

Асинхронды бекіту не сатып алады және қанша тұрады

Асинхронды бекіту кезінде бастапқы қашықтағы қатайту растауын күтуді тоқтатады, сондықтан барып-қайту бекіту жолынан шығады. Бекіту кешігуі төмендейді және қосалқы ешкім бақыламайтын мөлшерде артта қалуға ерікті. Бұл күтудің нақты түзетуі және уәдедегі нақты өзгеріс.

Баға — қалпына келтіру нүктесі туралы шешім. Егер бастапқы өзінің журналы шынымен пайдалана алатын ақаулыққа ауысу мақсатына жетпей өлсе, қызметті асинхронды көшірмеге жылжыту қосымша бекітілген деп хабарлаған транзакцияларды тастайды. Ешбір конфигурация диалогы мұны солай көрсетпейді, өйткені бұл қолайлы шығын туралы іскерлік сұрақ, өнімділік параметрі емес. Шыдалатын шығын терезесін оқиғадан бұрын жазыңыз, оның барысында емес.

Режимді деректер иесімен жазбаша келісіңіз, қалаған мақсат қолжетімсіз болған жағдай үшін ақаулыққа ауысу процедурасымен бірге. Жоба құжатындағы синхронды — операциялық нұсқаулық емес, ал асинхронды — кезектерді бақылауды тоқтатуға лицензия емес.

Кейін қорғай алатын түзетуді таңдаңыз

Төрт адал нұсқа бар. Қосымшаның семантикасы топтастыруға рұқсат беретін жерде болдырмауға болатын бекіту барып-қайтуларын қысқартыңыз; өлшенген тасымал немесе қойма кедергісін түзетіңіз, бұл қосалқыда үлкенірек құбырдың орнына жылдамырақ журнал көлемін білдіруі мүмкін; барып-қайту азаюы үшін репликаны жақындатыңыз; немесе қорғау саясатын босаңсытып, кеңірек шығын терезесін қабылдаңыз. Әрқайсысы кешігуді басқа нәрсені жұмсап сатып алады, ал төртіншісі төзімділікті жұмсайды. Таңдамас бұрын шығысты атаңыз.

Жұмыс жүктемесінің кешігу мақсаты мен оның төзімділік талабын бір уақытта алдыңызда ұстап шешім қабылдаңыз, өйткені біреуін оңтайландыру екіншісін үнсіз жұмсайды. Содан кейін өзгеріске дейін өлшеген сол транзакцияны қайта іске қосыңыз. Бұл санды қозғалта алмайтын түзету — өзгеріс билетін киген болжам.

Өзгеріс жазбасында алдыңғы және кейінгі көрсеткіштерді сақтаңыз. Әйтпесе баяу жазуды көрген келесі адам тергеуді басынан қайталап, тағы да туннельді кінәлаудан бастайды.

Қатысты мақалалар