Les données extraites de Microsoft SQL Server sont-elles compressées? Si cela est contrôlé par la chaîne de connexion, existe-t-il un moyen simple de savoir si une application particulière l'utilise?
J'examine les outils d'analyse, et le volume de données peut prendre quelques minutes à transmettre sur notre réseau. Je me demande si je dois m'attendre à une augmentation des performances si nous extrayons 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 ASCII? Par exemple, si la valeur 12345
est interrogée à partir d'une INT
colonne, est-elle transmise sous la forme des cinq octets 0x31, 0x32, 0x33, 0x34, 0x35; les deux octets requis pour la valeur; ou quatre octets comme requis pour la colonne?
Pour être clair, je comprends qu'il existe des options concernant le stockage des données avec compression et leur sauvegarde. Je demande comment les données sont transmises.
la source
Réponses:
Les données que vous cherchez à compresser sont celles envoyées via le câble via TDS . Il y a une compression mineure ici mais loin du type de compression que vous obtenez avec la compression de page / ligne, la compression de sauvegarde ou la compression ColumnStore.
Il a été demandé auparavant:
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
Les articles sont toujours ouverts, il y a donc peut-être 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, certains produits prétendent le faire, par exemple
http://www.nitrosphere.com/products/nitroaccelerator/
http://toonel.net/tcpany.htm
Vous pouvez également potentiellement configurer le réseau entre votre serveur SQL et les serveurs d'applications pour prendre en charge la compression (et d'autres choses comme le chiffrement), mais vous êtes hors de ma portée ici, et je ne suis pas sûr que cela soit pris en charge par toutes les fonctionnalités de SQL Serveur.
Et pour être honnête, je ne suis pas convaincu que c'est là que vous souhaitez vous concentrer sur l'optimisation. La compression de ce flux peut en fait ralentir les choses et l'emporter sur les avantages d'envoyer moins d'octets. Je préfère dépenser de l'argent sur une meilleure connectivité réseau entre le serveur et le (s) client (s) plutôt que de passer du temps à investir dans ce type de travail et à tester s'il présente des avantages réels - et à ne pouvoir le faire qu'après. De 10/100 à gig fibre optique a un impact connu et prévisible sur les E / S du réseau.
Je ne suis pas sûr du format des octets envoyés sur le fil; vous devrez mettre en place une sorte de renifleur de paquets pour cela (ou peut-être que quelqu'un a déjà fait cela et va sonner)
En ce qui concerne l'impact de la compression, à moins que vous ne soyez sur Fusion-IO ou d'autres solutions de type SSD haut de gamme, vous êtes presque certainement lié aux E / S actuellement, et non lié au CPU. Donc, tant que vous avez une surcharge du processeur, vous devriez voir des performances plus rapides avec la compression activée (mais cela ne changera pas les performances du réseau , car les données ne sont pas compressées avant la transmission). Je dis que ne rien savoir de vos serveurs, de votre application, de vos données ou de vos modèles d'utilisation - vous pourriez très bien avoir un cas de pointe où la compression nuit réellement aux performances, ou où les données ne sont tout simplement pas un bon candidat pour de bons taux de compression.
la source
Techniquement, les résultats peuvent être très légèrement compressés .
Tabular Data Stream (TDS) 7.3B, initialement pris en charge par SQL Server 2008 R2, a introduit quelque chose appelé compression bitmap nulle qui permet de transmettre des lignes contenant plusieurs valeurs nulles en utilisant moins d'octets que ce qui est normalement requis par les valeurs de champ nulles.
Le serveur peut mélanger des lignes régulières avec des lignes compressées bitmap nulles à son choix lors de l'envoi des résultats. Le client n'a aucun contrôle sur cela, donc aucune option de configuration côté client n'est disponible.
Le bitmap nul est la seule forme de compression actuellement prise en charge par TDS. Si une ligne n'est pas compressée en bitmap nul, elle est envoyée non compressée.
Les colonnes avec des types de données non textuels sont transmises en utilisant un format binaire défini par le protocole TDS .
la source
Comme mentionné ailleurs , pour contourner ce problème, vous pouvez envisager de configurer un VPN et d'activer la compression.
la source
Pourquoi ne pas configurer une instance SQL locale qui met en cache les données pertinentes et se synchronise toutes les n heures? Une autre chose à regarder est de précalculer les cubes et d'avoir un bouton `` obtenir les détails '' lorsque vous atteignez une cellule de résumé. Cela récupérerait alors uniquement les lignes détaillées pertinentes.
la source