[再印刷]のPostgreSQL、オラクル/ MySQLとSQL ServerのMVCC実装原則道

PostgreSQLのは、Oracle / MySQLとSQL ServerのMVCC実装原則道

HTTPS:// www.jdon.com/repository/database-mvcc.html

 

  リレーショナルデータベース管理システムは、書き込みの同時実行の問題読み出し動作を目詰まり回避する機構MVCC(マルチバージョン並行処理制御マルチバージョン同時実行制御)を使用し、MVCCは同時読み取りおよび書き込みのコンフリクト、異なるデータベースを確保しないようにデータの複数のバージョンを使用することです異なる実装があり、これは、人々が快適に感じる操作するための標準的なSQL文を使用して、データベース・システムの頭痛、関係データベースの表面ルックスは非常に単純なところですが、同時ユーザーの増加のシステムのサイズの増加に伴い、パフォーマンスのデータベースが存在します現象を軽減し、我々は微調整内部原則の深い研究に外部から入力する必要があるかもしれませんし、各内部データベースの同時実行性の原則は、我々は異なるデータベースの数を持っている場合、あなたは別のチューニングを必要とする、異なっていますこの方法は、コアデータベースの生産システムが少ない安心になったとして、この時間は、この記事では、異なる実装MVCCの内部市場いくつかの一般的なデータベースを提供します。

 

MVCCの二つの異なる実装

  最初の実装は、データのこれらの異なるバージョンがもはやこれらのレコードを回復するために、ガベージコレクタが必要とされる場合、データベースに格納されたデータレコードのバージョンの複数ではありません。このアプローチは、PostgreSQLとのFirebird / Interbaseのは、SQL Serverは、古いバージョンのデータがデータベースに格納されていないことを除いて、メインデータベースのtempdbから別別に格納されたデータベースを同様のメカニズムを使用採用されています/

  OracleとMySQLの/ InnoDBの使用により、このように、アンドゥを使用する場合にのみデータが、動的再構成古いバージョンのデータをデータベースに保存されている最新バージョンの第2の実施。

  特定のデータベースの実装メカニズムで見てみましょう。

 

PostgreSQLのMVCC

  PostgreSQLの行が更新された場合、データの線(以下タプル)の新しいバージョンが作成され、テーブルに挿入され、新しいバージョンの以前のバージョンへのポインタ「期限切れ」の有効期限が切れたように、以前のバージョンがマークされているが、また、失われたガベージコレクタの再利用まで、データベースに残ります。

複数のバージョンをサポートするために、各タプルは、以下の追加データレコードがあります。

  • このタプルトランザクションIDを作成するための挿入および更新の記録 - XMIN
  • XMAX - 削除レコードまたは取引のタプルまたは削除レコードの新しいバージョンを作成します。最初のフィールドはnullです。

トランザクションの状態は、CLOGこのテーブルに$データ/ pg_clogに格納された状態が進行中があり、各トランザクションの状態情報の2つのバイトが含まれ、コミット、または   中止されました。トランザクションの終了は、PostgreSQLデータベースをロールバック変更レコードを元に戻すことはありません場合は、トランザクション内のそれだけCLOGマークが中止される。A PostgreSQLのテーブルには、多くのそのような中止された終了データトランザクションが含まれていてもよいです。

真空クリーンアップ意志の提供と呼ばれるプロセスは、ガベージコレクタの有効期限が切れた/中断された終了レコードバージョンを満了し、掃除機もタプルインデックス関連の項目を削除ゴミをリサイクルしています。

それが表示されているときXMINのXMAXのタプルは、有効と無効です。「有効な効果的な」手段「にコミットまたは現在のトランザクションの代わりにどちらか。」繰り返し動作CLOGテーブルを避けるために、PostgreSQLはタプルは「コミット知られている」または「知ら中止さ」されているかどうかを示すために、タプルにステータスインジケータを維持します。

 

オラクル的MVCC

  オラクルは、(「アンドゥログ」である)古いバージョンロールバック・セグメントに格納され、トランザクションIDは、数字のシーケンスではなく、一連の数により、これらの数字は、業務のヘッド溝ロールバック(スロット)を指し。新しいトランザクション・ロールバックがストアに再利用することができることを確認し、再利用が送信されたか、古いトランザクションの終了は、トランザクションスロットを使用し、この自動再利用の仕組みは、Oracleロールバックセグメントの限定された使用は、多数のトランザクションを管理することができます。

ロールバックトランザクションヘッダブロックが、しかし、それぞれのページを保存することにより、システム変更番号またはSCN、ページに格納されていない各レコードのOracleトランザクションIDと呼ばれているトランザクションの状態を保存し、テーブルとして使用されています一緒にユニークなトランザクションIDはスペースを節約するために使用された配列行の配列を維持するために、配列に格納されたレコードのみをオフセット、および各トランザクションIDがページを作成し、最後のトランザクションレコードを元に戻すポインタであるオフセット、テーブルレコードではありませんこのようストアでは、インデックスレコードは、OracleとPostgreSQLの主な違いの一つであり、同じ技術を使用しています。

場合は、Oracleトランザクションを開始する、それが業務SCNの現在の状態をマークします。テーブルやインデックスページを読み込む場合、ページを含めるかどうかを決定するために、Oracle SCN番号を使用して、Oracleによって、知られている現在のトランザクションのトランザクションの結果に影響を与えることは許されるべきではありませんトランザクションの状態を確認するために関連付けられているロールバックヘッドを探しますが、時間を節約するために、最初の時間は、実際のクエリのトランザクションでページ場合、クエリは、その状態が後で再クエリを避けるために、ページ内に記録されます完了これは、各トランザクションを元に戻すような効果により、ページの再作成古いバージョンにトランザクションの目に見える影響は、Oracleが含まれていないことが判明しました。これは、スキャンし、各トランザクションに関連するレコードは、これらの取引の影響は完全に効果が除去された後に適用されるすべてのそれらのトランザクションは、新しいページがこの方法で作成されるまでページに適用して、タプルにそれらにアクセスするために使用されます。

Oracleの記録ヘッドは:
記録ヘッドは固定サイズの非クラスタ化テーブルのために、常にある、増加しない、記録ヘッドが3バイトで、1つのバイトは、バイトを表示するため、店舗識別に使用されていますレコードが(例えば、更新、コミットを提出してくださいではありません)ロックされているかどうか,,列のバイト数。

 

MVCC SQL Serverの

  SQL Serverのデータベースレコードのバージョンが実装スナップショットアイソレーション内で使用するとコミット読み取りは、唯一このデータベースがオープンになり、対応する間接費を生産する必要があります。

レコードは、行のバージョンベースのトランザクションは、効果的に打ち上げバージョンにコピーオンライトメカニズムを使用して、過去から同じデータの存在する様々なバージョンの前と後の効果「を参照するビュー」をすることができます変更または削除された場合。

より具体的にはバージョンストアに格納されている行バージョンのバージョンレコード、メインデータベース外部のtempdbデータベースに存在し、そして、レコードまたはテーブルのインデックスが変更されると、新しいレコードが「変更を行うトランザクションを伝送しますSEQUENCE_NUMBER。バージョンバージョン」で、「複数の長期実行時間の長いトランザクションが存在し、複数を必要とする場合は、古いバージョンのレコードは、レコードの店舗の古いバージョンへのポインタを含む新規レコードに格納されたバージョンにコピーされます」バージョンストアは、以前のレコードポインタへのポインタを含むことが記録します。

SQL Serverののクリア格納されたバージョン:
SQL Serverの自動ストレージ管理バージョンのサイズ、バージョンストアのバージョンのレコード数があまりにも長い間、必要以上にならないことを保証するために、明確なスレッドを維持するには、クエリは、のためにスナップショット分離の下で実行されているバージョンストアのバージョンを記録しておきますトランザクションが完了していない、そしてデータを変更するトランザクションの必要性がREAD COMMITTEDスナップショット分離の下で実行されているSELECT文の完成いかなる声明に含まれる、記録上の特別版がもはやSELECTステートメントの実行が完了したら、必要になるまでデータを変更それは削除されます。

tempdbの空き容量がない場合は、SQL Serverがあれば、ディスクにスペースがない場合、ファイルは自動的に拡張することはできません、SQL Serverはバージョンの発生を停止します、私たちのプロファイルが自動的に増加していることを想定し、当然のファイルのサイズを大きく、クリアランスを呼び出しますこの理由は、スペースの制約の失敗するスナップショットクエリのバージョンを読んでする必要が発生します。

SQL Serverの記録ヘッド
4バイト
-メタデータレコード(レコードタイプ)の2バイト
-記録ビットマップ(固定列)に記録された2つの前方を向いNULLバイトビットマップオフセットの実際のサイズとの差。

バージョンスタンプバージョンタグが - これは必要動作のバージョンをサポートする場合、タイムスタンプを加えたタイムスタンプはtrasaction_seq_numberでのtempdbに格納されたバージョンへのポインタを含む、14バイトの構造体である、バージョン情報は、時間レコードに追加されます。

 

以下は、様々なデータベースの比較の概要は次のとおりです。

データベースのデータベースMVCC

おすすめ

転載: www.cnblogs.com/jinanxiaolaohu/p/12357147.html