問題タブ [mvcc]

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.

0 投票する
1 に答える
57 参照

postgresql - Postgres はどのようにセカンダリ インデックスをアトミックに更新しますか?

トランザクションが変更を実行すると、Postgres mvcc スキームが更新されたデータと関連するバージョンを含む新しい行を保存することを理解しています。

他のトランザクションは、表示すべきバージョンを認識しており、適切な行を選択します。

また、テーブルのプライマリ インデックスには行のすべてのバージョンが格納されることも理解しています。プライマリ インデックスを更新する方法を確認できます (書き込み用にロックし、行を追加し、ロックを解除します。これがどのように機能するかはわかりませんが、可能性のある方法です)。

しかし、Postgres はどのようにしてセカンダリ インデックスをアトミックに更新するのでしょうか? トランザクションがコミットされると、行の新しいデータですべてのインデックスを更新する必要があると思います。

Postgres はすべてのセカンダリ インデックスのロックを取得してアトミックに更新していますか? その場合、ロックの粒度はインデックス レベルですか、それとも値レベルですか (特定の値のインデックスの一部のみをロックします)?

InnoDB のような他の DB エンジンでもアプローチは同じですか?

おもちゃの DB を構築していますが、セカンダリ インデックスを効率的に更新する方法を理解するのに苦労しています。このトピックに関する論文も大歓迎です!

どうもありがとう!

0 投票する
0 に答える
26 参照

php - postgresql トランザクション状態でのデバッグ

Doctrine を ORM として使用する PHP で記述されたアプリケーションがあり、単一のデータベース トランザクション内で一連のコードが実行されます。トランザクションがコミットされると、多くのクエリが実行されます。postgresで「ダーティリード」を利用する方法はありますか?

MySQL では、組み込みの PHPStorm データベース ツールを使用して、コードのデバッグ中にデータベースの状態を表示していました。ただし、これは PostgreSql には当てはまりません。これは、この RDMS の「コミットされていない読み取り」分離レベルではダーティ読み取りが許可されていないためです。データベースの現在のトランザクション状態を表示できないため、これは本当に問題になります。

これは異常な質問であることは承知しており、本番環境では Read uncommitted 分離レベルを使用しませんが、クライアント コードのデバッグには不可欠です。何かお役に立てることがあれば、よろしくお願いいたします。