-
21-09-2019 - |
質問
このある潜在的な並行処理で課題をDBになって読みます。見 http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0005267.htm とて言及したアクセスを未確定のデータです。
アクセスを未確定のデータです。アプリケーションでは、が更新値 データベースに、Bが 読み取る前の値で ている。そして、その価値は なが担保で、 の計算を行ったB に基づく未確定の(変や想定外のショックが発生する蓋然 無効なデータが得られます。
どう---と思ったその他のセッション(アプリでも同じスレッドでデータの読み取りをされていない為ですか。と思ったのみでの接続はセッションをはずしの用語)を書き出してしまっていたのデータ、未確定取引で未確定のデータです。
でほかのスレッドも読み取るデータセンター社?私の使っsqlite
解決
どのような他のセッションを読むことができることは、あなたのデータベースの設定方法によって異なります。 MySQLでは、それはまた、あなたが使用してどのようなデータベースエンジンに依存します。 (ANSI SQL用語で)あなたが探している用語は、「分離レベル」。
多くのデータベースはブロックされますコミットされていないデータを読み込んで分離レベルがデフォルトになります。だから、Aはそれらのもののいずれかを実行するまで、Bはブロックします当時Aのコミットやロールの前に、レコード1234を選択するためのトランザクションAの更新テーブルTのレコード1234と、トランザクションBがしようとした場合。
を参照してください<のhref = "http://www.databasejournal.com/features/mysql/article.php/3393161/MySQL-Transactions-Part-II---Transaction-Isolation-Levels.htm" のrel =」 nofollowをnoreferrer "> MySQLの取引、パートII - 。トランザクション分離レベルを
このの一つの重大な欠点は、長時間実行されるトランザクション(通常)でのライブは、潜在的に多くの要求をブロックすることができるということ、バッチ更新処理である。
Bがコミットされていないデータが表示されますが、それは多くの場合、無分別であるようです。また、それを設定することができます
別の方法としては、 MVCC の( "マルチバージョンの同時実行制御")と呼ばれる方式を使用することができ、その異なるトランザクションにトランザクションが開始された時刻に基づいて、データの一貫性のあるビューを提供します。これは、(バック圧延することができるデータの読み取り)非コミット読み取りの問題を回避し、特に長命トランザクションのコンテキスト内で、はるかにスケーラブルです。
他のヒント
確かにSQL Serverのあなたは、あなたがそれを行うために選択することができ、それはデフォルトではありませんが、あなたは右の分離レベルまたはクエリヒントを使用する場合は、コミットされていない行を読むために選ぶことができ、この缶リード問題へと理論的には同じ行であっても、二重読み取ります。
この記述のアクセスを未確定のデータとしての問題 除 のデータベースマネージャ。
データベースの統るこ アクセス防効果 など
...
- アクセスを未確定のデータです。
MySQLのInnoDBストレージエンジンに対応し複数のトランザクション遮断レベル.詳細 http://dev.mysql.com/doc/refman/5.4/en/set-transaction.html.
、コミットされていない読み取ることができるようにクエリを設定するには、理由低下ロック、パフォーマンスを向上させるであろう。セキュリティ、信頼性、およびスケーラビリティのこと、まだ葉の質問を回答する。
特定を与えるために、私は非常に大規模なeコマース・サイト上での作業に使用しました。彼らは、データが重く、アクセス頻度の低い変更し、コミットされていないデータを読み込むの懸念に敏感ではなかったので、読んでコミットされていないのは、店のカタログに読み込む使用しました。順序を置くために使用されたカタログからのデータはすべて、とにかく再検証になります。これは、ロックのパフォーマンス上の問題があることが知られていたSQL Server 2000の、上にありました。 SQL Serverの新しいバージョンに、ロック性能が向上しているので、これは必要ではない。