Чи дані, отримані з SQL Server, стиснуті для передачі?


20

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

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

Поки ми на тему, мені цікаво: чи передаються дані у двійковій чи ASCII? Наприклад, якщо значення 12345запитується із INTстовпця, чи передається воно у вигляді п'яти байтів 0x31, 0x32, 0x33, 0x34, 0x35; два байти, необхідні для значення; або чотири байти, як потрібно для стовпця?

Щоб було зрозуміло, я розумію, що існують варіанти щодо зберігання даних при стисненні та резервного копіювання. Я запитую про те, як передаються дані.


Стиснення - це внутрішній механізм. Сторінка стискається на диску та в пуфі буфера, але звичайний потік байтів на дроті. @ShawnMelton блогував про нюхання дротяного формату раніше, і, сподіваємось, відповість на основні моменти.
Марк Сторі-Сміт

Те, що я написав, було більш зосереджене на тому, чи було зашифровано. Я міг вибрати дані, які я витягував у читаному форматі, хоча я не пробував цілих значень. Єдиний спосіб точно знати - це лише налаштування та спробуйте: mssqltips.com/sqlservertip/2436/…
Шон Мелтон,

@ MarkStorey-Smith: Отже, відповідь "ні", дані не стискаються? Це прикро, але це допомагає пояснити, чому такі великі запити можуть зайняти стільки часу для передачі. Схоже, мені потрібен кеш, який фізично ближче. Якщо ви хочете зробити цю актуальну відповідь, я прийму її.
Йон усіх торгів

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

Відповіді:


16

Дані, які ви хочете стиснути, - це дані, що надсилаються по дроті через TDS . Тут є незначне стиснення, але ніде немає типу стиснення, яке ви отримуєте при стисненні сторінки / рядків, резервного стискання або стиснення ColumnStore.

Про це просили раніше:

http://connect.microsoft.com/SQLServer/feedback/details/412131/enable-network-compression-compress-tds-stream

http://connect.microsoft.com/SQLServer/feedback/details/377479/wan-compression-option

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

Тим часом є деякі продукти, які претендують на це, наприклад

http://www.nitrosphere.com/products/nitroaccelerator/

http://toonel.net/tcpany.htm

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

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


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

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


Однозначно в цьому проблема, принаймні, при передачі 10 Мб. Я можу запитувати дані за лічені секунди на самому сервері в RDP, але зазначений сервер фізично розташований поза станом, тому копіюючи дані на комп'ютер у бізнес-розташуванні - за допомогою простого файлового опису чи запиту з локального для мене комп'ютера - займає хвилин.
Йон усіх торгів

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

Саме так. Якщо ми не можемо перенести BI-сервер. Що стосується обсягу даних, то використання використовується для аналізу (використовуючи QlikView, банкомат), тобто років даних та безліч вимірів та фактів. Файли мають стиснення до 100 Мб , і це лише дані за пару років!
Йон усіх торгів

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

@ MarkStorey-Smith: Яка альтернатива? Даних багато, і доступ до мережі через нашу мережу є повільним. Як згадує Аарон, допоможе якийсь локальний кеш. Скорочення обсягу переданих даних дозволило б зменшити масштаби аналізу користувачів, що перешкоджало виявленню візуальних даних.
Йон усіх торгів

4

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

Технічно результати можна стиснути дуже незначно .

Табличний потік даних (TDS) 7.3B - вперше підтриманий SQL Server 2008 R2 - запровадив щось, що називається стисненням растрових растрових файлів, що дозволяє передавати рядки, що містять кілька нулів, використовуючи менше байтів, ніж зазвичай вимагають значення нульових полів.

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

Нульова растрова карта - єдина форма стиснення, яка зараз підтримується TDS. Якщо рядок не нульовий растровий файл стискається, він надсилається нестисненим.

Поки ми на тему, мені цікаво: чи передаються дані у двійковій чи ASCII?

Стовпці з нетекстовими типами даних передаються у двійковому форматі, визначеному протоколом TDS .


2

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

Як зазначають інші, у протоколі TDS SQL Server немає вбудованого стиснення. Також варто сказати, що за замовчуванням також немає шифрування. Щоб увімкнути шифрування, потрібно використовувати сертифікати та вказати їх у рядках з'єднання.

Найпростіше рішення для вирішення обох питань - відкрити тунель VPN із включеним шифруванням та стисненням. Простий Microsoft PPTP вирішує обидва питання і його легко налаштувати.


1

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


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