8

私たちは、Azure データベースに対してマイクロ Orm を使用することにしました。私たちのビジネスは「挿入」と「選択」のみを必要とするため、すべてのコード管理を抑制することにしSqlTransactionました (データの同時実行の問題はありません)。

次に、Azure データベースのインスタンスの応答が非常に遅いことに気付きました。「rpc completed」イベントは、単純な sql ステートメントを実行するのに必要な時間の数百倍の遅延で発生しました。

次に、コードを EF6 でベンチマークしたところ、サーバーが非常に迅速に応答することがわかりました。EF6 は組み込みのトランザクションを実装しているためSqlTransaction、マイクロオームで (ReadCommited) を復元することにしましたが、すべて問題ないことがわかりました。

Azure Database には明示的なSqlTransaction(コードによって管理される) が必要ですか? SqlTransactionAzure データベースのパフォーマンスにどのような影響がありますか? なぜそのように実装されたのですか?

編集: トレースを収集した方法について、より正確な情報を投稿します。Azure イベント ログは、ナノ秒単位、ミリ秒単位で表示されることがあるようです。とても奇妙に思えます。

4

1 に答える 1

1

あなたが何を求めているのかを正しく理解していれば、複数の SQL クエリを 1 つのトランザクションにバッチ処理すると、DBS でより良い結果が得られます。挿入/更新/削除のたびにコミットすると、そのために設計されていない DBS (MySQL の MyISAM など) で大きなオーバーヘッドが発生します。

やりすぎると、ディスクへの不適切なフラッシュやスラッシングを引き起こすことさえあります。私はかつてプログラマーに毎分何千ものエントリを自分の DB の 1 つにそれぞれ独自のトランザクションとしてコミットさせ、サーバーを停止させました。

MySQL で最も人気のある 2 つのデータベース フォーマットの 1 つである InnoDB は、1 秒間に 20 ~ 30 のトランザクションしかコミットできません (または 2 ~ 3 だったかもしれません... 長い間)。 ACID コンプライアンス。

于 2016-02-13T08:31:45.297 に答える