Miks teie sünkroonne SQL-kinnitus ootab VPN-i edasi-tagasi reisi
Sünkroonne kinnitus kättesaadavusgrupis hõlmab kauglogi karastamist. Mõõtke see tee läbi enne, kui süüdistate läbilaskevõimet või vahetate režiimi.
Kirjutamise latentsus hüppas üles pärast seda, kui replika kolis teisele saidile, ja tunnel on uusim komponent, nii et süü langeb sellele. Tunnel võib olla süütu: sünkroonse kinnitusega kättesaadavusgrupi sees ei saa primaarne kinnitust kinnitada enne, kui kauglogi kirjutamine on lõppenud, nii et iga tehing maksab edasi-tagasi reisi, ükskõik kui palju megabitte link kanda suudab. Läbilaskevõime mõõdab baite sekundis, latentsus mõõdab, kui kaua üks vahetus kestab, ja kinnitus vajab lõpetamiseks vaid ühte väikest vahetust. Üks number lahendab vaidluse: väikese tehingu kinnituse kestus, mõõdetuna kättesaadavusandmebaasis ja seejärel uuesti sama instantsi kohaliku tabeli vastu.
Mida primaarne tegelikult ootab
Sünkroonse kinnituse korral hoiab primaarne kinnituse kinnitust tagasi, kuni partner kinnitab, et tema logikirjed on karastatud. Karastatud tähendab püsivalt sekundaarse tehingulogi kirjutatud, mitte selle andmelehtedele ümber mängitud. Redo võib minutitega maha jääda, lisamata primaarse kinnitusele ühtegi millisekundit.
Microsofti dokumentatsioon kättesaadavusrežiimide kohta kirjeldab seda kätlemist ja seda, mida platvorm teeb, kui partner välja langeb. Sünkroonseks märgitud replika on reegel ootamise kohta, mitte püsiv lubadus, et iga kinnituse jaoks on olemas terve kaugkoopia. Ühenduse katkenud tee on määratletud eraldi ja see ei tähenda lihtsalt seda, et kinnitus ebaõnnestub.
Nii et nähtav ootamine on summa: logi transport, ajastamine mõlemas hostis ja kaugsalvestuse kirjutamine. Küllastunud logimahuga sekundaarne lisab aega, mida ükski kiirustest ei näita. Seda ketast mõõdetakse harva, kui kaebus nimetab VPN-i.
Läbilaskevõime ei ole edasi-tagasi reisi viivitus
Kiirustest ujutab tee korraks üle ja teatab kiiruse. Kinnitus küsib kitsamat asja: kui kaua väikesel sõnumil läheb, et jõuda teisele poole, püsivalt salvestuda ja tagasi tulla. Tee pikkus, järjekord ja paketikaotus määravad selle numbri ning ükski neist ei parane, kui teenusepakkuja lage tõstab.
Nii võib «kiire» tunnel lisada nähtava karistuse kirjutamahukale töökoormusele, mis on ehitatud paljudest väikestest järjestikustest tehingutest. Sama baidikogus tuhande kinnituse peale jaotatuna maksab edasi-tagasi reisi tuhat korda; üks hulgiedastus maksab selle korra.
Paluge võrguomanikul mõõta viivitust ja kadu replika marsruudil endal esindusliku koormuse all. Ping kontori sülearvutist VPN-lüüsini või kiirustest lähedase sõlmeni ei omista logi tegelikule marsruudile peaaegu midagi. Laske mõõteaknal kattuda tundidega, mil kirjutamine on aeglane.
Lugege replika olekut enne, kui midagi muudate
Alustage sellest, mida instantsid enda kohta teatavad, sest kaks poolt võivad olla eriarvamusel, kui terve partnerlus on, ja armatuurlaua keskmine varjab, milline järjekord liigub. Allolevad päringud vastavad erinevatele küsimustele: üks loeb replikatsiooni olekut andmebaasi kaupa, teine loeb, kuidas iga replika on konfigureeritud. Käivitage mõlemad enne, kui režiimi puudutate.
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;
Esimene tulemus eraldab logi transpordi redost. log_send_queue_size kasvab, samal ajal kui redo_queue_size püsib tasane, tähendab, et logi ei ole saabunud; vastupidine tähendab, et see saabus ja taasesitus jääb maha. Ainult esimene juhtum asub kinnituse teel.
Teine tulemus kinnitab, millised replikad on tõesti konfigureeritud nii, nagu eeldate, sest varasema juhtumi ajal muudetud režiim kipub jääma muudetuks ja dokumenteerimata. Lugege rida, mis teid huvitab, mitte grupi vaikeväärtust: availability_mode_desc ja failover_mode_desc on replika kohta. secondary_lag_seconds on ainult SQL Server 2016 ja uuemates, nii et vanem versioon jätab teile ainult saatmisjärjekorra ja redo veerud.
Seejärel mõõtke esinduslikku kirjutust, selle asemel et usaldada armatuurlaua keskmist. Käivitage allolev plokk kättesaadavusandmebaasis ja seejärel uuesti sama tabelikuju vastu andmebaasis väljaspool gruppi samas instantsis. Kahe kestuse vahe on kauglogi umbkaudne hind ja see peab võrgumeeskonnaga vaieldes palju paremini vastu kui graafik. Pärast seda muutke üks muutuja korraga, muidu kaotab vahe tähenduse.
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;
Mida asünkroonne kinnitus ostab ja mida see maksab
Asünkroonse kinnitusega lõpetab primaarne kaugkarastamise kinnituse ootamise, nii et edasi-tagasi reis lahkub kinnituse teelt. Kinnituse latentsus langeb ja sekundaarne võib vabalt maha jääda ulatuses, mida keegi ei kontrolli. See on tõeline parandus ootamisele ja tõeline muudatus lubaduses.
Hind on taastamispunkti otsus. Kui primaarne sureb enne, kui tema logi jõuab tõrkeülemineku sihtmärgini, mida te tegelikult kasutada saate, viskab teenuse asünkroonsele koopiale viimine ära tehingud, mille rakendus on juba kinnitatuna teatanud. Ükski konfiguratsioonidialoog ei esita seda nii, sest see on äriküsimus vastuvõetava kaotuse kohta, mitte jõudluse seade. Kirjutage talutav kaotusaken üles enne juhtumit, mitte selle ajal.
Leppige režiim kokku sellega, kes andmeid omab, kirjalikult, koos tõrkeülemineku protseduuriga juhuks, kui eelistatud sihtmärk pole saadaval. Sünkroonne projekteerimisdokumendis ei ole operatiivne käsiraamat ja asünkroonne ei ole litsents järjekordade jälgimise lõpetamiseks.
Valige parandus, mida saate hiljem kaitsta
On neli ausat valikut. Lõigake ära välditavad kinnituse edasi-tagasi reisid seal, kus rakenduse semantika lubab pakkimist; parandage mõõdetud transpordi- või salvestuspunkt, mis võib tähendada kiiremat logimahtu sekundaarsel, mitte suuremat toru; viige replika lähemale, et edasi-tagasi reis kahaneb; või lõdvendage kaitsepoliitikat ja nõustuge laiema kaotusaknaga. Igaüks ostab latentsust, kulutades midagi muud, ja neljas kulutab vastupidavust. Nimetage kulu enne, kui valite.
Otsustage, kui töökoormuse latentsuseesmärk ja vastupidavusnõue on korraga silme ees, sest ühe optimeerimine kulutab vaikselt teise. Seejärel käivitage uuesti sama tehing, mida mõõtsite enne muudatust. Parandus, mis ei suuda seda numbrit liigutada, on muudatuspileti kandev oletus.
Hoidke enne-ja-pärast näidud muudatuse kirjes. Muidu kordab järgmine inimene, kes näeb aeglast kirjutamist, uurimist algusest peale ja hakkab jälle tunnelit süüdistama.