Tere fere, czyli dlaczego nigdy nie jest tak prosto

Co się może stać, proste przeniesienie bazy między regionami, mamy wszystko połapane – odpinamy backend, żeby nikt niczego nie modyfikował, kopiujemy sobie elegancko bazę danych do innego regionu, zmieniamy connection stringi na odwołania do nowej kopii, publikujemy na staging, sprawdzamy czy hula, robimy swap i telemark! Nikt niczego nie zauważył, podmianka w mgnieniu oka, wpinamy sobie teraz tylko backend i voilla!

Voilla my ass. Z grubsza w okolicy „robimy swap”, kiedy fala klientów dostaje się do nowego kodu, wskazującego nową bazę, przypominamy sobie the hard way o istnieniu czegoś takiego jak RESOURCE_SEMAPHORE_QUERY_COMPILE. Tylko na wycofanie się jest już za późno. Baza rżnie na 100%, bufor pełen, kolejne zapytania wylatują na timeoutach. Dobrze chociaż, że wdech, wydech oraz wzięcie na klatę trwającego parę minut mayhemu wystarczyło. Zapytania się pokompilowały i faktycznie wszystko się rozhulało.

Teraz zabieramy się za lektury, następnym razem może obyłoby się bez małego zawału. Pierwszy koncept to wpuszczenie małego % ruchu na staging, żeby kompilacja zmieściła się w firepower bazy razem z tym ruchem. Chociaż czułbym się bardziej komfortowo gdybym mógł to ogarnąć jakoś wcześniej, przed przekierowaniem tam jakiegokolwiek klienta. Zobaczymy, pochwalę się jak wymyślę albo mi ktoś mądry podpowie.

Ale żeby nie było tak gorzko, ostatecznie cała operacja na plus, czasy odpowiedzi pospadały prawie o połowę, obciążenia bazy i App Service Planu też się zmniejszyły. Potwierdzono empirycznie, że lepiej jak baza jest w tym samym regionie 🙂