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 アプリケーションの起動を設定する方法

推薦する

トラフィックの多いウェブサイト向けのソリューション

まず、サーバーのハードウェアが現在のトラフィックをサポートするのに十分かどうかを確認します。通常の ...

1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント

SQLはテーブル内の重複レコードをすべて見つけます1. テーブルには id と name の 2 つ...

背景画像にテキストを表示するためのCSS

効果: <div class="imgs"> <!-- 背景画...

Linux でリモート サーバー ファイルの状態を表示する方法

以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...

Docker イメージのプルとタグ操作 pull | tag

Fabric プロジェクトのソースコードを読み直してみたところ、Docker の部分でよくわからな...

Baidu デッドリンクファイルを作成する方法

Baidu によって定義されているデッドリンク形式には 2 種類あります。 1: XML形式のデッド...

MySQLの結合の基本原理についての簡単な説明

目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...

jQueryはすべての選択と逆選択操作ケースを実装します

この記事では、全選択と逆選択操作を実装するためのjQueryの具体的なコードを参考までに共有します。...

Linux で Apache を使用してファイル サーバーを構築する手順

1. ファイルサーバーについてプロジェクトでは、公開ソフトウェアやデータをプロジェクト チーム メン...

eject を使用せずに create-react-app の設定を変更する方法

1. イジェクトが推奨されないのはなぜですか? 1. eject を実行した後、どのような変化があり...

yum から docker インストール パッケージをダウンロードし、オフライン マシンにインストールする例の詳細なコード

1. ネットワークマシンでは、デフォルトのcentosyumソースを使用します [root@kole...

Vueプロジェクトのフロントエンドを最適化およびパッケージ化するための必須のボーナスアイテム

目次序文1. ルーティングの遅延読み込み1. ルートの遅延読み込みが必要なのはなぜですか? 2. ル...

JavaScript における BOM と DOM の詳細な説明

目次BOM (ブラウザ オブジェクト モデル) 1. ウィンドウブラウザのウィンドウサイズを取得する...

DockerでVueプロジェクトをデプロイする方法を教えます

1.前面に書きます:軽量仮想化テクノロジーとして、Docker には継続的インテグレーション、バージ...

MySQL スロークエリログの設定と使用方法のチュートリアル

序文MySQL スロー クエリ ログは、日常業務でよく遭遇する機能です。MySQL スロー クエリ ...