私は、データベース エンジンとして SQL Server 2008 を使用する Delphi で書かれたプログラムを持っています。私は 2 つの nano station m5 によって提供される p2p リンク上にいます。プログラム内で特定のクエリを実行すると、ネットワーク モニターには、クライアントが 6 秒間、8Mb/秒でサーバーからデータを取得していることが表示されます。
また、イーサネットケーブルでクライアントをサーバーに直接接続し、同じクエリを実行すると、同じデータが取得されますが、速度は速くなります(わずか2秒間、20MB/秒でデータを取得する)ただし、サーバーからクライアントに大きなファイルをコピーする場合、最大 55 MB/秒でコピーされます。
クライアント アプリケーションの実行速度が実際のネットワーク帯域幅の能力よりも遅くなるため、困っています。SQL Server に最大ネットワーク帯域幅を使用させる方法があるかどうか知りたいです。
Windows Server 2012 R2 および SQL Server 2008 が、TCP/IP ネットワーク プロトコルが有効で、100MB の全二重ネットワーク サーバー Core i5、8GB DDR 3、160GB SSD、ギガビット NIC で実行されています。
答え1
ファイルを転送するのと同じ速度は得られませんが、より高速になることは期待できます。
SQL プロファイラーを使用して、データベースへのクエリを記録します。結果を確認して、プログラムがメイン クエリに付随する不要なクエリを送信していないことを確認します。不要なクエリは、遅延により速度を低下させる可能性があります。理想的には、接続と 1 つのクエリだけを確認します。
また、Delphi プログラムに変更を加えることはできますか? できる場合は、接続プールを使用していることを確認してください。(接続を一度作成し、クエリを実行する必要があるときにそれを再利用します) SQL 接続自体には、交換されるパケットが約 16 個必要で、これにレイテンシを掛けると、合計で大きくなります。たとえば、レイテンシが 100 ミリ秒の場合、接続が完了するまでに 1.6 秒かかる可能性があります。