3

あいさつOverflowers、

  • 私の理解では(そして私が正しくないことを願っていますが)、インデックスへの変更をMVCC化することはできません。
  • コピーにはコストがかかる可能性があるため、これは大きなレコードにも当てはまるのではないかと思います。
  • レコードは(通常)インデックスを介してアクセスされるため、MVCCはどのように効果的ですか?
  • たとえば、インデックスはMVCCされたレコードのさまざまなバージョンを追跡しますか?

この主題に関する最近の良い読み物はありますか?本当に感謝 !

よろしく

4

1 に答える 1

5
  1. インデックス自体は、返される前に剪定できる両方のレコードを持つことができます。したがって、この場合、レコードを取得するために ondex だけを使用することはできません (MVCC は PostGres によって行われます)。InnoDB/Oracle は、データ/インデックスの 1 つのバージョンのみを保持し、元に戻すセクションを使用して、古いトランザクションの古いバージョンを再構築します。

  2. 定期的にコピーが (PostGres で) ガベージ コレクションされ、Oracle/InnoDB には、トランザクションが中止/コミットされたときに再利用される元に戻すセクションがあるため、DB が一般的に使用されている場合、コピーが多すぎることはありません。実行時間の長いトランザクションが多すぎると、明らかに問題が発生します。

  3. インデックスは、アクセスを高速化し、すべてのレコードに触れることなく、より速くレコードを見つけるためのものです。インデックスは最初のパスで正確である必要はありません。タプルを調べて、特定のトランザクションで有効かどうかを確認する必要がある場合があります (PostGres のように) )。racle または InnoDB でさえインデックスがバージョン管理されているため、インデックス自体からデータを取得できます。

これを読んで、MVCC を実装する 2 つの方法 (PresGres と Oracle/InnoDB) の詳細を理解してください。

InnoDB MVCCここのコメントも役に立ちます

PS: 私は mysql/oracle/postgres 内部の専門家ではなく、まだ仕組みを学んでいます。

于 2011-03-03T19:54:53.863 に答える