web-dev-qa-db-ja.com

SQL Serverから取得したデータは送信用に圧縮されていますか?

Microsoft SQL Serverから取得したデータは圧縮されていますか?これが接続文字列によって制御されている場合、特定のアプリがそれを使用しているかどうかを確認する簡単な方法はありますか?

分析ツールを調べています。データ量がネットワーク経由で送信されるのに数分かかる場合があります。同じリモートサーバー上の圧縮データストアからデータをプルした場合、パフォーマンスの向上が期待できるかどうか疑問に思っています。

私たちがこのトピックについている限り、私は興味があります。データはバイナリまたはASCIIで送信されますか?たとえば、値12345INT列から照会され、5バイト0x31、0x32、0x33、0x34、0x35として送信されます。値に必要な2バイト。または列に必要な4バイト?

明確にするために、圧縮ありのstoringデータに関するオプションと、それをバックアップするオプションがあることを理解しています。データがどのように送信されるかについて質問しています。

21

圧縮しようとしているデータは、 [〜#〜] tds [〜#〜] を介してネットワーク経由で送信されたデータです。ここにはいくつかのマイナーな圧縮がありますが、ページ/行圧縮、バックアップ圧縮、または列ストア圧縮で得られる圧縮の種類に近いものはありません。

それは以前に求められていました:

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

アイテムはまだ開いているので、希望があるかもしれません。これまでに見た接続文字列を介してこれを制御する方法はありません。

その間、これを行うと主張するいくつかの製品があります。

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

http://toonel.net/tcpany.htm

SQL Serverとアプリケーションサーバーの間のネットワークを構成して、圧縮(および暗号化など)をサポートすることもできますが、ここでは範囲外です。SQLのすべての機能でサポートされるかどうかはわかりません。サーバ。

正直なところ、これが最適化に集中したい場所だとは思いません。このストリームを圧縮すると、実際には処理が遅くなり、送信するバイト数が少ないという利点よりも重要になります。この種の作業に時間を費やして実際のメリットがあるかどうかをテストするよりも、サーバーとクライアントの間のネットワーク接続を向上させることにお金を費やしたいと思います。 10/100からギグファイバーまでは、既知および予測可能な影響がありますネットワークI/O上。


回線を介して送信されるバイトの形式についてはわかりません。そのためには、ある種のパケットスニファを設定する必要があります(または、誰かがすでにそれを実行していて、チャイムを鳴らすでしょう)。

圧縮の影響については、Fusion-IOまたは他のハイエンドSSDタイプのソリューションを使用している場合を除き、ほぼ確実に現在I/Oバウンドであり、CPUバウンドではありません。 CPUオーバーヘッドがある限り、圧縮を有効にするとパフォーマンスが向上します(ただし、データが圧縮されていないため、networkパフォーマンスは変わりません)送信前)。私は、サーバー、アプリケーション、データ、または使用パターンについて何も知らないと言っています-圧縮が実際にパフォーマンスを低下させる、またはデータが優れた圧縮率の良い候補ではないEdgeケースがある可能性があります。

16
Aaron Bertrand

Microsoft SQL Serverから取得したデータは圧縮されていますか?これが接続文字列によって制御されている場合、特定のアプリがそれを使用しているかどうかを確認する簡単な方法はありますか?

技術的には、結果は圧縮できます非常にわずかに圧縮されます。

表形式データストリーム(TDS)7.3B — SQL Server 2008 R2で初めてサポート— nullビットマップ圧縮 と呼ばれるものを導入しました。これにより、nullフィールド値で通常必要とされるよりも少ないバイトを使用して、複数のnullを含む行を送信できます。 。

サーバーは、結果を送信するときに、通常の行を選択時にnullビットマップ圧縮行と混在させることができます。クライアントはこれを制御できないため、関連するクライアント側の構成オプションは使用できません。

ヌルビットマップは、現在TDSでサポートされている唯一の圧縮形式です。行が圧縮されたnullビットマップでない場合、その行は圧縮されずに送信されます。

私たちがこのトピックについている限り、私は興味があります。データはバイナリまたはASCIIで送信されますか?

非テキストデータタイプの列は、 TDSプロトコルで定義されたバイナリ形式 を使用して送信されます。

4
Ben Gribaudo

他の場所で述べたように 、この問題を回避するには、VPNを設定して圧縮を有効にすることを検討してください。

他の人が言ったように、SQL Server TDSプロトコルに組み込まれた圧縮はありません。また、デフォルトでは暗号化も行われないことも言うまでもありません。暗号化を有効にするには、証明書を使用して、接続文字列で指定する必要があります。

両方の問題を解決する最も簡単な解決策は、暗号化と圧縮を有効にしてVPNトンネルを開くことです。シンプルなMicrosoft PPTPは両方の問題を解決し、セットアップも簡単です。

2
jocull

関連するデータをキャッシュし、n時間ごとに同期するローカルSQLインスタンスをセットアップしませんか?注目すべき他のことは、キューブを事前に計算し、集計セルに到達したときに「詳細を取得」ボタンを用意することです。次に、関連する詳細行のみをフェッチします。

1
Ishwar