Отримайте MS SQL Server для звільнення місця на диску


9

Погано керована таблиця баз даних стала величезною. 48 + концерти орфографічних записів. Я намагаюся очистити його і повернути свій небезпечно повний жорсткий диск у нормальний стан. Я буду видаляти з цієї таблиці близько 400 мільйонів записів. Це працює під час введення. Я помічаю, що я не бачу жодного падіння у своєму просторі на жорсткому диску, але я бачу падіння пам'яті на запитах системної таблиці, я бігаю, щоб отримати розмір таблиці. База даних використовує "Просту модель відновлення".

Є багато питань, подібних до цього, у відповідях, що потрібно зменшити базу даних. Але вони продовжують пояснювати, як це погано / страшно робити через розрізнені дані тощо.

  1. Оскільки база даних не повинна бути такого розміру. Чи все-таки погано мені це скорочувати?
  2. Це виробнича база даних. Якщо я скорочую, це спричинить простої або заблокує базу даних?
  3. У студії управління SQL Server ви маєте два варіанти зменшення, бази даних або файлів. З огляду на мою ситуацію, що було б найкращим варіантом?
  4. чи є правило про відсоток вільного простору в БД?

Навіть читаючи опис тегів скорочення, змушує мене не хотіти цього робити. Чи є інший спосіб?

Відповіді:


14

Я буду видаляти з цієї таблиці близько 400 мільйонів записів.

Сподіваємось, ви робите це шматками - щоб уникнути роздуття журналу транзакцій.

зауважте, що я не бачу жодної краплі на своєму жорсткому диску

Ви не хочете, оскільки вам доведеться явно скоротити файл бази даних, щоб звільнити простір. Видаляючи записи, SQL-сервер не повинен звільнити простір назад в ОС .

  1. Оскільки база даних не повинна бути такого розміру. Чи все-таки погано мені це скорочувати?

Як правило, це погана практика, оскільки бази даних повинні бути належним чином притиснуті. Якщо ви на 100% впевнені, що ваша база даних НЕ буде знову такою величиною, вам все в порядку зменшити базу даних (у вашому сценарії) .

  1. Це виробнича база даних. Якщо я скорочую, це спричинить простої або заблокує базу даних?

Скорочення бази даних є дуже інтенсивним IO. Її доцільно скорочувати DBCC SHRINKFILEпід час вікна технічного обслуговування або при мінімальній активності.

  1. У студії управління у вас є два варіанти: База даних або Файли. З огляду на мою ситуацію, що було б найкращим варіантом?

Ви повинні використовувати TSQL, щоб зробити зменшення. (оскільки ви запитали, скорочення FILE - це спосіб перейти замість бази даних). Ви можете використовувати термоусадочну базу даних в шматках - скрипт tsql, щоб зробити зменшення в шматки.

Пам'ятайте, що коли ви скорочуєтесь, ви фрагментуєте свої індекси.

  1. чи є правило про відсоток вільного простору в БД?

Ви можете посилатися на статтю Оцінка вимог до місця на диску для баз даних . Правила виправлення не існує, ви повинні врахувати, як очікується зростання вашої бази даних. Ви також повинні враховувати автоматичне зростання ваших баз даних .

Посилання: Чому журнал транзакцій постійно росте чи не вистачає місця?


5

у вас є вагомі причини для занепокоєння, оскільки БД скорочується на SQL Server часто "смокче". Пол Рендал, керівник системи зберігання даних у SQL 2005 року, заявив, що ShrinkDB написано дуже погано. Він знайде порожній простір, взявши дані в самому кінці і поставивши їх на самому початку, і продовжувати робити це, поки у нього не буде вільного місця в кінці файлів БД. Після цього він може звільнити простір від SQL Server і повернути його назад в ОС. Ви ефективно обертаєте файли бази даних, таким чином ви зазвичай бачите масову фрагментацію. Про його погляди ви можете прочитати у цій публікації блогу чи у цьому відео MCM Internals

Як і у всьому, ви дійсно повинні спочатку перевірити їх у своєму оточенні. Кращий спосіб зробити це - переміщення даних в іншу файлову групу. Ви можете зробити перебудову індексу в Інтернеті за допомогою кластерного індексу, а потім перевстановити в нову групу файлів. Тоді ви можете скинути старий і звільнити простір і майже не мати фрагментації. Зверніть увагу, що це займе приблизно 120% додаткового місця під час роботи над ним. Проблема в цьому полягає в тому, що вам потрібно навіть додаткове вільне місце, яке, схоже, у вас може бути. Це особливість підприємства.

Якщо вільний простір настільки великий, то вам, можливо, доведеться кусати кулю і повільно стискати БД невеликим шматочком за один раз, щоб уникнути тривалих запущених процесів. Зауважте, що ваші дані будуть сильно фрагментовані, і вам захочеться знову переробити все. Зауважте, що після перевстановлення всього, ви трохи надуваєте використаний простір і повернетесь до додаткового вільного місця. Дивіться поради Брента тут .

Що стосується того, скільки вільного місця для вас добре, питання про те, наскільки ви можете дозволити собі фрагментацію та активізацію росту файлів. Якщо IFI увімкнено, зростання файлів майже миттєве, але ви все одно отримуєте фрагментацію. Добре правило - виділити стільки місця, скільки, на вашу думку, потрібно, або стежити за ростом і періодично коригувати шматки, якщо вам доведеться. Це зменшує фізичну фрагментацію.

Також зростання файлів журналу набагато важливіше. Додаткові файли журналу можуть викликати фрагментацію VLF. Це робить ваш процес відновлення значно повільнішим і може впливати на контрольно-пропускний пункт / скорочення. Ось деякі ризики щодо продуктивності, які ви берете за допомогою фрагментованого журналу Виконайте DBCC LOGINFO();кожну базу даних. Постарайтеся зберегти число близько 50 вбік за Кіма Триппа, але якщо ви бачите сотні, у вас є проблеми з фрагментацією, що означає, що ваші файли журналів повинні зростати, щоб підтримувати операції. Хороший спосіб побачити, який має бути ваш файл журналу за Полом Рандалом, - це просто дати йому зростати протягом тижня і переробити. Це може бути хорошим моментом, можливо, ви можете викинути трохи більше вільного місця на всякий випадок. Переконайтесь, що ваші журнали не фрагментовані за допомогою DBCC LOGINFO (); знову ж таки, і якщо вони є, це означає, що вони багато зросли. Зменшити та повторно розгорнути файл журналу за допомогоюцей метод .


2

Це нормально, щоб ви скоротили його достатньо, щоб переконатися, що ваш сервер не вийде з ладу протягом того часу, який вам потрібен, щоб оцінити свої потреби в сховищі та планувати належним чином обладнання та послуги хостингу (див. Питання 4). Ні, це не заблокує. Дивіться обмеження . Зменшіть базу даних, тому що вона робить все просто.

Я пропоную скористатися експертизою для проведення дослідження та скласти план.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.