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


20

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

私は分析ツールを検討していますが、データ量がネットワークを介して送信されるのに数分かかる場合があります。同じリモートサーバー上の圧縮データストアからデータを取得する場合、パフォーマンスの向上を期待する必要があるかどうか疑問に思っています。

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

明確にするために、データを圧縮して保存し、バックアップすることに関するオプションがあることを理解しています。データの送信方法について質問しています。


圧縮は内部メカニズムです。ページはディスク上およびバッファプール内で圧縮されますが、ワイヤ上では通常のバイトストリームです。@ShawnMeltonは以前にワイヤー形式のスニッフィングについてブログに書いており、できればハイライトで応答するでしょう。
マークストーリースミス

私が書いたのは、暗号化されているかどうかにより焦点を当てていました。整数値は試しませんでしたが、読み取り可能な形式でプルしていたデータを取り出すことができました。確実に知るための唯一の方法は、単に設定され、それを試してみてください。mssqltips.com/sqlservertip/2436/...
ショーン・メルトン

@ MarkStorey-Smith:答えは「いいえ」で、データは圧縮されていませんか?それは残念ですが、これらの大きなクエリの送信に時間がかかる理由を説明するのに役立ちます。物理的に近いキャッシュが必要なようです。それを実際の答えにしたい場合は、受け入れます。
すべての取引のジョン

@ShawnMelton:それは確かにそれを行う正しい方法のように聞こえますが、私はちょうど正しい層に到達し、私が見ているものに自信を持っているのに十分なネットワークの背景を持っていません。幸いなことに、より多くのスキルと時間を手に入れている人がいます!
すべての取引のジョン

回答:


16

圧縮しようとしているデータは、TDSを介してネットワーク経由で送信されたものです。ここには多少の軽微な圧縮がありますが、ページ/行圧縮、バックアップ圧縮、またはColumnStore圧縮で得られる圧縮のタイプに近いところはありません。

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

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のオーバーヘッドがある限り、圧縮を有効にするとパフォーマンスが向上します(ただし、データは送信前に圧縮されないため、ネットワークパフォーマンスは変わりません)。サーバー、アプリケーション、データ、または使用パターンについて何も知らないことを言います-圧縮が実際にパフォーマンスを損なうか、データが良い圧縮率の良い候補ではないエッジケースがあります。


少なくとも10 MBを送信する場合は、間違いなくネットワークが問題です。RDPのサーバー自体で数秒でデータを照会できますが、サーバーは物理的に状態外にあるため、ビジネスの場所にあるコンピューターにデータをコピーします-単純なファイル操作またはローカルコンピューターからの照会によって-数分かかります。
すべての取引のジョン・

そのため、複製、ミラーリング、または何か他の方法で、コピーからローカルにデータを照会する必要があります。こうすることで、エンドユーザーは待ち時間を感じません。これにどのようにアプローチするかは、データの最新性に依存します。また、一度に数十MBのデータを照会するためにエンドユーザーが本当に必要かどうか。
アーロンバートランド

まさに。BIサーバーを再配置できない場合。データ量に関しては、使用は分析(QlikView、ATMを使用)であるため、長年のデータと多くのディメンションとファクトです。ファイルの範囲は最大100 MB 圧縮されており、わずか数年分のデータです!
すべての取引のジョン

@JonofAllTrades最善を尽くして...間違った解決策で間違った問題を解決しようとしているようです。
マークストーリースミス

@ MarkStorey-Smith:代替手段は何ですか?大量のデータがあり、WANを介したアクセスには時間がかかります。アーロンが言及しているように、何らかのローカルキャッシュが役立ちます。送信されるデータの量を減らすと、ユーザーの分析範囲が狭くなり、視覚的なデータ検出の目的が失われます。
すべての取引のジョン

4

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

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

表形式データストリーム(TDS)7.3B-SQL Server 2008 R2で最初にサポート-は、nullビットマップ圧縮と呼ばれるものを導入しました。

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

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

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

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


2

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

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

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


1

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


あなたの最初の文はこのコメントによく似ています。
アーロンバートランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.