База даних SQL Server на SSD - будь-яка перевага окремого файлу для кожної таблиці?


19

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

Оскільки я дуже хочу витіснити кожну останню крапку продуктивності з наявного обладнання (близько 64 ГБ оперативної пам’яті, дуже швидкий SSD і 16 ядер), я думав дозволити кожній таблиці мати власний файл, так що незалежно від того, чи Я приєднуюся до 2, 3, 4, 5 і більше таблиць, кожна таблиця завжди буде читатися за допомогою окремого потоку, і структура кожного файлу буде тісно вирівняна зі вмістом таблиці, що, сподіваємось, мінімізує фрагментацію та зробить її швидшою для SQL Server додати до вмісту будь-якої таблиці.

Одне застереження, я застряг у веб-версії SQL Server 2008 R2 . Що означає, що я не можу використовувати автоматичний горизонтальний розподіл, який виключає це як підвищення продуктивності.

Чи дійсно використання одного файлу в таблиці дійсно максимізує продуктивність, чи я не помічаю вбудовані характеристики двигуна SQL Server, які роблять це зайвим?

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

Відповіді:


18

Я думав дозволити кожній таблиці мати власний файл, так що незалежно від того, чи я приєднуюся до 2, 3, 4, 5 або більше таблиць, кожна таблиця завжди буде читатися за допомогою окремої нитки, і структура кожного файлу буде бути тісно узгодженим із вмістом таблиці, що, сподіваємось, мінімізує фрагментацію та пришвидшить додавання SQL Server до вмісту будь-якої таблиці

Про якого чорта ти говориш? Не впевнені, звідки ви отримали свою інформацію, але ви обов'язково повинні відкинути це джерело. Ніщо з того, що ви припускаєте тут, насправді не є правильним.

Якщо ви хочете прочитати гарне обговорення продуктивності SSD для SQL Server, є кілька серій блогів. Як завжди, Пол Поендаль - це головне, що читається:

У Brent також є приємна презентація на тему: SQL на SSD: Hot and Crazy Love і там є більше.

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


1
Так, мені подали неправильну інформацію десь уздовж лінії, але, як я коментував відповідь Стюарта, я поставив питання, щоб переконатися, що я не базував свої рішення на невірній інформації. Дякую за посилання, я перевірю їх.

17

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

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

Нарешті, коли йдеться про витіснення кожної краплі продуктивності з сервера Sql, я посилаю вас на таку таблицю (за умови мого Microsoft):

введіть тут опис зображення

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


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

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

4

Як зазначали інші, від одного файлу на таблицю немає прямої вигоди; ось чудовий конспект Стіва Джонса про те, як виник цей міф: http://www.sqlservercentral.com/blogs/steve_jones/2009/10/13/sql-server-legend-data-files-and-threads/

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


2

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

Чи підтримує SQL Server 2008 R2 стиснення? Якщо так, увімкніть це.

Виправте мене, якщо я помиляюся.


Не могли б ви детальніше пояснити, чому не буде користі від ефективності? Принаймні, поясніть, чому це так, коли окремі файли дозволяють SQL Server використовувати декілька потоків для читання.

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

Ви маєте рацію щодо паралельних потоків (таблиць / файлів), але я думаю, поки у вас не буде лише одного фізичного диска, підвищення продуктивності буде невеликим.

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