none
SQLServerのデータ通信量を抑えたい RRS feed

  • 質問

  • Sqlserverを使ったアプリケーションがるのですが、データ通信量が多くて困っています。

    私はそのアプリを作ったわけでもなくデータベースのこともよく知らないのですが

    通信内容をキャプチャするとTDSというTCPベースのプロトコルと、単なるTCPの

    パケットが飛び交っており、後者のデータ量が特に多い。

    後者のパケットのデータ部を覗き見たらどうやらSQLクエリに対する応答データが文字列

    平文でドバーッと入っている様子。

    SQLServerの設定を変えるなどのやり方で、アプリを弄らずにデータ転送時だけ圧縮する

    とかできないでしょうか?

    2017年6月13日 2:07

すべての返信

  • 圧縮は無理だと思います。平文を暗号化して通信する方法はありますが、通信そのものを圧縮するというのは聞いたことがありません。せめてやれるとすればクライアントとやり取りするネットワークパケットサイズの変更ぐらいでしょうか?
    ただ、これは以下のページにも書かれていますが、SQL Server全体の設定変更になりますし、多くの場合はデフォルトの4096が最適ですので、もし変更するのであれば慎重に検討して下さい。

    network packet size サーバー構成オプションの構成
    https://msdn.microsoft.com/ja-jp/library/ms177437.aspx

    本来であれば、ストアドプロシージャ化したり、テーブル値パラメータを使うなどして、SQL Serverとのやり取りを減らすべきでしょう。ただし、今回のケースに当てはまるかどうかは十分に検討する必要があります。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年6月13日 2:42
  • 回答ありがとうございます。

    頂いた情報を頼りに調べを進めてみます。

    2017年6月13日 2:52
  • SQLServerとの接続をSSL経由にすれば、暗号化の副作用で圧縮されたりしませんかね?

    jzkey

    2017年6月13日 3:06
  • 圧縮機能はありませんし、仮に機能があったとしても無意味です。

    データベースは一般的に適宜レコードが追加されていくものですが、追加されればその分のデータ通信量が増加します。何らかの圧縮機能でデータ通信量を一時的に半減できたとしても、この増加によってすぐに元の通信量を超えてしまうことでしょう。というのもデータ通信量を意識せずに設計されたアプリであれば、レコード数に比例程度では済まずにO(n^2)などのオーダーの可能性が高いためです。

    結局、アプリをいつ修正するかの違いでしかないと思います。そのための時間稼ぎということであれば、例えば10GbEで通信速度を10倍にしてみるとか。(既に導入済みでしたらすみません。)

    2017年6月13日 3:19
  • 回答ありがとうございます。

    言葉足らずで失礼致しましたが、当該DBはデータが蓄積されてどんどん大きくなっていくタイプの

    ものではないのでその点については心配ありません。

    とはいえ反応頂けて大変感謝致します。

    2017年6月13日 8:53
  • 回答ありがとうございます。

    ありえますよね、検討してみます。

    2017年6月14日 0:11