2016-10-18 3 views
-3

私は2つのアプリケーションを持っています。 1つは無限ループを持つように連続してデータベースにデータを挿入します。SQLサーバーはアプリケーション間でデータを並列にどのように挿入しますか?

2番目のアプリケーションが同じデータベースとテーブルにデータを挿入すると、何が起こるのですか。

これを処理する別のアプリケーションの挿入が完了するまで待ちますか?

それは忙しいと言いますか?

コードで例外がスローされますか?

+2

これは、トランザクションがあるかどうか、分離レベルは何か、クラスタ化インデックスは何か、挿入するデータの種類などによって異なります。インサートはテーブルの最小部分のみをブロックし、2番目のインサートが同じパーツに挿入されていない場合は、同時に実行されます。 –

+1

3つの異なるDBMSにタグを付けることはもちろん。答えはすべての人にとって同じではありません。 –

+0

ああ、SQL Server以上のものがあるかどうか見ていないので、あなたが何か他のものを使っているなら、私のコメントを無視して、正しいものだけをタグ付けしてください。 –

答えて

2

SQLサーバーには接続プールと呼ばれるものがあります。これは、データベースへの複数回の接続が特定の時刻に実行できることを意味し、簡単なビットが終了する場所です。

たとえば、同時に2つのアプリケーションでデータベースに接続し、各アプリケーションの異なるテーブルにデータを挿入する場合、2つのテーブルは同時に問題なく同時に実行できます。

しかし、それらのアプリケーションは、編集のようなものを同じ行をやってみたかった場合は、「ロック」との問題があります...

基本的にSQLデータベース上の任意の操作は、「セット」の「ロックの取得」が必要ですあなたのケースで何が起きるかを言うのは難しいでしょう。

したがって、簡単な答えは: はい、SQLは(挿入物のように)いくつかの節で同時に起こります。

そして、長い答え... は、ロックとデータベースとサーバーの構成に関する深い知識が必要です。

+0

しかし、ここでは最初のアプリケーションが連続して挿入されます。 2番目のアプリケーションは、クエリが来るまでにキューに入れられたり挿入されたりします。 – Louis

+0

これはトランザクションのようなものにも依存します...各ステートメントは "トランザクションログ"に入れられるトランザクションとして実行されますが、トランザクション内でステートメントをラップすると、それらは一度にすべてコミットされるか、まったくコミットされません。 2番目のアプリがテーブルをロックするのを待つ必要があるかもしれません。 – War

関連する問題