同時アクセスの場合、非反復読み取りやその他の読み取り現象が発生する可能性があります。高い同時実行性にうまく対処するために、ブロッキング、タイムスタンプ、楽観的同時実行性制御 (楽観的ロック)、および悲観的同時実行性制御 (悲観的ロック) が、同時実行性制御で使用される主な技術的方法です。 ロックの分類 ①、操作別:DMLロック、DDLロック ②、ロック粒度別:テーブルレベルロック、行レベルロック、ページレベルロック ③. ロックレベルによる分類:共有ロック、排他ロック ④. 施錠方法による分類:自動ロック、ディスプレイロック ⑤. 用途による分類:楽観的ロック、悲観的ロック 楽観的ロックと悲観的ロック 同時実行制御では、楽観的同時実行制御と悲観的同時実行制御が主に使用されます。楽観的ロックと悲観的ロックはリレーショナル データベースで使用されるだけでなく、Hibernate、Memcache などにも関連する概念があります。 悲観的ロック: 悲観的同時実行制御、悲観的同時実行コントローラーとも呼ばれ、PCC と略されます。悲観的ロックとは、データ処理プロセス中にデータがロックされることを意味し、通常はデータベース ロック メカニズムを使用して実装されます。 注意: MySQL で悲観的ロックを使用するには、MySQL の自動コミットをオフにして、autocommit=0 を設定する必要があります。 MySQL はデフォルトで自動コミット モードを使用します。つまり、更新操作を実行すると、MySQL は結果を自動的にコミットします。 たとえば、select...for updateメソッドを使用してデータをロックし、排他ロックを有効にします。 //0. トランザクションを開始します begin;/begin work;/start transaction; (3 つのうち 1 つを選択します) //1. 製品情報を照会します select status from t_goods where id=1 for update; //2. 製品情報に基づいて注文を生成する insert into t_orders (id,goods_id) values (null,1); //3. 商品のステータスを2に変更する t_goods を更新し、status=2 を設定します。 //4. トランザクションをコミットする commit;/commit work; 悲観的ロック 利点: 悲観的ロックは、データベースのロック機構を使用してデータ変更の順次実行を実装します。これは最も効果的な方法です。 デメリット: ロック メカニズムにより追加のオーバーヘッドが発生し、デッドロックの可能性が高まります。トランザクションが悲観的ロックでデータをロックすると、他のトランザクションはクエリ以外の操作をロックされたデータに対して実行できなくなります。トランザクションの実行時間が非常に長い場合、他のトランザクションは常に待機する必要があり、システムのスループットに必然的に影響します。 楽観的ロック 利点: 楽観的ロックではデータベースがロックされません。どのトランザクションでもデータを操作でき、更新時にのみ検証が実行されます。これにより、悲観的ロックによってスループットが低下するという欠点を回避できます。 デメリット: 楽観的ロックは手動で実装されるため、自社の業務にしか適用できません。外部トランザクションが挿入されるとエラーが発生する可能性があります。
MySQL の排他ロックと共有ロック 排他ロック 排他ロックは書き込みロックとも呼ばれます。トランザクション T が A に排他ロックを追加すると、他のトランザクションは A にいかなる種類のロックも追加できなくなります。排他ロックが付与されたトランザクションは、データの読み取りと書き込みの両方を行うことができます。 使用法: SELECT ... FOR UPDATE 共有ロック 共有ロックは読み取りロックとも呼ばれます。トランザクション T が A に共有ロックを追加した場合、他のトランザクションは A に共有ロックのみを追加でき、他のロックを追加することはできません。共有ロックが付与されたトランザクションは、データの読み取りのみ可能で、データの書き込みはできません。 使用法: SELECT ... LOCK IN SHARE MODE; MySQL の行レベル ロック、テーブルレベル ロック、ページレベル ロック 行レベル ロック: 行レベル ロックは、共有ロックと排他ロックに分けられます。行レベル ロックは、MySQL で最もきめ細かいロックです。 InnoDB エンジンは、行レベルのロックとテーブルレベルのロックをサポートしています。行レベルのロックは、インデックス条件を通じてデータが取得される場合にのみ使用され、それ以外の場合はテーブルレベルのロックが使用されます。行レベルのロックは、オーバーヘッドが高く、ロックの追加が遅く、ロックの粒度が最小で、ロック競合の可能性が最も低く、同時実行性が最も高くなります。 テーブル レベル ロック: テーブル レベル ロックは、テーブル共有ロックとテーブル排他ロックに分けられます。テーブルレベルのロックは、オーバーヘッドが低く、ロックが高速で、ロックの粒度が大きく、ロックの競合が最も多く、同時実行性が最も低いという特徴があります。 ページ レベル ロック: ページ レベル ロックは、MySQL のロックの一種で、ロックの粒度は行レベル ロックとテーブル レベル ロックの中間です。テーブル レベルのロックは高速ですが競合が多く、行レベルのロックは競合が少ないですが低速です。したがって、隣接するレコードのグループを一度にロックするために、妥協的なページ レベルが採用されます。 BDB はページレベルのロックをサポートしています。 オーバーヘッドとロック時間はテーブルロックと行ロックの間であり、デッドロックが発生する可能性があります。ロックの粒度はテーブルロックと行ロックの間であり、同時実行性は平均的です。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux の Docker コンテナで bash を終了する 2 つの方法
>>: Vueはドラッグアンドドロップを使用して構造ツリーを作成します
MySQL には、複数の .sql ファイル (SQL ステートメントを含む) をインポートする方法...
1. オンラインテキストジェネレーターBlindTextGenerator: デザイナーにとって、こ...
この記事では、価格カレンダー効果を実現するためのVueの具体的なコードを例として紹介します。具体的な...
目次結合構文: 1. InnerJOIN: (内部結合) 2. LeftJOIN: (左結合) 3....
LinuxにMySQLがすでにインストールされているかどうかを確認する sudo service m...
FOUC は Flash of Unstyled Content の略で、FOUC と略されます。簡...
目次1. 従来のコレクションに対するフィルター、マップ、および削減処理方法2. 再帰処理3. for...
WeChatアプレット計算機の例、参考までに、具体的な内容は次のとおりです。インデックス.wxml ...
MySQL データベースでは、null は一般的な状況です。MySQL での null に関する注意...
序文前回の記事では、主にグリッドシステムの基本原理を学び、簡単なケースを通してその原理を実践しました...
関連記事: MySQL8.0.20 インストール チュートリアルとインストールの問題に関する詳細なチ...
tbody 要素は、thead 要素および tfoot 要素と組み合わせて使用する必要があります...
Linux に puppeteer をインストールするときに、次の問題が発生する可能性があります。こ...
sshツールをインストールする1. ターミナルを開き、次のコマンドを入力します。 apt-getアッ...
まずpostcss-pxtoremをインストールします: npm install postcss-p...