目次
SELECT
INSERT
DELETE
UPDATE
ホームページ データベース mysql チュートリアル InnoDB MVCC の仕組みを理解する

InnoDB MVCC の仕組みを理解する

Oct 10, 2020 pm 05:51 PM

InnoDB MVCC の仕組みを理解する

InnoDB の MVCC は、レコードの各行の背後に 2 つの非表示列を保存することによって実装されます。これら 2 つの列のうち、1 つは行の作成時刻を保持し、もう 1 つは行の有効期限 (または削除時刻) を保持します。もちろん、保存されるのは実際の時間値ではなく、システムのバージョン番号です。新しいトランザクションが開始されるたびに、システムのバージョン番号が自動的に増加します。トランザクションの開始時のシステム バージョン番号は、トランザクションのバージョン番号として使用され、クエリされたレコードの各行のバージョン番号と比較するために使用されます。MVCC が反復読み取り分離レベルでどのように動作するかを見てみましょう。

SELECT

InnoDB は、次の 2 つの条件に従って各行レコードをチェックします

a. InnoDB は、現在のトランザクションより前のバージョンのデータ行のみを検索しますversion (つまり、行のシステム バージョン番号がトランザクションのシステム バージョン番号以下である)、これにより、トランザクションによって読み取られた行が、トランザクションの開始前にすでに存在しているか、挿入されているかが保証されます。トランザクション自体によって変更されます。

b. 行の削除されたバージョンは未定義であるか、現在のトランザクションのバージョン番号より大きいです。これにより、トランザクションによって読み取られた行が、トランザクションの開始前に削除されていないことが保証されます。

上記の 2 つの条件を満たすレコードのみがクエリ結果として返されます。

INSERT

InnoDB は、現在のシステム バージョン番号を、新しく挿入された各行の行バージョン番号として保存します。

DELETE

InnoDB は、現在のシステム バージョン番号を保存します削除された行ごとに、システムのバージョン番号が行削除識別子として機能します。

UPDATE

InnoDB は、新しいレコード行を挿入し、現在のシステム バージョン番号を行バージョン番号として保存し、現在のシステム バージョン番号を行削除識別子として元の行に保存します。

ほとんどの読み取り操作をロックせずに実行できるように、これら 2 つの追加のシステム バージョン番号を保存します。この設計により、データ読み取り操作が非常にシンプルになり、パフォーマンスが非常に向上し、また、規格を満たす行のみが確実に読み取られるようになります。欠点は、レコードの各行に追加の記憶域スペース、より多くの行チェック作業、および追加のメンテナンス作業が必要になることです。

MVCC は、REPEATABLE READ (反復可能読み取り) と READ COMMITTED (読み取りコミット) の 2 つの分離レベルでのみ機能します。 READ UNCOMMITTED は、現在のトランザクション バージョンに準拠するデータ行ではなく、常に最新のデータ行を読み取るため、他の 2 つの分離レベルは MVCC と互換性がありません。 SERIALIZABLE は、読み取られたすべての行をロックします。

関連する学習の推奨事項: mysql データベース

以上がInnoDB MVCC の仕組みを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

MySQLでデータベースアクティビティを監査する方法は? MySQLでデータベースアクティビティを監査する方法は? Aug 05, 2025 pm 01:34 PM

usemysqlenterpriseauditpluginifenterpriseeditionbyEnablingItinconIntinconserver-audit = force_plus_permanentandcustomizeventsviaserver_audit_events;

財務データストレージのためにMySQLを最適化します 財務データストレージのためにMySQLを最適化します Jul 27, 2025 am 02:06 AM

MySQLは金融システムに最適化する必要があります。1。財務データを使用して、10進数タイプを使用した精度を確保する必要があり、タイムゾーンの問題を回避するために時間分野でデータを使用する必要があります。 2。インデックス設計は合理的でなければなりません。フィールドの頻繁な更新を避けてインデックスを構築し、クエリの順序でインデックスを組み合わせ、定期的に役に立たないインデックスをクリーンにします。 3.トランザクションを使用して、一貫性を確保し、トランザクションの粒度を制御し、長いトランザクションを回避し、それに埋め込まれた非コア操作を回避し、ビジネスに基づいて適切な分離レベルを選択します。 4。時間ごとに履歴データを分割し、コールドデータをアーカイブし、圧縮テーブルを使用してクエリ効率を向上させ、ストレージを最適化します。

オブジェクトレベルの特権でMySQLを保護します オブジェクトレベルの特権でMySQLを保護します Jul 29, 2025 am 01:34 AM

Tosecuremysqleffectivilly、useobject-levelprivilegestolimituseracesseracessbadeds.beginbyunderstanding thatobject-leveligesapplytodatabases、Tables、orcolumns、subfice finercontrolthangloblabliledeges.next、適用

リアルタイムのデータフィード用にMySQLを最適化します リアルタイムのデータフィード用にMySQLを最適化します Jul 26, 2025 am 05:41 AM

tooptimizemysqlforreal-timedatafeeds、firstchoosetheinnodbstorageentionsionsionsionsionsionsionsionsionsionsdrow-fortemporarydata、およびpartitiontime-seriesdatabytime.second、indextrategivallyは、dexestowhere、

大規模なMySQLテーブルを管理するためのベストプラクティス 大規模なMySQLテーブルを管理するためのベストプラクティス Aug 05, 2025 am 03:55 AM

大規模なテーブルを扱う場合、MySQLのパフォーマンスと保守性が課題に直面し、構造設計、インデックス最適化、テーブルサブテーブル戦略などから開始する必要があります。オーバーレイインデックスを使用して、クエリ効率を向上させます。スロークエリログを定期的に分析し、無効なインデックスを削除します。 2。パーティションテーブルの合理的な使用:クエリとメンテナンスの効率を改善するための時間範囲やその他の戦略に従ってパーティションをかけますが、分割と削減の問題に注意を払う必要があります。 3.分離とライブラリの分離の読み取りと書き込みを検討してください。ライブラリの分離とテーブルの分離は、大量のデータを備えたシナリオに適しています。ミドルウェアを使用して、トランザクションとクロスストアのクエリの問題を評価することをお勧めします。早期計画と継続的な最適化が重要です。

雲の移行のためのMySQLデータベースコストベネフィット分析 雲の移行のためのMySQLデータベースコストベネフィット分析 Jul 26, 2025 am 03:32 AM

MySQLがクラウドに移動する価値があるかどうかは、特定の使用シナリオに依存します。あなたのビジネスを迅速に立ち上げる必要がある場合は、弾力的に拡張し、運用とメンテナンスを簡素化し、従量制のモデルを受け入れることができます。ただし、データベースが長期間安定している場合、レイテンシに敏感な、またはコンプライアンスの制限が制限されている場合、費用対効果が高い場合があります。コストを管理するためのキーには、適切なベンダーとパッケージの選択、リソースの合理的な構成、予約されたインスタンスの利用、バックアップログの管理、クエリパフォーマンスの最適化が含まれます。

Check Constraintsを使用してMySQLのデータルールを実施する方法は? Check Constraintsを使用してMySQLのデータルールを実施する方法は? Aug 06, 2025 pm 04:49 PM

MySQLは、バージョン8.0.16から効果的なドメインの完全性を強制するためのチェック制約をサポートしています。 1.テーブルを作成するときに制約を追加する:createTableを使用して、18歳以上、給与> 0、部門の制限値などのチェック条件を定義します。 2。テーブルを変更して制約を追加します。AlterTableadDconstraintを使用して、名前以外の名前などのフィールド値を制限します。 3.複雑な条件を使用する:終了日≥の日付や完了ステータスなどのマルチカラムロジックと式のサポートは、終了日を持つ必要があります。 4。制約の削除:AlterTabledRopConstraintを使用して、削除する名前を指定します。 5。注:mysql8.0.16、innodbまたはmyisamを引用する必要があります

MySQLデータベースにタグ付けシステムを実装する方法は? MySQLデータベースにタグ付けシステムを実装する方法は? Aug 05, 2025 am 05:41 AM

useamany-to-manyrelationshipwithunctiontabletolinkitemsandtagsviathreetables:アイテム、タグ、anditem_tags.2

See all articles