web-dev-qa-db-fra.com

Les données sont-elles récupérées de SQL Server compressé pour la transmission?

Les données sont-elles récupérées de Microsoft SQL Server compressé? Si cela est contrôlé par la chaîne de connexion, il existe un moyen simple de dire si une application particulière l'utilise?

J'examine les outils d'analyse et le volume de données peut prendre des minutes pour transmettre sur notre réseau. Je me demande si je devrais vous attendre à une augmentation de la performance si nous tirons des données d'un magasin de données compressé sur le même serveur distant.

Tant que nous sommes sur le sujet, je suis curieux: les données sont-elles transmises en binaire ou en ASCII? Par exemple, si la valeur 12345 est interrogé d'une colonne INT, est-elle transmise comme les cinq octets 0x31, 0x32, 0x33, 0x34, 0x35; les deux octets nécessaires à la valeur; ou quatre octets comme requis pour la colonne?

Pour être clair, je comprends qu'il existe des options concernant stocker données avec compression et le sauvegarder. Je demande comment les données sont transmises.

21
Jon of All Trades

Les données que vous souhaitez compresser sont qui ont été envoyées sur le fil via [~ # ~ # ~ # ~] . Il y a une compression mineure ici, mais nulle part le type de compression que vous obtenez avec compression de page/ligne, compression de la sauvegarde ou compression de colonne de colonne.

Il a été demandé auparavant:

http://connect.microsoft.com/sqlserver/feedback/details/412131/enable-network-compress-tds-stream

http://connect.microsoft.com/sqlserver/feedback/details/377479/wan-Compression-Option

Les articles sont toujours ouverts, alors peut-être qu'il y a de l'espoir. Il n'y a aucun moyen de contrôler cela via la chaîne de connexion que j'ai jamais vue.

En attendant, il existe des produits qui prétendent faire cela, par exemple.

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

http://toonel.net/tcpany.htm

Vous pouvez également configurer potentiellement le réseau entre votre serveur SQL et les serveurs d'applications pour prendre en charge la compression (et d'autres éléments tels que le cryptage), mais vous êtes au-delà de ma portée ici, et je ne sais pas si cela serait pris en charge par chaque fonctionnalité de SQL Serveur.

Et pour être honnête, je ne suis pas convaincu que c'est l'endroit où vous souhaitez vous concentrer sur l'optimisation. La compression de ce flux pourrait réellement ralentir les choses et l'emporter sur les avantages de l'envoi de moins d'octets. Je préférerais plonger l'argent sur une meilleure connectivité réseau entre serveur et client (s) que de passer du temps à investir dans ce type de travail et à tester si elle a des avantages réels - et de ne pas pouvoir le faire avant la suite. À partir de 10/100 à la fibre de gig, un connu et impact prévisible sur le réseau E/S.


Je ne suis pas sûr du format des octets envoyés sur le fil; Vous devrez configurer une sorte de sniffer de paquet pour cela (ou peut-être que quelqu'un a déjà fait cela et choisira).

En ce qui concerne l'impact de la compression, sauf si vous êtes sur FUSION-IO ou d'autres solutions de type SSD haut de gamme, vous êtes presque certainement lié et non à la CPU. Ainsi, tant que vous avez des frais de calcul de la CPU, vous devriez voir des performances plus rapides avec la compression activée (mais cela ne changera pas Réseau , car les données sont décompressées. avant la transmission). Je dis qui ne connaît rien sur vos serveurs, votre application, vos données ou vos habitudes d'utilisation - vous pouvez très bien avoir un cas de bord où la compression blesse réellement les performances, ou lorsque les données ne sont tout simplement pas un bon candidat pour de bons ratios de compression.

16
Aaron Bertrand

Les données sont-elles récupérées de Microsoft SQL Server compressé? Si cela est contrôlé par la chaîne de connexion, il existe un moyen simple de dire si une application particulière l'utilise?

Techniquement, Résultats Peut être compressé très légèrement .

Stream de données tabulaires (TDS) 7.3b-Premier pris en charge par SQL Server 2008 R2-introduit quelque chose appelé compression bitmap null qui permet de transmettre des lignes contenant plusieurs nulls à transmettre à l'aide de moins d'octets que les valeurs de champ Null .

Le serveur peut intermixner des lignes régulières avec NULL bitmap de lignes comprimées à son choix car elle envoie des résultats. Le client n'a aucun contrôle sur ceci, aucune option de configuration côté client pertinente n'est disponible.

Null bitmap est la seule forme de compression actuellement prise en charge par TDS. Si une rangée n'est pas Null Bitmap comprimé, il est envoyé non compressé.

Tant que nous sommes sur le sujet, je suis curieux: les données sont-elles transmises en binaire ou en ASCII?

Les colonnes avec des types de données non-texte sont transmises à l'aide d'un format binaire défini par le protocole TDS .

4
Ben Gribaudo