Database
 sql >> Baza danych >  >> RDS >> Database

Natychmiastowa inicjalizacja pliku:wpływ podczas instalacji

Niedawno Erin Stellato (@erinstellato) napisała na blogu o wpływie na wydajność, jaki może mieć błyskawiczne inicjowanie plików (IFI) podczas tworzenia lub przywracania baz danych. Wyjaśnia, że ​​konfiguracja SQL Server 2016 oferuje teraz możliwość przyznania odpowiednich praw do usługi SQL Server podczas instalacji (rozmawialiśmy o tym również w sekcji CTP 3.0 w najnowszych wersjach SQL Server 2016):

Teraz możesz włączyć błyskawiczne inicjowanie plików podczas konfiguracji programu SQL Server

Klucz to nowa opcja (którą można również określić w pliku konfiguracyjnym):

SQLSVCINSTANTFILEINIT="Prawda|Fałsz"

Fajnie, że możesz naprawdę skrócić czas potrzebny na późniejsze tworzenie lub przywracanie baz danych, bez konieczności pamiętania o przejściu do gpedit, prawidłowym przypisaniu praw i ponownym uruchomieniu usługi. Ale o wiele większą korzyścią dla mnie jest możliwość konfigurowania większych plików tempdb podczas instalacji, przy wczesnym korzystaniu z IFI.

Teraz podczas instalacji istnieją pewne ograniczenia; na przykład liczba plików tempdb jest ograniczona do 8 (lub liczby rdzeni, w zależności od tego, która z tych wartości jest mniejsza), a rozmiar każdego pliku może osiągnąć maksymalnie 1024 MB. Limity te są wymuszane w interfejsie użytkownika i pomyślałem, że mógłbym je obejść, określając większe rozmiary w pliku konfiguracyjnym dla instalacji nienadzorowanej, ale to też nie zadziałało. (Dzienniki mówiły:"Wartość 8192 dla rozmiaru pliku TempDB przekracza 1024 MB i może mieć wpływ na czas instalacji. Możesz ustawić mniejszy rozmiar i zmienić po instalacji.") Osobiście uważam, że w tym dniu i wiek, przy szybkości i wielkości pamięci, jaką możemy uzyskać, ograniczenie rozmiaru pliku danych do 1 GB jest sztucznie zaniżone. Złożyłem więc sugestię dotyczącą Connect:

  • Połącz #2457759:pliki danych tempdb nie powinny być ograniczone do 1024 MB

A potem zwrócono uwagę, że Brent Ozar (@BrentO) zgłosił podobny element wcześniej w cyklu CTP, kiedy faktycznie narzucono limit 256 MB zamiast 1 GB:

  • Połącz #1841076:zbyt mały rozmiar początkowy konfiguracji TempDB

Nie mam żadnych potwornych maszyn, które mogłyby obsługiwać pliki 64 x 1 GB, a to też nie byłby realistyczny test, więc postanowiłem przetestować wpływ IFI na 8 plikach danych tempdb o wielkości 1 GB każdy. Jestem trochę ze starej szkoły, więc zbudowałem cztery różne pliki .ini i podkreśliłem linie, które zmieniłbym dla każdego testu (chciałem bazować na minimalnej instalacji z plikami danych 4 x 8 MB, używając IFI i nie, a następnie porównaj go z plikami 8 x 1024 MB). Ponieważ uruchamiałbym te pętle wiele razy, ważne było, aby używać różnych nazw instancji w zależności od tego, czy IFI jest włączone, czy nie, ponieważ po przyznaniu prawa do konta usługi nie jest to odbierane przez proste usunięcie instancji (mogłem skonfigurować te konta niezależnie, ale chciałem, aby te testy były łatwe do odtworzenia).

;Plik konfiguracyjny SQL Server 2016 RC0
[OPCJE]
ACTION="Zainstaluj"
ENU="True"
QUIET="True"
QUIETSIMPLE="False"
UpdateEnabled="False"
ERRORREPORTING="False"
USEMICROSOFTUPDATE="False"
FEATURES=SQLENGINE
HELP="False"
INDICATEPROGRESS=" Fałsz"
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
INSTANCENAME="ABTESTIFI_ON"
INSTANCEID="ABTESTIFI_ON"
SQLTELSVCSTARTUPTYPE="Wyłączone"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
AGTSVCACCOUNT="NT Authority\System"
AGTSVCSTARTUPTYPE ="Ręczny"
SQLSVCSTARTUPTYPE="Ręczny"
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="Usługa NT\MSSQL$ABTESTIFI_ON"
;Prawda dla IFI =ON, Fałsz dla OFF :
SQLSVCINSTANTFILEINIT="False"
SQLSYSADMINACCOUNTS="NT Authority\System"
SQLTEMPDBFILECOUNT="8"
;1024 dla łącznie 8 GB, 8 dla całości 64 MB:
SQLTEMPD BFILESIZE="1024"
SQLTEMPDBFILEGROWTH="64"
SQLTEMPDBLOGFILESIZE="8"
SQLTEMPDBLOGFILEGROWTH="64"
BROWSERSVCSTARTUPTYPE="Ręczny"

A oto plik wsadowy, którego użyłem (umieszczony w tym samym folderze co pliki konfiguracyjne), który zainstalował, a następnie odinstalował instancję przy użyciu każdej kombinacji trzy razy, i zapisał czasy instalacji do pliku tekstowego – ignorując dezinstalację i czyszczenie.

echo Początek testu…
@echo off 2>nul
setlocal enabledelayedexpansion
set outputfile=time.txt
echo.> %outputfile%
rem Usuń osiem i/lub szesnaście, jeśli masz tylko 4 rdzenie!
DLA %%e IN (Baseline Four Eight Sixteen) ZRÓB (
DLA %%x IN (IFI_ON) IFI_OFF) ZRÓB (
FOR /L %%A IN (1,1,3) ZRÓB (
echo WSTAW #x WARTOŚCI('%%e', '%%x', '!TIME!) ',>> %outputfile%
D:\setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ConfigurationFile=%%e_%%x.ini
echo '!TIME!' ^)>> %outputfile%
D:\setup.exe /Q /ACTION=UNINSTALL /INSTANCENAME=ABTEST%%x /FEATURES=SQL
rem del /Q /S "C:\Program Files\Microsoft SQL Server\MSSQL13.ABTEST %%x\*.*"
rem rd /Q /S "C:\Program Files\Microsoft SQL Server\MSSQL13.ABTEST%%x\"
)
)
)
@echo on
echo …test zakończony.

Kilka uwag:

  • Może być konieczna zmiana dwóch wierszy z D:\setup.exe do ścieżki do katalogu instalacyjnego.
  • Przed uruchomieniem może być konieczne ponowne uruchomienie systemu.
  • Będziesz chciał uruchomić plik wsadowy z wiersza poleceń z podwyższonym poziomem uprawnień, aby funkcja UAC nie przerywała ci przy każdej iteracji.

Przeprowadziłem testy na trzech różnych systemach:

  • Maszyna wirtualna z systemem Windows 10 z 4 rdzeniami i pamięcią masową SSD
    Test podstawowy 4 x 8 MB, a następnie 4 x 1024 MB
  • Maszyna wirtualna z systemem Windows 10 z 8 rdzeniami i pamięcią masową PCIe
    Test podstawowy 4 x 8 MB, 4 x 1024 MB, 8 x 1024 MB
  • Maszyna wirtualna z systemem Windows 2012 R2 z 16 rdzeniami i dwukanałową macierzą RAID 10 z 8 dyskami SAS 10 tys.
    Test podstawowy 4 x 8 MB, 4 x 1024 MB, 8 x 1024 MB i 16 x 1024 MB

Pliki wyjściowe wygenerowały kilka instrukcji wstawiania, które mogę wkleić tutaj:

CREATE TABLE #x
(
  [server] varchar(32),
  [test]   varchar(32),
  [start]  time(2),
  [end]    time(2)
);
 
-- inserts pasted here
 
SELECT [server],[test],AVG(DATEDIFF(SECOND,[start],[end])*1.0)
FROM #x
GROUP BY [server],[test];

Oto czasy w dziesięciu testach, uśrednione i zaokrąglone (kliknij, aby powiększyć):

Przewidywalnie, IFI staje się ważny przy większych plikach na wolniejszych dyskach

Konfiguracja zajmuje trochę ponad minutę (jak fajnie jest uruchomić konfigurację bez narzędzi do zarządzania). Jedynym odchyleniem było to, że rozmiary plików zaczęły się zwiększać na napędach mechanicznych i przy wyłączonej natychmiastowej inicjalizacji plików. Nie mogę udawać, że jestem tym zszokowana.

Wniosek

Jeśli korzystasz z dysku SSD lub PCIe, natychmiastowa inicjalizacja pliku nie może pogorszyć sytuacji, ale nie ma wyraźnych korzyści podczas konfiguracji, o ile archaiczne ograniczenia rozmiaru pliku dla plików danych tempdb pozostaną nienaruszone. Przy obecnych zasadach nie wydaje się możliwe przetestowanie tego wpływu poza (1 GB x liczba dostępnych rdzeni). Jeśli jednak korzystasz z wolnych dysków mechanicznych, zauważalna jest różnica, nawet przy inicjalizacji tylko 8 GB lub 16 GB danych – wyzerowanie jest dość kosztowne, gdy głowice dysków muszą się poruszać. To powiedziawszy, to, czy konfiguracja zajmuje 75 sekund, czy 2 minuty, jest dość nieistotne w ogólnym schemacie rzeczy (chyba że instalujesz setki serwerów, ale z jakiegoś powodu nie automatyzujesz tego), więc myślę, że większą zaletą jest tutaj wygoda – nie trzeba pamiętać, aby przyznać kontu usługi uprawnienia do wolumenu niezbędne jakiś czas po pomyślnej instalacji. Jeśli się nad tym zastanowić, ta nowa opcja konfiguracji może się o wiele bardziej opłacać w przypadku automatycznych instalacji dużej liczby serwerów, poza czasem zapisanym podczas rzeczywistej instalacji.

  • Pobierz pliki konfiguracyjne i plik wsadowy

(Mój następny test przyjrzy się, ile czasu zajmuje rozszerzenie istniejących plików tempdb do rozmiaru znacznie większego niż 1024 MB po instalacji .)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracja projektu Django do Heroku

  2. Hekaton z niespodzianką:In-memory TVP – część 1

  3. Repozytorium testowej bazy danych IRI-Windocks

  4. Korzystanie z Salesforce SOQL z systemu Linux

  5. Zrozumienie instrukcji PIVOT, UNPIVOT i Reverse PIVOT