0

いくつかのドキュメントをSQL ServerデータベースVarBinary(Max)列に保存します。ほとんどのドキュメントは数KBになりますが、時には数MBになることもあります。SQL AzureでVarBinary(max)の更新が非常に遅い

ファイルが約4MBを超えると問題が発生します。

オンデマンドSQL ServerのVarBinary列を更新すると、非常に高速です(8MBファイルの場合は0.6秒)。

SQL Azureの同じデータベースで同じステートメントを実行すると、15秒以上かかることがあります。

また、コードがAzure Appサービスから実行されている場合、それは非常に遅いです。だから私たちのインターネット接続は問題ではありません。

私はSQL Serverにファイルを格納するのが好ましい方法ではなく、BLOBストレージが通常は最高の解決策であると知っていますが、これを行う特別な理由がありますので、 )

実行計画を調べるとき、私はいつも "テーブルスプール"を見て、私はなぜそれがわかりません。以下はオン・プレミアムとAzureの実行計画です。

同一のデータベースとデータ。誰かが助けることができれば、それは素晴らしいことでしょう。

おかげクリス

Execution On Prem SQL

Execution on SQL Azure

+1

質問をdba.stackexchange.comに投稿してください – sepupic

+0

テーブルスキャン、Idのインデックスなし? –

+0

こんにちは@TapakahUa、あなたのコメントありがとうございます。 5つのレコードだけを持つテーブルなので、欠落しているインデックスは問題ではありません。インデックスの更新(および統計情報)が原因であることを除外したいので、インデックスを削除しました。それは実際のテーブルにあります。テーブルスキャンはわずか0.004秒です。 – Christian

答えて

4

テーブルスプール演算子は、(tempdb内)更新する行をキャッシュし、次いでテーブル更新オペレータに供給する、スプール演算子は符号でありますデータベースエンジンがTempDBに対して多数の書き込み(8 KBページ)を実行していることを確認します。

I/O集約型のワークロードの場合は、プレミアム層に拡張する必要があります。基本層と標準層では、これらの更新では優れたパフォーマンスは得られません。

これが役に立ちます。

+0

ありがとうございます@アルベルト。答えとして – Christian

+0

と記念素晴らしい一日を!ありがとうございました! –

関連する問題