Переміщення бази даних SQL Server на новий диск під час роботи в Інтернеті


11

У мене база даних SQL Server 1.4TB, яка масово бореться з дисковим введенням / виходом. Ми встановили на сервер новий масив SSD, який вирішить усі наші проблеми, ми просто обговорюємо найкращий спосіб переміщення бази даних по всій. В ідеалі, якщо ми можемо це зробити без простоїв, це найкраще. Але коли вибір знаходиться між двома днями низької продуктивності (наприклад, під час копіювання даних) проти двох годин простою, останні можуть бути кращими.

Поки що рішення, які ми придумали:

  • Проста копія. Візьміть БД в автономному режимі, скопіюйте файли впоперек, змініть місця розташування в SQL сервері та поверніть його в Інтернет. Приблизні цифри вважають, що це займе до п'яти годин, що не є дійсно прийнятним, але це найпростіше рішення.

  • Копія на рівні блоку. Використовуючи утиліту, схожу на rsync, ми копіюємо файли на задньому плані, поки БД працює. Коли ми готові до міграції, ми беремо DB в автономний режим, робимо диференційовану копію за допомогою цієї утиліти, потім наводимо SQL-сервер на нові файли та передаємо їх в Інтернеті. Терміни тут невідомі. Ми не знаємо, скільки часу знадобиться зробити диференціальний аналіз 1,4 ТБ та скопіювати це впоперек. Наша інша стурбованість полягає в тому, що копія на рівні блоку залишить файли у певному стані, нечитаними на SQL Server, і ми втратимо час.

  • Міграція SQL. Створіть на новому диску новий файл даних TQL 1.4TB і відключіть автоматичний ріст для всіх інших файлів. Потім запустіть DBBC SHRINKFILE (-file_name-, EMPTYFILE) на всіх інших файлах даних по черзі. Після того, як всі дані будуть впоперек, я в якийсь момент візьму планове вікно, щоб перенести файл MDF на SSD та видалити інші невикористані файли. Мені це подобається, оскільки це мінімізує простої. Але я не маю уявлення, скільки часу це займе і чи призведе це до погіршення продуктивності, поки це відбувається.

У нас немає жодного навантаження та продуктивного середовища, щоб перевірити це. Я можу переконатись, що стратегії будуть працювати на нашому режимі, але не на вплив, а не на ефективність.


Ваші файли даних зберігаються на розділі LVM?
Марко

1
don't know how long it will take to do a differential analysis of 1.4TBпринаймні стільки, скільки потрібно, щоб прочитати ці дані. Я не думаю, що ідея rsync значно економить. rsync створений, щоб впоратися з повільними мережами.
usr

2
Замість використання EMPTYFILE я перестроїв би всі індекси до нової файлової групи, що лежить на SSD. Таким чином показники виглядають приємними та дефрагментованими. EMPTYFILE може фрагментувати їх, не впевнені.
usr

Відповіді:


14

Один з способів переміщення всієї бази даних - це за допомогою BACKUPі RESTORE. База даних буде недоступною під час остаточного перемикання, але час простою повинен бути мінімальним при плануванні. Ця процедура передбачає модель FULLабо BULK_LOGGEDмодель відновлення:

1) Виконайте ПОВНУЮ резервну копію (або використовуйте наявну).

2) Відновіть останню повну резервну копію до іншого імені бази даних, вказавши WITH MOVEопцію для переміщення файлів на сховищі SSD за бажанням та NORECOVERYопцію, щоб наступні диференціальні та резервні копії журналу могли бути відновлені.

3) Застосовувати додаткові зміни до нової бази даних до моменту остаточного розкрою з резервними копіями журналу транзакцій та RESTORE...WITH NORECOVERY. Це дозволить мінімізувати час простою для остаточного переходу на нову базу даних.

4) Щоб переключитися на нову базу даних, виберіть програму в автономному режимі, виконайте остаточне резервне копіювання журналу транзакцій та застосуйте до нової бази даних WITH RECOVERY. Нарешті, перейменуйте оригінальну базу даних на інше ім’я та перейменуйте переміщену базу даних на оригінальну назву. Викиньте стару базу даних за вашою зручністю.

У моделі SIMPLE відновлення ви можете використовувати подібний процес, але без резервного копіювання / відновлення журналу кроків 3. Натомість використовуйте диференційоване резервне копіювання / відновлення бази даних на завершальному кроці. Це може зажадати більше часу простою, залежно від кількості змін після першої FULLрезервної копії.


Так, нічого не спадає на думку, як найпростіший і швидкий за той же рух db сервера.
Маріан

-6
Good approach is to use SQL REPLICATION between two server
once all data replicated on SSD server then take current server offline 
and switch to SSD server.

2
Ви отримуєте голоси, тому що не відповідаєте на питання. У ситуації, що обговорюється, є лише один сервер.
AakashM

Також хорошим підходом до переміщення даних є дзеркальне відображення, доставка журналів, групи доступності, резервне копіювання та ін. Це, на жаль, не вирішує проблеми.
Маріан

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