Моментната снимка на базата данни предоставя изглед само за четене на база данни на SQL Server, която е транзакционно съвместима със състоянието на изходната база данни към момента, в който моментната снимка на базата данни е създадена. Съществуват редица причини за използване на моментни снимки на база данни, например отчитане спрямо огледална база данни, а DBCC CHECKDB също използва моментни снимки на вътрешна база данни от SQL Server 2005 нататък.
Моментните снимки на базата данни също така предоставят възможност за връщане на всички промени, настъпили в база данни след създаването на моментната снимка на базата данни, но с гаден страничен ефект върху дневника на транзакциите на базата данни, за който Пол публикува тук в блога.
Едно от нещата, които обикновено не се разглеждат или показват около моментните снимки на базата данни, е въздействието върху производителността, което моментната снимка има върху работното натоварване при запис на база данни. Екипът на SQLCAT публикува бяла книга за SQL Server 2005, Съображения за производителност на моментна снимка на база данни при I/O-интензивни работни натоварвания, която изследва въздействието върху производителността на моментните снимки на базата данни и след като наскоро работех с клиент, където моментните снимки на базата данни доведоха до проблеми с производителността, исках да тествайте SQL Server 2012 и определете дали е имало промени в режийните разходи за моментни снимки на база данни седем години и три версии на SQL Server по-късно.
Тестова конфигурация
За да извърша тестването на ефекта на моментните снимки на базата данни върху производителността на работното натоварване при запис, използвах нашия Dell R720, извършващ вмъкване на 1 000 000 реда в нова таблица в увеличена версия на базата данни AdventureWorks2012. Базата данни AdventureWorks2012 е създадена с 8 файла с данни, разпределени в два Fusion-io ioDrive Duo 640GB SSD, всеки от които е настроен като два отделни 320GB диска в Windows, представяйки общо 4 диска. За да се опрости обяснението на конфигурацията, оформлението за съхранение, използвано за тези тестове, е показано в таблицата по-долу:
Диск | Конфигурация | Употреба |
---|---|---|
K | 15K RAID 5 – 6 диск | Моментна снимка |
L | Fusion-io Card2 – страна B | Регистрационен файл |
M | Fusion-io Card2 – страна A | 4 файла с данни |
N | Fusion-io Card1 – Страна A | 4 файла с данни |
Q | Fusion-io Card1 – Страна B | Tempdb |
R | LSI Nytro BLP4-1600 | Моментна снимка |
Таблица 1 – Оформление и използване на диска на сървъра
Съхранението за моментна снимка на базата данни беше или RAID-5 масив от шест 15k RPM SAS устройства, свързани чрез iSCSI, или LSI Nytro BLP4-1600 PCI-E карта.
Работното натоварване на теста използва следния оператор SELECT INTO, за да генерира таблица от 1 000 000 реда, която беше изпусната между всеки от тестовете.
SELECT TOP 1000000 * INTO tmp_SalesOrderHeader FROM Sales.SalesOrderHeaderEnlarged;
Тестовете бяха насрочени за измерване на продължителността без моментна снимка на базата данни и след това продължителността с моментна снимка на базата данни, създадена на всяко от устройствата за съхранение, за да се измери влошаването на производителността, причинено от записване на промени в страницата в разредения файл на моментна снимка на базата данни. Тестовете също бяха проведени с помощта на две моментни снимки на база данни на едно и също устройство за съхранение, за да се установи какви са допълнителните разходи за допълнителни снимки на база данни за дублираните операции на запис, които евентуално трябва да бъдат извършени.
Резултати
Всяка тестова конфигурация е изпълнена десет пъти и средната продължителност, преобразувана от милисекунди в секунди за по-лесно гледане, е показана на фигура 1 за 0, 1 или 2 моментни снимки на базата данни.
Фигура 1 – Продължителност на моментната снимка
Базовите тестове без моментни снимки на базата данни се изпълняват средно за 1,8 секунди и дори когато съхранението на файловете със моментни снимки на базата данни е еквивалентно по производителност, съществуването на единична моментна снимка на базата данни налага допълнителни разходи върху производителността на запис за базата данни. Разходите за втората моментна снимка на базата данни са по-ниски от първата моментна снимка на базата данни във всеки от тестовете, въпреки че дисковете с 15K RPM са имали много по-трудно време да поддържат добавеното работно натоварване при запис от втората моментна снимка на базата данни за базата данни.
Производителността на картата LSI Nytro първоначално ме изненада, тъй като тя също беше PCI-X SSD. Въпреки това, след като обсъди резултатите с Глен, той спомена, че компресията на контролера Sandforce и по-бавната производителност на запис за произволни данни с ниска компресия от предишните му тестове на устройството. Въпреки това, той все още лесно надмина въртящите се медии.
Преди да стартирам тестовете, ми беше интересно да разбера какви типове чакане ще възникнат по време на тестовете, така че като част от конфигурацията на теста изчистих sys.dm_os_wait_stats с DBCC SQLPERF и заснех изхода от DMV за всяко тестово изпълнение в таблица. Най-големите изчаквания за конфигурациите на единична моментна снимка бяха PREEMPTIVE_OS_WRITEFILE и WRITE_COMPLETION, както е показано на Фигура 2, за 1 или 2 моментни снимки на база данни.
Фигура 2 – Моментна снимка най-горе чака
Един от интересните елементи беше добавянето на изчакване FCB_REPLICA_WRITE, когато се създаде втора моментна снимка. След преглед на резултатите от изчакване на единична моментна снимка на базата данни и повторно стартиране на няколко кръга тестове, това изчакване никога не се случва за единична моментна снимка и се появява само когато съществуват повече от една моментна снимка и е свързано с копиране на страниците във файловете за моментни снимки на базата данни. Времената на изчакване за PREEMPTIVE_OS_WRITEFILE тенденцията на изчакване е тясна с увеличаването на продължителността на изпълнение за всяка от конфигурациите.
Имайки предвид тези резултати, когато преглеждате система с помощта на методологията Waits and Queues, виждането на този тип чакане с по-високи стойности може да си струва да се проучи дали съществуват моментни снимки на база данни за някоя от базите данни на сървъра.
Заключение
Когато използвате моментни снимки на база данни, дори в SQL Server 2012, има допълнителни разходи, свързани с допълнителните записи, необходими за копиране на страници с данни в редките файлове за моментните снимки. Ако използването на моментни снимки на база данни е част от общата ви конфигурация, наистина бих бил внимателен относно планирането на подсистемата за вход/изход, така че да отговаря на изискванията за работно натоварване за едновременна I/O активност към разредените файлове на моментната снимка на базата данни.
От резултатите от тези тестове дори бих обмислил поставянето на моментни снимки на база данни на SSD дискове преди tempdb за производителността на запис, а също и за по-ниско въздействие върху производителността от поддръжката на моментни снимки.
Както винаги, пробегът ви може да варира и със сигурност ще искате да тествате производителността на всяка конфигурация, преди да я пуснете в производствена употреба.