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 12345
for consultado em uma INT
coluna, 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.
fonte
Respostas:
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.
fonte
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.
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 .
fonte
Como mencionado anteriormente , para solucionar esse problema, você pode considerar a possibilidade de configurar uma VPN e ativar a compactação.
fonte
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.
fonte