Дефрагментиране на файлове на SQL Server с помощта на помощната програма DISKEEPER

помощта

Базите данни на SQL Server са обект на вътрешна фрагментация с течение на времето. Това се случва, когато записите от страниците на базата данни се премахнат и мястото, което са заемали, се освободи. В крайна сметка това пространство се използва повторно, което води до физическо фрагментиране на страниците с данни, което може да доведе до увеличен I/O, особено в случай на сканиране на таблица, което чете много страници с данни една след друга.

В SQL Server има няколко начина за преодоляване на вътрешната фрагментация. Един от тези методи е да използвате командата DBCC REINDEX за повторно изграждане на клъстерирани и неклъстерирани индекси. След възстановяване на индексите, страниците с данни стават логически съседни и I/O на диска е сведен до минимум. За съжаление вътрешната фрагментация е само част от проблема с фрагментацията. Изпълнението на DBCC REINDEX не засяга външната фрагментация.

Външното фрагментиране е фрагментирането на физически файлове на дисковете на вашия сървър, което може да причини също толкова ненужни I/O, колкото и вътрешните, ако не и повече. Ненужните I/O операции водят до влошена производителност на SQL Server.

Базите данни на SQL Server са големи бази данни и регистрационни файлове, за които определен размер е запазен по време на създаването. Ако при създаването на тези файлове има непрекъснат, незает и достатъчен сегмент на диска, те няма да бъдат фрагментирани. Но ако наличното свободно пространство не е непрекъснато, тогава базата данни и регистрационните файлове първоначално ще бъдат фрагментирани. Дори базата данни и регистрационните файлове да не са първоначално фрагментирани, след като бъдат създадени, те почти сигурно ще станатфрагментиран, тъй като базата данни расте през цялото време. Например, ако зададете първоначалния размер на базата данни на 100 MB и регистрационния файл на 10 MB и зададете опциите за автоматично нарастване на 5 GB за файла с данни и 100 MB за регистрационния файл, външната фрагментация може да бъде голяма. Всеки път, когато данните или регистрационните файлове растат автоматично, съществува заплаха от външна фрагментация.

Има два вида външно фрагментиране, с които помощни програми като Diskeeper могат да се справят: фрагментиране на файлове и фрагментиране на свободно пространство. Фрагментирането на файл засяга файл на компютърен диск, когато файлът физически не е в едно парче, а е разделен на няколко фрагмента, които са разпръснати из целия диск; докато фрагментацията на свободното пространство означава, че празното пространство на диска не лежи в едно голямо парче, но също така е фрагментирано на много части. Фрагментирането на файла води до проблеми с достъпа до данните от файл, съхранен на компютърен диск, докато фрагментирането на свободното пространство води до проблеми при създаване на нови файлове с данни или стареене. Работата на помощната програма Diskeeper дефрагментира данните и регистрационните файлове, така че файлът физически да заема непрекъснато пространство в паметта, вместо да бъде разбит на части. Освен това Diskeeper дефрагментира свободното пространство, така че нарастването на данните или регистрационните файлове да причинява малко или никакво фрагментиране. Но това състояние на нещата не трае вечно. В резултат на това фрагментацията отново се превръща в проблем и данните и регистрационните файлове трябва да бъдат дефрагментирани отново. В идеалния случай дефрагментирането трябва да се извършва редовно.

Сега още нещо, за което вероятно сте говорили преди.не мислеше. Знаете ли какъв ефект има фрагментирането на физическите файлове върху SQL Server, когато индексът се изгражда отново? С други думи, ако не правите физическа дефрагментация, но премахвате вътрешна фрагментация, това ще попречи ли на повторното индексиране? Да, това може да бъде доста голяма пречка. Тъй като файловете са физически фрагментирани, ще отнеме на SQL Server много повече време, за да възстанови индексите на фрагментирани файлове, отколкото на съседни файлове. Следователно, преди да извършите вътрешно дефрагментиране, би било желателно първо да извършите физическо дефрагментиране. Това ще намали времето за възстановяване на индекса и също така ще намали обема на I/O на сървъра по време на процеса на възстановяване на индекса.

В допълнение към факта, че физическата фрагментация може да има отрицателно въздействие върху производителността при работа с файлове с данни и регистрационни файлове на SQL Server, трябва да запомните, че има други файлове, до които SQL Server има достъп, това са изпълними файлове на SQL Server и пълнотекстови индексни файлове, ако се използват. Поради това е желателно да се дефрагментират не само данните и регистрационните файлове, но и всички файлове, разположени на сървъра, където работи SQL Server.

Всички движения на файлове при стартиране на Diskeeper по време на дефрагментиране се контролират директно от операционната система. Всъщност кодът на операционната система, който изпълнява тази функция, който първоначално е написан от Executive Software, дава приоритет на сигурността какво може и какво не може да бъде дефрагментирано. Файловете на SQL Server (като .LDF и .MDF) са абсолютно безопасни за дефрагментиране. Ако в момента, когато Diskeeper изпрати заявка до операционната система (чрез програмен интерфейс - API) за преместване на файлове,ако има файлове, които не могат да бъдат преместени безопасно, той просто ги прескача без съобщения за грешка или други сигнали.

И така, как да разберете дали вашите файлове на SQL Server са физически фрагментирани? За щастие е лесно. Една от функциите на Diskeeper е Fragmentation Analysis, която може да се използва за преглед на фрагментацията на свързаните с SQL Server файлове. Подобно на дефрагментирането, тази процедура може да се извърши, докато SQL Server работи.

Може да ви е трудно да изберете конкретен график за дефрагментиране, тъй като различните бази данни могат да варират в степента на фрагментация. В този случай Diskeeper има вграден динамичен планировчик, наречен Smart Scheduling, който открива и автоматизира подходящите задачи за дефрагментиране. Той също така предоставя възможност за ограничаване на времето за изпълнение и ресурсите, използвани за задачи за дефрагментиране, които се изпълняват под контрола на Smart Scheduling.

По този начин е лесно да се заключи, че помощните програми за дефрагментиране като Diskeeper могат да помогнат за намаляване на фрагментирането на външни файлове на дискове, докато инструментите на SQL Server като израза DBCC REINDEX могат да помогнат в борбата с вътрешното фрагментиране на файловите страници на SQL Server. Те могат да работят заедно, за да осигурят оптимална производителност на SQL Server.

Когато се съмнявате, просто инсталирайте Diskeeper и стартирайте неговата функция за анализ, това ще ви уведоми на колко части са разделени вашите файлове. Сигурен съм, че ще бъдете много изненадани от резултатите. Виждал съм доклади от сайтове, където файловете на базата данни са разделени на повече от 287 000 части.