Os dados recuperados do SQL Server são compactados para transmissão?

20

Os dados recuperados do Microsoft SQL Server são compactados? Se isso for controlado pela cadeia de conexão, existe alguma maneira simples de saber se algum aplicativo em particular está usando?

Estou examinando as ferramentas de análise e o volume de dados pode levar alguns minutos para transmitir pela nossa rede. Estou pensando se devo esperar um aumento de desempenho se extrairmos dados de um armazenamento de dados compactados no mesmo servidor remoto.

Enquanto estamos no assunto, estou curioso: os dados são transmitidos em binário ou ASCII? Por exemplo, se o valor 12345for consultado em uma INTcoluna, ele será transmitido como cinco bytes 0x31, 0x32, 0x33, 0x34, 0x35; os dois bytes necessários para o valor; ou quatro bytes, conforme necessário para a coluna?

Para ser claro, entendo que existem opções para armazenar dados com compactação e fazer backup deles . Estou perguntando sobre como os dados são transmitidos.

Jon de todos os comércios
fonte
A compressão é um mecanismo interno. Uma página é compactada no disco e no buffer pool, mas um fluxo de bytes regular na conexão. O @ShawnMelton publicou um blog sobre cheirar o formato do fio anteriormente e espero responder com os destaques.
Mark-Storey-Smith
O que eu escrevi foi mais focado em saber se ele estava criptografado. Eu pude escolher os dados que estava puxando no formato legível, embora não tentei valores inteiros. Única maneira de saber com certeza é apenas configuração e experimentá-lo: mssqltips.com/sqlservertip/2436/...
Shawn Melton
@ MarkStorey-Smith: Então a resposta é "não", os dados não são compactados? É uma pena, mas ajuda a explicar por que essas consultas grandes podem demorar tanto para serem transmitidas. Parece que preciso de um cache fisicamente mais próximo. Se você quiser fazer disso uma resposta real, eu aceito.
Jon of All Trades
@ ShawnMelton: Isso certamente soa como a maneira certa de fazer isso, eu simplesmente não tenho antecedentes de rede suficientes para chegar à camada certa e ter confiança no que estou vendo. Felizmente para mim existem pessoas com mais habilidades e mais tempo em suas mãos!
Jon of All Trades

Respostas:

16

Os dados que você deseja compactar são os enviados por fio via TDS . Há uma pequena compressão aqui, mas nem de longe o tipo de compactação que você obtém com a compactação de página / linha, compactação de backup ou compactação ColumnStore.

Já foi solicitado antes:

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

Os itens ainda estão abertos, então talvez haja alguma esperança. Não há como controlar isso através da cadeia de conexão que eu já vi.

Enquanto isso, existem alguns produtos que pretendem fazer isso, por exemplo

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

http://toonel.net/tcpany.htm

Você também pode potencialmente configurar a rede entre o SQL Server e os servidores de aplicativos para dar suporte à compactação (e outras coisas como criptografia), mas você está além do meu escopo aqui e não tenho certeza se isso seria suportado por todos os recursos do SQL Servidor.

E para ser sincero, não estou convencido de que este é o lugar que você deseja focar na otimização. A compactação desse fluxo pode realmente atrasar as coisas e compensar os benefícios do envio de menos bytes. Eu prefiro dedicar o dinheiro a uma melhor conectividade de rede entre servidor e cliente (s) do que gastar tempo investindo nesse tipo de trabalho e testando se há algum benefício real - e não poder fazer isso até mais tarde. De 10/100 a fibra de gig tem um impacto conhecido e previsível na E / S da rede.


Não tenho certeza sobre o formato dos bytes enviados por fio; você terá que configurar algum tipo de farejador de pacotes para isso (ou talvez alguém já tenha feito isso e participe).

Quanto ao impacto da compactação, a menos que você esteja no Fusion-IO ou em outras soluções high-end do tipo SSD, você certamente está vinculado à E / S atualmente e não à CPU. Portanto, desde que você tenha sobrecarga da CPU, deverá ter um desempenho mais rápido com a compactação ativada (mas isso não altera o desempenho da rede , pois os dados são descompactados antes da transmissão). Eu digo que, sabendo nada sobre seus servidores, aplicativos, dados ou padrões de uso - você poderia muito bem ter um caso de vantagem em que a compactação realmente prejudica o desempenho ou onde os dados simplesmente não são um bom candidato para boas taxas de compactação.

Aaron Bertrand
fonte
Definitivamente, é o problema da rede, pelo menos ao transmitir 10s de MB. Posso consultar dados em segundos no próprio servidor no RDP, mas o servidor está fisicamente fora do estado e, portanto, copia os dados para um computador no local da empresa - por simples operação de arquivo ou consultando um computador local para mim - leva alguns minutos.
Jon of All Trades
Portanto, talvez você deva replicar, espelhar ou algo mais e consultar os dados localmente a partir da cópia. Dessa forma, a latência não é sentida pelos usuários finais. A maneira como você aborda isso depende de quão novos os dados precisam ser. E também se você realmente precisa de um usuário final para consultar 10s de MBs de dados ao mesmo tempo.
Aaron Bertrand
Exatamente. A menos que possamos realocar o servidor de BI. Em relação ao volume de dados, o uso é para análise (usando QlikView, ATM), para anos de dados e muitas dimensões e fatos. Os arquivos variam de até 100 MB com compactação, e são dados de apenas alguns anos!
Jon of All Trades
@ JonofAllTrades Significou com as melhores intenções ... parece que você está tentando resolver o problema errado, com a solução errada.
Mark-Storey-Smith
@ MarkStorey-Smith: Qual é a alternativa? Há muitos dados e o acesso é lento em nossa WAN. Como Aaron menciona, algum tipo de cache local ajudaria. Reduzir o volume de dados transmitidos reduziria o escopo da análise dos usuários, o que anulou o objetivo da descoberta visual de dados.
Jon of All Trades
4

Os dados recuperados do Microsoft SQL Server são compactados? Se isso for controlado pela cadeia de conexão, existe alguma maneira simples de saber se algum aplicativo em particular está usando?

Tecnicamente, os resultados podem ser compactados muito ligeiramente .

O TDS (Tabular Data Stream) 7.3B - inicialmente suportado pelo SQL Server 2008 R2 - introduziu algo chamado compactação de bitmap nulo que permite que linhas contendo vários nulos sejam transmitidas usando menos bytes do que os normalmente exigidos pelos valores de campo nulos.

O servidor pode misturar linhas regulares com linhas compactadas com bitmap nulo à sua escolha ao enviar resultados. O cliente não tem controle sobre isso, portanto, não há opções de configuração relevantes do lado do cliente disponíveis.

O bitmap nulo é a única forma de compactação atualmente suportada pelo TDS. Se uma linha não for um bitmap nulo compactado, ela será enviada sem compactação.

Enquanto estamos no assunto, estou curioso: os dados são transmitidos em binário ou ASCII?

As colunas com tipos de dados que não são de texto são transmitidas usando um formato binário definido pelo protocolo TDS .

Ben Gribaudo
fonte
2

Como mencionado anteriormente , para solucionar esse problema, você pode considerar a possibilidade de configurar uma VPN e ativar a compactação.

Como outros já disseram, não há compactação incorporada ao protocolo TDS do SQL Server. Também vale a pena dizer que, por padrão, também não há criptografia. Para habilitar a criptografia, você deve usar certificados e especificá-lo nas cadeias de conexão.

A solução mais fácil para resolver os dois problemas é abrir um túnel VPN com criptografia e compactação ativadas. O Microsoft PPTP simples resolve os dois problemas e é fácil de configurar.

jocull
fonte
1

Por que não configurar uma instância SQL local que armazena em cache os dados relevantes e sincroniza a cada n horas? Outra coisa a observar é pré-calcular os cubos e ter um botão 'obter detalhes' quando você alcança uma célula de resumo. Isso buscaria apenas as linhas detalhadas relevantes.

Ishwar
fonte
Sua primeira frase parece muito com esse comentário .
Aaron Bertrand