Сжаты ли данные, извлеченные из Microsoft SQL Server? Если это контролируется строкой соединения, есть ли простой способ узнать, использует ли это какое-то конкретное приложение?
Я изучаю инструменты анализа, и объем данных может передаваться по нашей сети в течение нескольких минут. Мне интересно, стоит ли ожидать повышения производительности, если мы извлечем данные из сжатого хранилища данных на том же удаленном сервере.
Пока мы находимся на этой теме, мне любопытно: данные передаются в двоичном или ASCII? Например, если значение 12345
запрашивается из INT
столбца, передается ли оно в виде пяти байтов 0x31, 0x32, 0x33, 0x34, 0x35; два байта, которые требуются для значения; или четыре байта, как требуется для столбца?
Чтобы было ясно, я понимаю, что есть варианты хранения данных со сжатием и их резервного копирования. Я спрашиваю о том, как данные передаются.
источник
Ответы:
Данные, которые вы хотите сжать, передаются по проводам через 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, вы почти наверняка связаны с вводом-выводом в настоящее время, а не с процессором. Таким образом, до тех пор, пока у вас есть загрузка ЦП, вы должны видеть более высокую производительность при включенном сжатии (но это не изменит производительность сети , так как данные перед сжатием несжаты). Я говорю, что ничего не зная о ваших серверах, вашем приложении, ваших данных или ваших шаблонах использования - у вас вполне может быть крайний случай, когда сжатие фактически снижает производительность или когда данные просто не являются хорошим кандидатом на хорошие коэффициенты сжатия.
источник
Технически результаты могут быть сжаты очень незначительно .
Поток табличных данных (TDS) 7.3B - впервые поддерживаемый SQL Server 2008 R2 - представил так называемое сжатие пустых растровых изображений, которое позволяет передавать строки, содержащие несколько нулей, используя меньше байтов, чем обычно требуется для значений нулевых полей.
Сервер может смешивать обычные строки со сжатыми пустыми растровыми строками по своему выбору при отправке результатов. Клиент не может контролировать это, поэтому соответствующие параметры конфигурации на стороне клиента недоступны.
Нулевое растровое изображение - единственная форма сжатия, поддерживаемая в настоящее время TDS. Если строка не имеет нулевого растрового изображения, она отправляется без сжатия.
Столбцы с нетекстовыми типами данных передаются с использованием двоичного формата, определенного протоколом TDS .
источник
Как уже упоминалось в другом месте , чтобы обойти эту проблему, вы можете подумать о настройке VPN и включении сжатия.
источник
Почему бы не настроить локальный экземпляр SQL, который кэширует соответствующие данные и синхронизирует их каждые n часов? Другая вещь, на которую стоит обратить внимание, - это предварительное вычисление кубов и наличие кнопки «получить подробности» при достижении итоговой ячейки. Это тогда выберет только соответствующие подробные строки.
источник