MySQL ストレージエンジン InnoDB の設定と使用方法の説明

MySQL ストレージエンジン InnoDB の設定と使用方法の説明

MyISAM と InnoDB は、MySQL で最も一般的なストレージ エンジンです。前回の記事では、InnoDB と MyISAM の違いについて説明しました。MyISAM はトランザクションをサポートしていないため、堅牢なトランザクション ストレージ エンジンを使用する必要がある場合は、InnoDB が最適な選択肢になります。

Innodb は、マルチバージョン同時実行制御 (MVCC) を通じて高い同時実行性を実現し、4 つの SQL 標準分離レベルを実装します。デフォルトはREPEATABLEレベルです。同時に、 phantomリーディングを回避するために、 next-key lockingと呼ばれる戦略が使用されます。さらに、InnoDB ストレージ エンジンは、 insert bufferdouble write 、アダプティブadaptive hash indexインデックス、 read aheadなどの高性能かつ高可用性の機能も提供します。

InnoDB をデフォルトのエンジンとして設定する方法:

  • 1. MySQL ストレージ エンジンのステータスを確認します: mysql>show engines。 InnoDB | YES は、この MySQL データベース サーバーが InnoDB エンジンをサポートしていることを示します。
  • 2. InnoDBをデフォルトのエンジンとして設定します。my.ini設定ファイルの[mysqld]の下にdefault-storage-engine=INNODBを追加します。
  • 3. MySQLサーバーを再起動する
  • 4. MySQL データベースにログインし、mysql>show engines を実行します。 InnoDB | DEFAULT が表示された場合、InnoDB がデフォルトのエンジンとして正常に設定されていることを意味します。

InnoDB 共通構成パラメータ:

#InnoDB はデータ ディクショナリと内部データ構造のバッファ プールを格納します。16 MB あれば十分な大きさです。
innodb_追加メモリプールサイズ = 16M
#InnoDBは、データ、インデックス、ロック、挿入バッファ、データ辞書などのキャッシュに使用されます。#専用のDBサーバーで、InnoDBエンジンが主なシナリオである場合は、通常、物理メモリの50%に設定できます。
#非専用 DB サーバーの場合は、まずメモリの 1/4 に設定してみて、問題があれば調整してください。#デフォルト値は 8M で、これは非常に悪いです。多くの人が InnoDB は MyISAM ほど良くないと考えるのもこれが理由です。innodb_buffer_pool_size = 4G
#InnoDB 共有テーブルスペースの初期化サイズは、デフォルトは 10MB ですが、これも非常に扱いにくいため、1GB に変更し、innodb_data_file_path = ibdata1:1G:autoextend で自動的に拡張します。
#このオプションがわからない場合は、1に設定することをお勧めします。これにより、データの信頼性がより保護され、パフォーマンスに一定の影響がありますが、制御可能です innodb_flush_log_at_trx_commit = 1
#InnoDB ログ バッファは通常 64MB に設定すれば十分です innodb_log_buffer_size = 64M
#InnoDB redo ログのサイズは通常 256MB で十分です innodb_log_file_size = 256M
#InnoDB redo ログ ファイル グループ。通常は 2 に設定すれば十分です。innodb_log_files_in_group = 2
#管理を容易にするために InnoDB の独立テーブルスペース モードを有効にする innodb_file_per_table = 1
# 管理者が表示や監視などを行うために InnoDB のステータス ファイルを有効にします。innodb_status_file = 1
#トランザクションの効率を向上させるために、トランザクション分離レベルを READ-COMMITTED に設定します。通常、トランザクションの一貫性要件は満たされます。transaction_isolation = READ-COMMITTED 
その他の構成オプションも注目に値します。
#同時接続の最大数を設定します。フロントエンドプログラムがPHPの場合は、適切に増やすことができますが、あまり増やしすぎないようにしてください。#フロントエンドプログラムが接続プールを使用する場合は、接続が多すぎないように適切に調整できます。max_connections = 60
#接続エラーが頻繁に発生してもフロントエンドホストがmysqlによって拒否されるのを防ぐために、接続エラーの最大数を適切に増やすことができます。max_connect_errors = 100000
#遅いクエリのしきい値を設定します。最小値を1秒に設定することをお勧めします long_query_time = 1
# 一時テーブルの最大値を設定します。これは各接続に割り当てられます。あまり大きく設定することはお勧めできません。max_heap_table_size と tmp_table_size は同じサイズに設定する必要があります。max_heap_table_size = 96M
tmp_table_size = 96M
#各接続はソート、接続、その他のバッファを割り当てます。通常は 2MB に設定すれば十分です。sort_buffer_size = 2M
結合バッファサイズ = 2M
読み取りバッファサイズ = 2M
読み取りバッファサイズ = 2M
# パフォーマンスに悪影響を与える可能性があるため、クエリキャッシュをオフにすることをお勧めします。query_cache_size = 0
#メインDBがInnoDBの場合、MyISAMのkey_buffer_sizeは小さく設定できます。8MBで十分です。#メインDBがMyISAMの場合、大きく設定できますが、4Gを超えてはいけません。
#ここでは、MyISAMエンジンを使用しないことを強くお勧めします。デフォルトでは、InnoDBエンジンを使用します。key_buffer_size = 8M
#接続タイムアウトしきい値を設定します。フロントエンド プログラムが短い接続を使用する場合は、これら 2 つの値を短くすることをお勧めします。#フロントエンド プログラムが長い接続を使用する場合は、これら 2 つのオプションを直接コメント アウトして、既定の構成 (8 時間) を使用できます。
インタラクティブタイムアウト = 120
待機タイムアウト = 120

InnoDB エンジン データ テーブル設計に関するいくつかの提案:

  • 1. すべての InnoDB データ テーブルは、ビジネスとは無関係な自動増分数値主キーを作成します。これは、パフォーマンスの確保に非常に役立ちます。
  • 2. text/blob の使用は避けてください。どうしても使用する必要がある場合は、可能な限り独立したテーブルに分割してください。
  • 3. タイムスタンプを保存するには TIMESTAMP 型を使用することをお勧めします。
  • 4. IPV4 アドレスは INT UNSIGNED 型を使用して保存することをお勧めします。
  • 5. 性別などのバイナリロジックの場合は、CHAR(1)ではなくTINYINTストレージを使用することをお勧めします。
  • 6. 長いテキストコンテンツを保存する場合は、JSON/BSON 形式を使用することをお勧めします。

InnoDB ロックの種類

InnoDBストレージエンジンは、次の2つの標準的な行レベルロックを実装しています。

  • 共有ロック(Sロック)により、トランザクションはデータ行を読み取ることができる
  • 排他ロック(Xロック)。トランザクションがデータ行を削除または更新できるようにします。

共有ロックと排他ロックの互換性

知らせ:

(1)SロックとXロックはともに行ロックです。互換性とは、同じレコード(行)上のロックの互換性を指します。

(2)トランザクションT1はすでに行Rの共有ロックを取得している。別のトランザクションT2はすぐに行Rの共有ロックを取得できる。この状況をロック互換性と呼ぶ。トランザクション T3 が行 R の排他ロックを取得したい場合、トランザクション T1 と T2 が行 R の共有ロックを解放するまで待機する必要があります。この状況はロックの非互換性になります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL InnoDB ストレージエンジンのメモリ管理の詳細な説明
  • MySQLメモリストレージエンジンに関する知識
  • MySQLのストレージエンジンの詳細な説明
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • MySql ストレージ エンジンとインデックスに関する知識のまとめ
  • MySQL MyISAM デフォルト ストレージ エンジンの実装原則
  • MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解
  • MySQLでよく使われる4つのストレージエンジンについて簡単に説明します。
  • MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明
  • MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要
  • 一般的なMySQLストレージエンジンの長所と短所

<<:  カスタム Docker イメージを作成するための Dockerfile の詳細な説明と CMD と ENTRYPOINT 命令の比較

>>:  JavaScript ベースのシンプルな計算機の実装

推薦する

VueはOpenLayersを使用してTiandi MapとAmapを読み込み

目次1. 世界地図1. VueにOpenLayersをインストールする2. アマップ1. 世界地図1...

入力が完了したことを検出し、次のコンテンツを自動的に入力する HTML を実装する方法

前回の記事では、入力完了の簡単な検出を実現しましたが、今回はさらに一歩進んで、入力が完了した後に次の...

HTML 文法百科事典_HTML 言語文法百科事典 (必読)

ボリュームラベル、プロパティ名、説明002 <! - - ... - -> コメント00...

CSSアニメーション属性キーフレームの詳細な説明

コラムを更新してからどれくらい経ったでしょうか?半年ですか?今年の後半は、まさに離陸、つまり文字通り...

Linux でユーザーを完全に削除する 2 つの方法

Linux 操作実験環境: Centos7 仮想マシンまず、共通ユーザーgubeiqingを作成しま...

mysql replace into の使用法の詳細な説明

replace ステートメントは、一般的に insert ステートメントに似ています。ただし、テーブ...

MySQLでJSONフィールドを操作する方法

MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...

Linux で大きなファイルの指定された内容を見つける方法

大きなことも小さなことも考えて、方向転換しましょう。 Linux では非常に大きなファイルに遭遇する...

MySQL クエリのパケットが大きすぎる問題と解決策

問題の説明:エラーメッセージ:原因: com.mysql.jdbc.PacketTooBigExce...

パスワードログインなしのLinux構成スタンドアロンおよびフルディストリビューションの詳細なチュートリアル

目次1: 単一マシンのパスワードフリーログイン構成1. 仮想マシンのホスト名を設定する2. 仮想マシ...

HTML Selectは、デフォルトの選択を設定するためにselected属性を使用します。

オプションに属性 selected = "selected" を追加すると、それ...

Nginx 静的サービス設定の詳細な説明 (ルートとエイリアスの指示)

静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...

MySQL 接続で認証失敗エラーが発生する場合の分析と解決方法

[問題の説明]アプリケーション側では、次のエラーが時々表示されます。メソッド 'mysql_...

Tencent Cloudでhive3.1.2を構築する方法を教えます

環境の準備操作を開始する前に、hadoop バージョンがインストールされていることを確認してください...