Sinxron SQL kommiti VPN gediş-dönüşünü niyə gözləyir
Sinxron əlçatanlıq qrupu kommiti uzaq jurnalın bərkidilməsini əhatə edir. Bant genişliyini günahlandırmadan və ya rejimi dəyişməzdən əvvəl bu yolu ölçün.
İkinci sayta replika köçəndən sonra yazma gecikməsi sıçradı və tunel ən yeni komponentdir, ona görə də günah onun üstünə düşür. Tunel günahsız ola bilər: sinxron kommitli əlçatanlıq qrupu daxilində əsas uzaq jurnal yazısı tamamlanmadan kommiti təsdiqləyə bilməz, buna görə hər əməliyyat gediş-dönüş ödəyir, keçid nə qədər meqabit daşıya bilirsə də. Ötürmə qabiliyyəti saniyədə baytı ölçür, gecikmə bir mübadilənin nə qədər çəkdiyini ölçür və kommitin bitməsi üçün yalnız bir kiçik mübadilə lazımdır. Mübahisəni bir rəqəm həll edir: kiçik əməliyyatın kommit müddəti, əvvəlcə əlçatanlıq verilənlər bazasında, sonra həmin instansiyada yerli cədvələ qarşı ölçülür.
Əsas əslində nəyi gözləyir
Sinxron kommit zamanı əsas, tərəfdaş jurnal qeydlərinin bərkidildiyini təsdiqləyənə qədər kommit təsdiqini saxlayır. Bərkidilmiş o deməkdir ki, ikincilin əməliyyat jurnalına davamlı yazılıb, onun verilən səhifələrinə təkrar icra olunmayıb. Redo əsasın kommitinə bir millisaniyə belə əlavə etmədən dəqiqələrlə geridə qala bilər.
Microsoft-un əlçatanlıq rejimləri sənədləşməsi həmin əl sıxışmasını izah edir və tərəfdaş sıradan çıxanda platformanın nə etdiyini təsvir edir. Sinxron kimi işarələnmiş replika gözləmə ilə bağlı qaydadır, hər kommit üçün sağlam uzaq nüsxənin olduğuna dair daimi vəd deyil. Ayrılmış yol ayrıca müəyyən edilir və bu, sadəcə kommitin uğursuz olması deyil.
Deməli, gördüyünüz gözləmə bir cəmdir: jurnal nəqli, hər iki hostda planlaşdırma və uzaq yaddaş yazısı. Doymuş jurnal həcmi olan ikincil heç bir sürət testinin göstərməyəcəyi vaxt əlavə edir. Şikayət VPN-i adlandıranda o disk nadir hallarda ölçülür.
Bant genişliyi gediş-dönüş gecikməsi deyil
Sürət testi yolu qısa müddətə doldurur və bir sürət bildirir. Kommit daha dar bir şey soruşur: kiçik bir mesajın o biri tərəfə çatması, saxlanması və geri qayıtması nə qədər çəkir. Yolun uzunluğu, növbə və paket itkisi bu rəqəmi müəyyən edir və provayder tavanı qaldıranda bunların heç biri yaxşılaşmır.
Beləliklə, «sürətli» tunel çoxlu kiçik ardıcıl əməliyyatdan qurulmuş yazma ağır iş yükünə görünən cərimə əlavə edə bilər. Eyni bayt cəmi min kommitə bölünəndə gediş-dönüşü min dəfə ödəyir; bir toplu ötürmə isə onu bir dəfə ödəyir.
Şəbəkə sahibindən gecikmə və itkini replika marşrutu üzərində, təmsilçi yük altında ölçməsini istəyin. Ofis noutbukundan VPN şlüzünə ping və ya yaxın qovşağa sürət testi jurnalın həqiqətən getdiyi marşruta demək olar ki, heç nə aid etmir. Ölçmə pəncərəsinin yazmanın yavaş olduğu saatlarla üst-üstə düşməsini təmin edin.
Bir şeyi dəyişməzdən əvvəl replika vəziyyətini oxuyun
İnstansiyaların özləri haqqında bildirdiklərindən başlayın, çünki iki tərəf tərəfdaşlığın nə qədər sağlam olduğu barədə fikir ayrılığına düşə bilər və idarə panelinin ortalaması hansı növbənin irəlilədiyini gizlədir. Aşağıdakı sorğular fərqli suallara cavab verir: biri hər verilənlər bazası üzrə replikasiya vəziyyətini oxuyur, digəri hər replikanın necə konfiqurasiya edildiyini oxuyur. Rejimə toxunmazdan əvvəl hər ikisini işə salın.
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;
Birinci nəticə jurnal nəqlini redodan ayırır. log_send_queue_size artarkən redo_queue_size düz qalırsa, jurnal gəlməyib; əksi isə gəldiyini və təkrar icranın geridə olduğunu bildirir. Yalnız birinci hal kommit yolunda oturur.
İkinci nəticə hansı replikaların həqiqətən fərz etdiyiniz kimi konfiqurasiya edildiyini təsdiqləyir, çünki əvvəlki insident zamanı dəyişdirilmiş rejim dəyişmiş və sənədləşdirilməmiş qalmağa meyllidir. Qrup standartı yerinə sizi maraqlandıran sətri oxuyun: availability_mode_desc və failover_mode_desc hər replika üzrədir. secondary_lag_seconds yalnız SQL Server 2016 və sonrakı versiyalarda mövcuddur, ona görə köhnə buraxılış sizi yalnız göndərmə və redo növbəsi sütunları ilə qoyur.
Sonra idarə panelinin ortalamasına güvənmək yerinə təmsilçi yazmanı ölçün. Aşağıdakı bloku əlçatanlıq verilənlər bazasında işə salın, sonra həmin instansiyada qrupdan kənar verilənlər bazasında eyni cədvəl formasına qarşı yenidən işə salın. İki müddət arasındakı fərq uzaq jurnal üçün təxmini qiymətdir və şəbəkə komandası ilə mübahisədə qrafikdən qat-qat yaxşı dayanır. Bundan sonra hər dəfə bir dəyişəni dəyişin, əks halda fərq mənasını itirir.
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;
Asinxron kommit nə qazandırır və nəyə başa gəlir
Asinxron kommitlə əsas uzaq bərkitmə təsdiqini gözləməyi dayandırır, beləliklə gediş-dönüş kommit yolundan çıxır. Kommit gecikməsi düşür və ikincil heç kimin nəzarət etmədiyi qədər geridə qalmaqda sərbəst olur. Bu, gözləmə üçün real düzəliş və vədə real dəyişiklikdir.
Qiymət bərpa nöqtəsi qərarıdır. Əgər əsas jurnalı həqiqətən istifadə edə biləcəyiniz failover hədəfinə çatmadan ölürsə, xidmətin asinxron nüsxəyə keçirilməsi tətbiqin artıq kommit kimi bildirdiyi əməliyyatları atır. Heç bir konfiqurasiya pəncərəsi bunu belə təqdim etmir, çünki bu, performans parametri deyil, qəbul edilə bilən itki ilə bağlı biznes sualıdır. Tolerasiya olunan itki pəncərəsini insidentdən əvvəl yazın, insident zamanı deyil.
Rejimi məlumatların sahibi ilə razılaşdırın, yazılı şəkildə, üstünlük verilən hədəfin əlçatmaz olduğu hal üçün failover proseduru ilə birlikdə. Dizayn sənədindəki sinxron əməliyyat təlimatı deyil, asinxron isə növbələri izləməyi dayandırmaq üçün lisenziya deyil.
Sonradan müdafiə edə biləcəyiniz düzəliş seçin
Dörd dürüst variant var. Tətbiqin semantikası toplu emala imkan verdiyi yerdə qaçılmaz kommit gediş-dönüşlərini kəsin; ölçdüyünüz nəql və ya yaddaş darboğazını düzəldin, bu, daha böyük boru yerinə ikincildə daha sürətli jurnal həcmi demək ola bilər; replikanı yaxınlaşdırın ki, gediş-dönüş kiçilsin; ya da müdafiə siyasətini yumşaldın və daha geniş itki pəncərəsini qəbul edin. Hər biri gecikməni başqa bir şey xərcləyərək alır, dördüncüsü isə davamlılığı xərcləyir. Seçim etməzdən əvvəl xərci adlandırın.
Qərarı iş yükünün gecikmə hədəfi və davamlılıq tələbi eyni anda qarşınızda ikən verin, çünki birini optimallaşdırmaq digərini səssizcə xərcləyir. Sonra dəyişiklikdən əvvəl ölçdüyünüz həmin əməliyyatı yenidən işə salın. O rəqəmi tərpədə bilməyən düzəliş dəyişiklik bileti taxmış təxmindir.
Əvvəl və sonra oxunuşlarını dəyişiklik qeydində saxlayın. Əks halda yavaş yazmanı görən növbəti şəxs araşdırmanı əvvəldən təkrarlayır və yenidən tuneli günahlandırmaqla başlayır.