MYSQL ロック解除とロックテーブルの紹介

MYSQL ロック解除とロックテーブルの紹介

MySQL ロックの概要

他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純です。最も注目すべき特徴は、異なるストレージ エンジンが異なるロック メカニズムをサポートしていることです。たとえば、MyISAM および MEMORY ストレージ エンジンはテーブル レベルのロックを使用します。BDB ストレージ エンジンはページ レベルのロックを使用しますが、テーブル レベルのロックもサポートします。InnoDB ストレージ エンジンは行レベルのロックとテーブル レベルのロックの両方をサポートしますが、デフォルトでは行レベルのロックを使用します。

これら 3 種類の MySQL ロックの特徴は、大まかに次のようにまとめることができます。

オーバーヘッド、ロック速度、デッドロック、粒度、同時実行パフォーマンス

l テーブル レベルのロック: オーバーヘッドが低く、ロックが高速で、デッドロックがなく、ロックの粒度が大きく、ロック競合の可能性が最も高く、同時実行性が最も低い。
l 行レベル ロック: オーバーヘッドが高く、ロックが遅く、デッドロックが発生する可能性があります。ロックの粒度は最小で、ロック競合の可能性は最も低く、同時実行性は最も高くなります。
l ページ ロック: オーバーヘッドとロック時間はテーブル ロックと行ロックの中間です。デッドロックが発生する可能性があります。ロックの粒度はテーブル ロックと行ロックの中間で、同時実行性は平均的です。

MyISAM テーブルロック

MyISAM ストレージ エンジンはテーブル ロックのみをサポートします。これは、MySQL の最初の数バージョンでサポートされる唯一のロック タイプです。アプリケーションのトランザクション整合性と同時実行性に対する要件が高まり続けるにつれて、MySQL はトランザクションベースのストレージ エンジンの開発を開始しました。その後、ページ ロックをサポートする BDB ストレージ エンジンと行ロックをサポートする InnoDB ストレージ エンジンが徐々に登場しました (InnoDB は実際には別の会社であり、現在は Oracle に買収されています)。ただし、MyISAM テーブル ロックは依然として最も広く使用されているロック タイプです。このセクションでは、MyISAM テーブル ロックの使用について詳しく説明します。
クエリテーブルレベルのロック競合

システム上のテーブル ロックの競合は、table_locks_waited および table_locks_immediate ステータス変数を調べることで分析できます。
mysql> 'table%' のようなステータスを表示します。
+-----------------------+-------+
| 変数名 | 値 |
+-----------------------+-------+
| テーブルロック即時 | 2979 |
| テーブルロック待機数 | 0 |
+-----------------------+-------+
セット内の行数は 2 です (0.00 秒))
Table_locks_waited の値が比較的高い場合、テーブルレベルのロック競合が深刻であることを意味します。

InnoDB 行ロック競合ステータスを取得する

InnoDB_row_lock ステータス変数をチェックすることで、システム上の行ロックの競合を分析できます。
mysql> 'innodb_row_lock%' のようなステータスを表示します。
+---------------------------------+-------+
| 変数名 | 値 |
+---------------------------------+-------+
| InnoDB_row_lock_current_waits | 0 |
| InnoDB_行ロック時間 | 0 |
| InnoDB_行ロック時間平均 | 0 |
| InnoDB_行ロック時間最大 | 0 |
| InnoDB_行ロック待機 | 0 |
+---------------------------------+-------+
セット内の 5 行 (0.01 秒)
InnoDB_row_lock_waitsやInnoDB_row_lock_time_avgの値が高いなど、ロック競合が深刻であることが判明した場合は、

ロック解除

最初

プロセスリストを表示します。

ロック プロセスを見つけてその ID を強制終了します。

2番目

mysql>テーブルのロックを解除します。

テーブルをロックする

バックアッププロセス中にテーブルが更新されないようにデータテーブルをロックします。

mysql>LOCK TABLES tbl_name READ;

テーブルに書き込みロックを追加します。

mysql>LOCK TABLES tbl_name WRITE;

以下もご興味があるかもしれません:
  • Mysqlは実行中のトランザクションを照会し、ロックを待機する方法
  • 更新SQL文に基づくMySQLロックの理解
  • PHPはMySQLロックを使用して高同時実行性を解決する
  • PHP+MySQL の高同時ロックトランザクション処理問題の解決方法
  • MySQL のロックの仕組みと使用法の分析
  • MySQL でメタデータ ロックがブロックされている場所を確認する方法
  • MySQL ステートメントロックの実装の分析
  • Mysql は、デッドロック問題を解決するために kill コマンドを使用します (実行中の特定の SQL ステートメントを強制終了します)。
  • MySQL デッドロックのトラブルシューティング プロセスの完全な記録
  • MySQLのさまざまなロックの概念的理解

<<:  better-scrollプラグインのスライドできないバグについて(2021年プラグインで解決)

>>:  CentOS7 で jar アプリケーションの起動を設定する方法

推薦する

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

HTMLとは何ですか?

HTML 開発の歴史: HTML は英語で Hypertext Marked Language の...

ウェブ クラスターの Docker Stack 展開方法の手順

Docker はますます成熟し、その機能もますます強力になっています。 Docker Stack を...

Vue コンポーネント ライブラリ ElementUI はテーブル読み込みツリー データのチュートリアルを実装します

ElementUIは、参考のためにテーブルツリーリストの読み込みチュートリアルを実装しています。具体...

Docker 経由で wsl の tar ファイルを作成する方法

最近VScodeのリモート開発機能をいじっています。Dockerのコンテナに接続できるほか、WSLに...

Linux jdk のインストールと環境変数の設定チュートリアル (jdk-8u144-linux-x64.tar.gz)

最初にsudo suコマンドを使用して root アカウントに切り替えることをお勧めします。そうしな...

Centos 7.4 サーバーの時刻同期設定方法 [NTP サービスに基づく]

この記事では、CentOS 7.4 サーバーで時刻同期を構成する方法について説明します。ご参考までに...

union (all) と limit および exists キーワードの使用法を理解するための MySQL シリーズチュートリアル

目次1.union: クエリ結果を追加できます1) すべてを結合: 重複を削除できません2) ユニオ...

hr 水平線スタイルの例コード

コードをコピーコードは次のとおりです。 <hr style="width:490px...

Vue3 シングルファイルコンポーネントのスタイル機能の詳細な説明

目次スタイルスコープスタイルモジュール状態駆動型動的CSS要約するスタイルスコープ注意事項:スタイル...

Viteプロジェクトを作成する手順

目次序文yarn create は何をしますか?ソースコード分析プロジェクトの依存関係テンプレート構...

js と jQuery での Ajax の使用例の詳細

目次ネイティブJS GETリクエストの送信方法投稿リクエストの送信方法パラメータ付きのGETリクエス...

css-loader を使用して vue-cli で css モジュールを実装する

【序文】 Vue と React の CSS モジュール ソリューションはどちらも、実装にローダーに...

MySQLの構文、特殊記号、正規表現の詳細な説明

Mysql でよく使用される表示コマンド1. 現在のデータベース サーバー内のデータベースの一覧を表...

Oracle の開閉の 4 つのモード

>1 データベースを起動するcmd コマンド ウィンドウで、「sqlplus」を直接入力して ...