Os dados recuperados do Microsoft SQL Server são compactados? Se isso for controlado pela string de conexão, existe alguma maneira simples de saber se algum aplicativo específico está usando?
Estou examinando as ferramentas de análise e o volume de dados pode levar minutos para ser transmitido pela nossa rede. Estou me perguntando se devo esperar um aumento de desempenho se extrairmos dados de um armazenamento de dados compactados no mesmo servidor remoto.
Já que estamos no assunto, estou curioso: os dados são transmitidos em binário ou ASCII? Por exemplo, se o valor 12345
for consultado de uma INT
coluna, ele é transmitido como os 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 em relação ao armazenamento de dados com compactação e backup. Estou perguntando sobre como os dados são transmitidos.
Os dados que você deseja compactar são os enviados pela rede via TDS . Há alguma compactação menor aqui, mas nem de longe o tipo de compactação que você obtém com compactação de página/linha, compactação de backup ou compactação ColumnStore.
Já foi pedido 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 por meio da string de conexão que eu já vi.
Entretanto, existem alguns produtos que afirmam 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 oferecer 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 honesto, não estou convencido de que este é o lugar que você deseja focar na otimização. A compactação desse fluxo pode, na verdade, desacelerar as coisas e superar os benefícios de enviar menos bytes. Prefiro gastar dinheiro em uma melhor conectividade de rede entre o servidor e o (s) cliente (s) do que gastar tempo investindo nesse tipo de trabalho e testando se ele traz algum benefício real - e não ser capaz de fazer isso até mais tarde. De 10/100 a giga fibra tem um impacto conhecido e previsível na E/S da rede.
Não tenho certeza sobre o formato dos bytes enviados pela rede; você terá que configurar algum tipo de farejador de pacotes para isso (ou talvez alguém já tenha feito isso e entre em contato).
Quanto ao impacto da compactação, a menos que você esteja no Fusion-IO ou em outras soluções do tipo SSD de ponta, é quase certo que você esteja atualmente vinculado a E/S e não a CPU. Portanto, enquanto houver sobrecarga de CPU, você verá um desempenho mais rápido com a compactação ativada (mas isso não alterará o desempenho da rede , pois os dados são descompactados antes da transmissão). Eu digo que não sabendo nada sobre seus servidores, seu aplicativo, seus dados ou seus padrões de uso - você pode muito bem ter um caso extremo em que a compactação realmente prejudica o desempenho ou em que os dados simplesmente não são bons candidatos para boas taxas de compactação.
Tecnicamente, os resultados podem ser ligeiramente compactados .
Tabular Data Stream (TDS) 7.3B — primeiro 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 normalmente são exigidos por valores de campo nulos.
O servidor pode misturar linhas regulares com linhas compactadas de bitmap nulo à sua escolha enquanto envia resultados. O cliente não tem controle sobre isso, portanto, nenhuma opção de configuração relevante do lado do cliente está disponível.
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 descompactada.
As colunas com tipos de dados não textuais são transmitidas usando um formato binário definido pelo protocolo TDS .
Conforme mencionado em outro lugar , para contornar esse problema, considere configurar uma VPN e ativar a compactação.
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 se observar é pré-computar os cubos e ter um botão 'obter detalhes' quando você chegar a uma célula de resumo. Isso buscaria apenas as linhas detalhadas relevantes.