Данные, извлеченные из 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 Server и серверами приложений для поддержки сжатия (и других вещей, таких как шифрование), но вы находитесь за пределами моей компетенции, и я не уверен, будет ли это поддерживаться всеми функциями SQL Сервер.

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


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

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


Проблема определенно в сети, по крайней мере, при передаче 10 с МБ. Я могу запросить данные за несколько секунд на самом сервере в RDP, но указанный сервер физически находится вне состояния, и, таким образом, копирует данные на компьютер в офисе компании - с помощью простого файла или запроса с локального для меня компьютера - занимает минуты.
Джон всех профессий

Поэтому, возможно, вам следует выполнить репликацию, зеркальное отображение или что-то еще и запросить данные локально из копии. Таким образом, задержка не ощущается конечными пользователями. Как вы к этому подходите, зависит от того, насколько свежими должны быть данные. А также, нужен ли вам конечный пользователь для одновременного запроса 10 мегабайт данных.
Аарон Бертран

Точно. Если только мы не сможем переместить BI-сервер. Что касается объема данных, то он используется для анализа (с использованием QlikView, ATM), поэтому данные за годы и множество измерений и фактов. Размер файлов со сжатием до 100 МБ , и это всего за пару лет!
Джон на все руки

@JonofAllTrades Имеются в виду лучшие намерения ... похоже, вы пытаетесь решить не ту проблему, а неправильное решение.
Марк Стори-Смит

@ MarkStorey-Smith: какая альтернатива? Там много данных, и доступ к ним через нашу глобальную сеть медленный. Как упоминает Аарон, какой-то локальный кеш поможет. Сокращение объема передаваемых данных сократит объем анализа пользователей, что лишает цель визуального обнаружения данных.
Джон всех профессий

4

Сжаты ли данные, извлеченные из Microsoft SQL Server? Если это контролируется строкой соединения, есть ли простой способ узнать, использует ли это какое-то конкретное приложение?

Технически результаты могут быть сжаты очень незначительно .

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

Сервер может смешивать обычные строки со сжатыми пустыми растровыми строками по своему выбору при отправке результатов. Клиент не может контролировать это, поэтому соответствующие параметры конфигурации на стороне клиента недоступны.

Нулевое растровое изображение - единственная форма сжатия, поддерживаемая в настоящее время TDS. Если строка не имеет нулевого растрового изображения, она отправляется без сжатия.

Пока мы находимся на этой теме, мне любопытно: данные передаются в двоичном или ASCII?

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


2

Как уже упоминалось в другом месте , чтобы обойти эту проблему, вы можете подумать о настройке VPN и включении сжатия.

Как уже говорили другие, в протокол SQL Server TDS не встроено сжатие. Также стоит сказать, что по умолчанию шифрование также отсутствует. Чтобы включить шифрование, необходимо использовать сертификаты и указать его в строках подключения.

Самым простым решением для решения обеих проблем является открытие VPN-туннеля с включенным шифрованием и сжатием. Простой Microsoft PPTP решает обе проблемы и прост в настройке.


1

Почему бы не настроить локальный экземпляр SQL, который кэширует соответствующие данные и синхронизирует их каждые n часов? Другая вещь, на которую стоит обратить внимание, - это предварительное вычисление кубов и наличие кнопки «получить подробности» при достижении итоговой ячейки. Это тогда выберет только соответствующие подробные строки.


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