問題タブ [read-uncommitted]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - クエリ レベルでの NOLOCK
SQL サーバー テーブルを実行するためのクエリがありますが、正確な数は気にしません。そこで、そのクエリに NOLOCK を指定したいと思います。ただし、クエリ自体は複数のサブクエリと複数の結合で構成されています。だから、NOLOCKをあちこちに置くのはかなり汚いです。
ただし、テーブルのトランザクション レベル「READ-UNCOMMITTED」を設定することはできますが、他のすべてのクエリでも同様に変更されます。その特定のクエリのトランザクション レベルを変更したいのですが、複数の場所でクエリに NOLOCK を指定する必要はありません。それは可能ですか?
sql-server - データベースに送信せず、変更されたデータを選択する方法
複数のテーブルを持つデータベースがあります
また、ユーザーはテーブル内のデータを変更できます。
私の問題は、ユーザーが「保存」ボタンをクリックするまでデータベースで何も変更されないことです。ユーザーがクリックしても、保存することにしたテーブルのみを送信します
ただし、それまでの間、ユーザーは自分が行ったすべての変更を確認できる必要があります。そして、すべての「選択」は、ベースデータではなく、変更されたデータを彼に与える必要があります。
一方ではデータベースにデータを送信せず、他方では変更されたデータをユーザーに表示するにはどうすればよいですか?
私はトランザクションを実行し、送信しないことを考えました(そしてコミットされていない読み取りを使用します)が、そのために接続を閉じる必要はありません(送信せずに閉じると、すべての変更がキャンセルされます)。の接続が開いています。
また、すべての変更のリストを作成し、ユーザーが選択するたびに、最初にリストから検索することも考えました。しかし、それは非常に複雑であり、私は単純な解決策を好みます
ありがとうございました
mysql - MySQL InnoDB は Read Uncommitted 分離レベルをどのように実装しますか
Oracle はダーティ リードを許可していないため、Read Uncommitted を JDBC から設定することさえ許可されていません。
PostgreSQL は、Read Uncommitted を選択すると、Read Committed にもフォールバックします。
SQL Server は Read Uncommitted 分離レベルを定義します。これは、同時実行制御モデルがロックに基づいているため (2 つのスナップショット分離レベルに切り替えない限り)、そうでないレポートのロックを回避することでパフォーマンス上の利点が見られる唯一のデータベースである可能性があります。本当に厳密な一貫性が必要です。
InnoDB も MVCC を使用していますが、Oracle や PostgreSQL とは異なり、ダーティ リードが可能です。なぜそうなのですか?ロールバック セグメントから以前のバージョンを再構築する代わりに、最新バージョンに直接移行することでパフォーマンス上の利点はありますか? ロールバック セグメントのクエリ時間の復元は、ダーティ リードを許可する必要があるほど集中的なプロセスですか?
sql-server - SQL Server 長時間実行トランザクション
接続で開始トランザクションを実行し、すぐにデータベースに行を更新/挿入し、このトランザクションを数時間ハングさせると、リソースがどれほど高価になるのか疑問に思っています。基本的に、ドキュメント管理システムの「シリーズ番号」予約を実行したいだけです。私のシリーズは非常にカスタムなものであり、ユーザーが「新しいドキュメントの追加」ボタンを押すたびに、次の値がシリーズ割り当てテーブルに割り当てられるようにしたいと考えています。それを割り当てるには、割り当てテーブルに行を挿入します。次回、新しいユーザーが次の値を要求すると、NOLOCK ヒントを使用して読み取られるため、保留中の挿入された値が表示され、次の値もわかります。ユーザーが新しいドキュメントを追加するフォームをキャンセルした場合、開いている接続に対して単純にロールバックを実行します。接続が失われ、「追加」モードになっている場合は、シリーズを割り当てた現在のトランザクション ID が現在のものと一致するかどうかを確認します。そうでない場合は、別のものを割り当てます。接続が失われたためにユーザーがシリーズを失うという問題はありません。どう思いますか?これは、私が数年間のソフトウェア開発で学んだ考え方と矛盾しているため、非常に悪い習慣のように感じます。
前もって感謝します!
sql - Oracle SQL: 結合ステートメントの NOLOCK
結合ステートメントでテーブル名の後に NOLOCK を使用できません。JOINを介してコミットされていないデータを読み取ろうとすることは有効なシナリオですか?
sql-server - SET TRANSACTION 分離レベル READ uncommitted - トランザクションの開始と終了を明示的に使用する必要がありますか?
以下のクエリは機能しますか、それともトランザクションの存在と終了を明示的に使用しますか?
はい、コミットされていない読み取りの危険性を知っています