Таблиці, оптимізовані для пам’яті - чи справді вони можуть бути настільки важкими для обслуговування?


18

Я досліджую переваги оновлення з MS SQL 2012 до 2014 року. Однією з найбільших точок продажу SQL 2014 є таблиці, оптимізовані для пам'яті, які, очевидно, роблять запити надшвидкими.

Я виявив, що в таблицях, оптимізованих пам'яті, є кілька обмежень, таких як:

  • Немає (max)розмірів полів
  • Максимум ~ 1 КБ на рядок
  • Немає timestampполів
  • Немає обчислених стовпців
  • Ніяких UNIQUEобмежень

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

Справжній кікер - це той факт, що ви не можете запустити ALTER TABLEоперацію, і вам доведеться проходити цю ригмаролу кожен раз, коли ви додаєте поле до INCLUDEсписку індексу. Крім того, виявляється, що вам потрібно вимкнути користувачів із системи, щоб внести будь-які зміни схеми до таблиць MO в реальній БД.

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

Отже, що я неправильно зрозумів? Ви використовували таблиці MO? Чи є якийсь секретний перемикач чи процес, який робить їх практичним у використанні та обслуговуванні?

Відповіді:


18

Ні, в пам’яті насправді це неполіровано. Якщо ви знайомі з Agile, ви знатимете поняття "мінімально доступний товар"; в пам'яті це те. У мене виникає відчуття, що MS потребує відповіді на Хану SAP та її подібність. Це те, що вони можуть отримати налагодження у часовій рамці для випуску 2014 року.

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


Зараз SQL Server 2016 загальнодоступний. Як я і гадав, OLTP In-Memory отримав ряд удосконалень. Більшість змін реалізують функціональність, яким традиційні таблиці користуються протягом певного часу. Я здогадуюсь, що майбутні функції будуть випущені одночасно і для пам'яті, і для традиційних таблиць. Тимчасові таблиці - це конкретний випадок. Нове в цій версії підтримується як In-Memory, так і дисковими таблицями.


14

Однією з проблем з новою технологією - особливо випуском V1, який був розкритий досить голосно як неповнофункціональний - є те, що всі стрибають на прокладці і припускають, що це ідеально підходить для будь-якого навантаження. Це не. Солодке місце Хекатона - це навантаження OLTP об'ємом до 256 ГБ з великою кількістю точкових підключень на 2-4 розетки. Чи відповідає це вашому навантаженню?

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

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

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

SQL Server 2016

Якщо ви рухаєтесь до SQL Server 2016, я розповів про вдосконалення, які ви побачите в OLTP-пам'яті In-memory, а також про усунення деяких обмежень . Дуже помітно:

  • Збільшення максимального міцного розміру столу: 256 ГБ => 2 ТБ
  • Стовпці LOB / MAX, індекси на змінних стовпцях, усунення вимог до зіставлення BIN2
  • Змінення та перекомпіляція процедур
  • Деяка підтримка ALTER TABLE - вона буде відключена в режимі офлайн, але ви повинні мати змогу змінювати та / або скидати / відновлювати індекси (це, мабуть, не підтримується в поточних збірках CTP, однак, не сприймайте це як гарантію)
  • Тригери DML, обмеження FK / перевірки, MARS
  • АБО, НЕ, В, ІСНУЄТЬСЯ, ДИСТИНКТ, СПІЛЬ, ВНУТРІШНІ ПРИЄДНАННЯ
  • Паралелізм

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

3
@shaul добре, тому не використовуйте його. Або лише покласти в пам'ять стабільні таблиці. Або розгляньте інший дизайн, коли ви постійно додаєте стовпці (EAV). Як і є, я думаю, ви просто ганьбите, що ця технологія не для вас. У мене є діти, тому я не скаржуюся, що Porsche Cayman S для мене не практичний - або, принаймні, не як щоденний водій. Можливо, я міг би використовувати його у вихідні дні (так само, можливо, ви могли б використовувати OLTP в пам'яті для частини вашої схеми, але не для всього). Те, що у вас є вимоги, які не є такими поширеними, і що суперечать особливостям V1, не є виною Microsoft.
Аарон Бертран

Аарон, що таке EAV?
Шаул Бехр


2

Ви не можете клацнути правою кнопкою миші таблицю, оптимізовану для пам’яті, підключити дизайнер та додати нові стовпці, як вам завгодно, із програми Sql Server Management Studio. Ви також не можете клацнути в межах назви таблиці як засобу перейменування таблиці. (SQL 2014, як я писав це.)

Натомість ви можете клацнути правою кнопкою миші таблицю та скриптувати команду create у нове вікно запитів. Цю команду створення можна змінити, додавши будь-які нові стовпці.

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

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

Тоді вам доведеться зважити, чи варті обмеження та заощадження для вашого випадку використання. У вас є проблеми з роботою? Ви пробували все інше? Чи поліпшиться це на 10-100 разів? Використовувати його чи не використовувати його, швидше за все, це буде чимось без головного мозку.


-2

ви можете користуватися OLTP In-Memory в операційних серверах без будь-яких великих проблем. ми використовували цю технологію в банківській і платіжній компанії,

Взагалі ми можемо використовувати оптимізовані для пам'яті таблиці, коли навантаження занадто велика. за допомогою OLTP In-Memory ви можете досягти кращої продуктивності до 30X! Microsoft виправляє більшість цих обмежень у SQL Server 2016 та 2017. Оптимізовані для пам’яті таблиці мають зовсім іншу архітектуру порівняно з таблицями на основі диска.

Таблиці, оптимізовані для пам’яті, бувають двох типів. міцні столи та недовговічні столи. Міцні та недовговічні таблиці підтримують збереження даних таблиці в пам'яті. Далі довговічні таблиці зберігають дані на Дисках для відновлення даних і схем. Більшість операційних сценаріїв ми повинні використовувати міцні таблиці, оскільки втрачені дані є критичними. У деяких сценаріях, наприклад, завантаження ETL та кешування, ми можемо використовувати нетривкі таблиці.

ви можете використовувати ці електронні книги та навчитися користуватися цією технологією:

Кален Делані: https://www.red-gate.com/library/sql-server-internals-in-memory-oltp

Дмитро Короткевич: https://www.apress.com/gp/book/9781484227718

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