Monthly Archives: Kwiecień 2012

Dzień pracy admina …

Jak myślicie o której zostało zrobione pierwsze ze zdjęć?

Około 20:00. To wtedy zaczyna się dzień pracy admina. Nie wiem ilu z was także musi czasem popracować w nocy, ale ja raz na jakiś czas lubię pobyć w firmie gdy nikogo innego nie ma (no dobra .. są, ale tylko admini :)).

Czy nie sądzicie, że wraz z biegiem „dnia” Gdynia prezentuje się o wiele lepiej?

Powiem szczerze – widok z okna mojej firmy w godzinach nocnych jest SUPER. Naprawdę warto zrobić sobie nocną przerwę w tym miejscu i nacieszyć się tą grą świateł. Szkoda, że mój aparat nie do końca jest to w stanie oddać … 🙂

Reklamy

Jak sprawić by plik logu transakcyjnego miał tylko 1 VLF

W ramach mojego postu „Jak zmienić ilość/wielkość VLF dla istniejącej bazy danych” przedstawiłem w jaki sposób można zmienić ilość wirtualnych plików dziennika zmniejszając log transakcyjny instrukcjami BACKUP LOG i DBCC SHRINKFILE, a następnie zwiększając jego rozmiar za pomocą ALTER DATABASE … MODIFY FILE. Zmniejszenie logu w przedstawionym przeze mnie przykładzie poskutkowało tym, że plik dziennika zawierał jedynie 2 VLF-y. W tym momencie napisałem, że moglibyśmy posłużyć się kolejną kombinacją kopii logu oraz instrukcji DBCC SHRINKFILE aby pozbyć się jednego z nich. Był to skrót myślowy, którego wyjaśnienie przedstawię poniżej 🙂

Odtwórzmy więc nasz przykład

Zaczynamy się od stworzenia bazy z określoną ilości VLF:

CREATE DATABASE testVLFa
ON PRIMARY (
 NAME = 'testVLF_data',
 FILENAME = 'c:\test\testVLF_data.mdf',
 SIZE = 250
)
LOG ON (
 NAME = 'testVLF_log',
 FILENAME = 'c:\test\testVLF_log.ldf',
 SIZE = 500, -- log będzie zawierał 8 VLF-ów
 FILEGROWTH = 500 --i będzie przyrastał także po 8 VLF
)

Następnie sprawdzamy, czy aby na pewno log transakcyjny bazy składa się z 8  wirtualnych plików:

DBCC LOGINFO('testVLF')

Robimy pełną kopię zapasową bazy:

BACKUP DATABASE testVLF
TO DISK = 'testVLF_FULL_20120407.bak'

Zmniejszamy plik dziennika za pomocą kopi logu transakcji i instrukcji DBCC SHRINKFILE:

BACKUP LOG testVLF
TO DISK = 'testVLF_LOG_20120407.trn'
GO
DBCC SHRINKFILE ('testVLF_log', 1)
GO

Po tym zabiegu nasza plik logu powinien mieć jedynie 2 VLF-y:

DBCC LOGINFO('testVLF')

A co jeśli chcemy mieć jeden plik VLF?

Powtórzmy naszą kombinację:

BACKUP LOG testVLF
TO DISK = 'testVLF_LOG_20120407.trn'
GO
DBCC SHRINKFILE ('testVLF_log', 1)
GO

Sprawdźmy ilość VLF-ów:

DBCC LOGINFO

Plik logu nie zmalał pomimo faktu, że tylko jeden VLF jest aktywny. Dlaczego tak się stało?

Generalnie przeglądając dokumentację, można się natknąć na następującą sentencję:

The smallest size for a virtual log file is 256 kilobytes (KB). The minimum size for a transaction log is 512 KB, which provides two 256-KB virtual log files. 

Stwierdzenie to pochodzi BOOKS ONLINE dla SQL Server 2000, tak więc możne ono już być nieaktualne. W dokumentacji dla SQL Server 2012 nie znalazłem żadnego stwierdzenia na temat minimalnej ilości VLF- ów. Tak czy inaczej – minimalna wielkość logu dla SQL Server 2000 to 512 KB przy dwóch VLF-ach. Czy zatem minimalna ilość wirtualnych plików dziennika dla logu transakcyjnego wynosi 2?

Osobiście zaryzykowałbym tezę, że TAK i limit ten jest nadal obecny w SQL 2012. Jednakże oficjalnej wzmianki na ten temat nie udało mi się znaleźć.

Inną sprawą jest fakt, że możemy skonfigurować plik dziennika transakcji tak aby zawierał on jeden VLF. Aby to zrobić musimy po prostu dodać drugi plik 🙂

ALTER DATABASE testVLF
ADD LOG FILE (
 NAME = 'testVLF_log2',
 FILENAME = 'c:\test\testVLF_log2.ldf',
 SIZE = 500, -- drugi log też będzie zawierał 8 VLF-ów
 FILEGROWTH = 500 --i będzie przyrastał także po 8 VLF
)

Gdy wykonamy instrukcję DBCC LOGIFO zobaczymy ile VLF-ów ma każdy z plików. Na obrazku poniżej widać, że pierwszy z nich ma dwa, a drugi osiem:

Spróbujmy zmniejszyć pierwszy z nich:

BACKUP LOG testVLF
TO DISK = 'testVLF_LOG_20120407.trn'
GO
DBCC SHRINKFILE ('testVLF_log', 1)
GO

Sprawdźmy, czy się udało:

No i mamy jeden VLF dla pierwszego z plików logu. Co więcej dla drugiego pliku też przedstawiona kombinacja zadziała ponieważ nadal będziemy mieć 2 VLF-y dla bazy:

BACKUP LOG testVLF
TO DISK = 'testVLF_LOG_20120407.trn'
GO
DBCC SHRINKFILE ('testVLF_log2', 1)
GO
DBCC LOGINFO
GO

No dobrze, ale czy ten fakt kiedykolwiek mi się przyda?

Generalnie rzecz ujmując – OBY NIE :). Ale jeżeli miałby się przydać, to prawdopodobnie w sytuacji, gdy nasze VLF-y są zbyt duże.

Jeżeli np. każdy z VLF-ów był wielkości 500MB, a my chcielibyśmy by ich wielkość spadła do 64MB, to możemy zmniejszyć log do 2 VLF-ów, dołożyć kolejny plik dziennika i wykonać operację ponownie. W ten sposób sprawimy, że tylko jeden VLF będzie nieodpowiednich rozmiarów. Po wykonaniu tej operacji możemy zwiększyć pierwszy z plików tak by kolejne VLF-y miały po 64MB i na koniec skasować drugi, gdyż nie będzie on nam już potrzebny.

Podsumowanie

Ewidentnie możemy tak skonfigurować nasz plik logu transakcyjnego tak, aby zawierał tylko jeden VLF. Jednakże w tym celu musimy dodać drugi plik dziennika, gdyż SQL Server wymaga minimum dwóch VLF-ów na bazę (co niestety nie jest oficjalnie potwierdzone) 🙂

IT Camp Gdańsk – wrażenia po i materiały do pobrania

Wczoraj miałem okazję uczestniczyć w konferencji IT Camp Gdańsk: Usługi IT w Dynamicznym Centrum Danych.

Podczas konferencji były poruszane tematy związane z planowaniem wirtualnych środowisk produkcyjnych, zarządzania nimi oraz automatyzacji zadań administracyjnych.

Wart wspomnienia jest fakt, że prelegenci byli na naprawdę wysokim poziomie. Grzegorz Piotrowski i Marek Pyka są nie tylko biegli w tematach związanych z chmurą prywatną, ale także potrafią przekazać swoją wiedzę w przystępny sposób. Prowadzącym udało się już od pierwszej sesji sprowokować dyskusję i sprawić, że zadawanie pytań oraz dodawanie własnych spostrzeżeń związanych z wdrożeniem usług wirtualizacyjnych stało się normą.

Subskrypcja technet

W ramach każdego z IT Camp-ów jest rozgrywany konkurs Speaker Idol. Skuszony dość fajnymi nagrodami postanowiłem wziąć w nim udział. Ewidentnie było warto wystąpić, gdyż od wczoraj jestem posiadaczem subskrypcji technet. Zdjęcie pudełka zamieszczam obok 🙂

Przedstawianą przeze mnie  prezentację pod tytułem „Wirtualizacja baz danych a dynamic memory” można znaleźć w części Materiały do pobrania mojego blog-a.