Розбиття на одну групу файлів


10

У моїй базі даних є дуже великі таблиці, але значна частина цих даних "стара".

З-за обставин, що не знаходяться під моїм контролем, мені не дозволяється видаляти ці "старі" дані. Інше обмеження полягає в тому, що я не можу змінювати базу даних, тобто додаю до неї файлові групи. У тому, як зараз стоять речі, все знаходиться на групі PRIMARYфайлів.

Я думав розділити ці таблиці на кілька розділів, таких як "нові", "старі", "заархівовані" тощо. У мене є стовпець "статус", який я хотів би використовувати для цієї мети.

Враховуючи описаний сценарій та обмеження, мені було цікаво, чи має такий розподіл сенс. Іншими словами, якщо моя таблиця розділена таким чином, але всі розділи сидять у одній групі файлів, чи буде SQL Server досить розумним, щоб знайти ту спеціальну область в базовому файлі, де перебувають мої "нові" дані, і не торкатися область зі "старими" даними?

Якщо говорити інакше, якщо, скажімо, 80% моїх даних "старі". Чи є у SQL Server механізм уникнути доступу до 100% базових файлів і лише 20% доступу, що містить "нові" дані (якщо, звичайно, я вказую свій стовпчик розділу в WHEREпункті запитів).

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

Відповіді:


6

Є два переваги розділення таблиці в одній групі файлів:

  1. Дозволяючи поступово перебудовувати частини великого індексу, що забезпечує більш ефективне обслуговування. Перегляньте ALTER INDEX [foo] REBUILD PARTITION=nдокладні відомості.
  2. Використання усунення розділів та (можливо) блокування рівня розділів для поліпшення обслуговування запитів. Я обговорюю це у своєму блозі .

Слід пам’ятати про кілька речей, якщо ви розділяєте їх.

  • Якщо у вашій таблиці є кластерний індекс (і це дійсно повинно бути), ваш ключ розподілу повинен бути частиною кластерного індексу.
  • Щоб уникнути проблем із продуктивністю, слід вирівняти розділи. Це означає, що всі ваші індекси повинні містити ваш ключ розділу, як включення, так і як частина самого індексу.
  • Поновлення індексів для розділів в автономному режимі в поточних версіях SQL Server (2005-2012). Якщо ваші розділи великі, а ваша перебудова за допомогою розділів, це може призвести до блокування проблем.

Рекомендую зробити глибоке дослідження щодо розділення, перш ніж його здійснити. Кендра Літл має чудовий перелік ресурсів, з яких можна розпочати роботу.


Якщо я маю розділений індекс кластеру, чи не всі некластеризовані індекси вже містять стовпчик розділення як локатор рядків?
Zikato

0

Відповідь - «так». Він має механізм для будь-якого запиту, який фільтрує входи на основі логіки, що використовується для визначення розділів.

У вас повинен бути відповідний фільтр, інакше, інакше всі розділи будуть відскановані. Зазвичай це передбачає наявність фільтрів дат (у вашому випадку) для вибору розділу.

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


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