序文 InnoDB はデータをテーブルスペースに保存します。デフォルト設定では、初期サイズが 10 MB で、名前が ibdata1 のファイルがあります。このファイルはデフォルトのテーブルスペース ファイル (テーブルスペース ファイル) です。ユーザーは、パラメータ innodb_data_file_path を通じてこれを設定できます。データ ファイルは複数存在できます。innodb_file_per_table が設定されていない場合、それらの Innodb ストレージ タイプ テーブルのデータは、この共有テーブルスペースに配置されます。システム変数 innodb_file_per_table=1 の場合、InnoDB ストレージ エンジン タイプ テーブルは独立したテーブルスペースを生成します。独立したテーブルスペースの命名規則は、テーブル名.idb です。これらの個別のテーブルスペース ファイルには、テーブルのデータ、インデックス、挿入バッファー BITMAP、およびその他の情報のみが格納されます。その他の情報は、引き続き共有テーブルスペースに保存されます。では、データベース内のどのテーブルが独立したテーブルスペースで、どのテーブルが共有テーブルスペースであるかをどのように判断すればよいでしょうか。 InnoDB 論理ストレージ構造 方法1: ibdファイルで識別する テーブルのストレージ エンジンが InnoDB であり、テーブルスペースが共有テーブルスペースである場合、データベースの対応するディレクトリに「テーブル名.ibd」ファイルは存在しません。独立表領域内のテーブルの場合、「テーブル名.ibd」ファイルがあります。しかし、この方法は非常に愚かです。本番環境では、この方法で多数のテーブルを判断するのは良い方法ではありません。 mysql> 'innodb_file_per_table' のような変数を表示します。 +-----------------------+-------+ | 変数名 | 値 | +-----------------------+-------+ | innodb_file_per_table | オン | +-----------------------+-------+ セット内の1行(0.01秒) mysql> MyDB を使用します。 テーブル名と列名の補完のためのテーブル情報の読み取り -Aでこの機能をオフにすると起動が速くなります。 データベースが変更されました mysql> テーブル Independent_tablespace(name varchar(64)) を作成します。 クエリは正常、影響を受けた行は 0 行 (0.03 秒) mysql>終了 [root@DB-Server ~]# cd /data/mysql/MyDB/ [root@DBサーバー MyDB]# ls -lrt Independent_tablespace* -rw-rw---- 1 mysql mysql 8560 8月21日 22:05 Independent_tablespace.frm -rw-rw---- 1 mysql mysql 98304 8月21日 22:05 Independent_tablespace.ibd [root@DBサーバーMyDB]# 設定ファイル my.cnf で innodb_file_per_table=0 を設定し、MySQL サービスを再起動して、テーブル common_tablespace を作成すると、データ ディレクトリに common_tablespace.frm ファイルのみが表示されます。 mysql> 'innodb_file_per_table' のような変数を表示します。 +-----------------------+-------+ | 変数名 | 値 | +-----------------------+-------+ | innodb_file_per_table | オフ | +-----------------------+-------+ セット内の 1 行 (0.00 秒) mysql> MyDB を使用します。 テーブル名と列名の補完のためのテーブル情報の読み取り -Aでこの機能をオフにすると起動が速くなります。 データベースが変更されました mysql> テーブル common_tablespace(name varchar(64)) を作成します。 クエリは正常、影響を受けた行は 0 行 (0.02 秒) mysql>終了 さよなら [root@DBサーバー MyDB]# ls -lrt common_tablespace* -rw-rw---- 1 mysql mysql 8560 8月21日 22:08 common_tablespace.frm [root@DBサーバーMyDB]# 方法 2: INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES を使用して決定します。 MySQL 5.6 MySQL 5.6 INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES このシステム テーブルは、行形式、圧縮ページ サイズ ビット レベル (該当する場合)、INNODB テーブルスペース情報など、テーブルの形式とストレージ特性に関する情報を提供します。
私は、INFORMATION_SCHEMA データベースの下にある INNODB_SYS_TABLESPACES テーブルを理解するために時間を費やし、それらの InnoDB エンジン テーブルが独立したテーブル スペースであるか共有テーブル スペースであるかを判断するための SQL を作成しました。 共有表領域: テーブルスキーマを選択 ,テーブル名 ,テーブルタイプ ,N'共有テーブルスペース' AS TABLE_SPACE 、エンジン 、バージョン ,テーブル行 ,平均行長 、作成時間 、更新日時 INFORMATION_SCHEMA.TABLES Tから INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME を左結合します I.NAME が NULL であり、T.TABLE_SCHEMA='MyDB' かつ T.ENGINE='InnoDB' の場合; ただし、このスクリプトには小さなバグがあります。テーブル名に特殊文字が含まれている場合、エラーが発生する可能性があります。これは、テーブル名に特殊文字が含まれている場合、ファイル名またはINFORMATION_SCHEMA.INNODB_SYS_TABLESPACESのNAMEが以下のようにエスケープされるためです。 独立したテーブルスペース テーブルスキーマを選択 ,テーブル名 ,テーブルタイプ ,N'独立テーブルスペース' AS TABLE_SPACE 、エンジン 、バージョン ,テーブル行 ,平均行長 、作成時間 、更新日時 INFORMATION_SCHEMA.TABLES Tから INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME ここで、T.TABLE_SCHEMA='MyDB' かつ T.ENGINE='InnoDB'; 方法3: INFORMATION_SCHEMA.INNODB_SYS_TABLESの決定 MySQL 5.7 MySQL 5.7 であれば、MySQL 5.6 よりも方法が 1 つ増えます。MySQL 5.7 の INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES には追加の SPACE_TYPE フィールドがありますが、その値はすべて Single です。また、INFORMATION_SCHEMA.INNODB_SYS_TABLES にも追加のフィールド SPACE_TYPE があり、その値は Single と System で、それぞれ別のテーブルスペースと共有テーブルスペースを表します。 #別のテーブルスペース INFORMATION_SCHEMA.INNODB_SYS_TABLES から * を選択 ここで、SPACE_TYPE='シングル'; テーブルスキーマを選択 ,テーブル名 ,テーブルタイプ ,N'独立テーブルスペース' AS TABLE_SPACE 、エンジン 、バージョン ,テーブル行 ,平均行長 、作成時間 、更新日時 INFORMATION_SCHEMA.TABLES Tから INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME ここで、T.TABLE_SCHEMA='YourDatabase' かつ T.ENGINE='InnoDB'; #共有テーブルスペース INFORMATION_SCHEMA.INNODB_SYS_TABLES から * を選択 ここで、SPACE_TYPE='System'; テーブルスキーマを選択 ,テーブル名 ,テーブルタイプ ,N'共有テーブルスペース' AS TABLE_SPACE 、エンジン 、バージョン ,テーブル行 ,平均行長 、作成時間 、更新日時 INFORMATION_SCHEMA.TABLES Tから INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME を左結合します I.NAME が NULL であり、T.TABLE_SCHEMA='YourDatabase' かつ T.ENGINE='InnoDB' の場合 方法4: INFORMATION_SCHEMA.INNODB_TABLESの決定 MySQL 8.0 MySQL 8.0 であれば、INFORMATION_SCHEMA.INNODB_TABLES で判断する方法がもう 1 つあります。この新しく追加されたシステム テーブルは、SPACE_TYPE フィールドを通じて共有テーブルスペースと独立テーブルスペースを区別できます。 INFORMATION_SCHEMA.INNODB_TABLES から * を選択し、 SPACE_TYPE を 'Single' に設定します。 参考文献: 参考文献 参考文献: innodb_i_s_tables https://dev.mysql.com/doc/refman/5.6/en/innodb-sys-tablespaces-table.html#innodb-sys-tablespaces-table-flag-column https://dev.mysql.com/doc/refman/5.6/en/innodb-sys-tablespaces-table.html 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
>>: docker-compsoe を使用してフロントエンドとバックエンドを分離したプロジェクトをデプロイする方法
目次1. 目的2. 文法3. 練習する1. 目的通常、エラーが発生すると、スクリプトは直ちに停止し、...
1. <body> タグ: Web ページの本体をマークするために使用されます。body...
自動ビルドとは、Docker Hub を使用して、Dockerfile ファイルを含む GitHub...
目次01 非表示の列を作成する02 非表示の列に対する基本操作03 非表示の列メタデータ04 主キー...
システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...
1. 公式サイトにアクセスします: D:\mysql-5.7.21-winx64\bin をダウンロ...
1. 問題の説明Docker コンテナにインストールされているストレージが終了状態になっているため、...
ハロウィーンではありませんが、Linux の不気味な側面に注目する価値はあります。幽霊、魔女、ゾンビ...
問題の説明: 非同期リクエストの数が不確定な場合、数百の http リクエストが瞬時に発生したときに...
目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...
nginx プロセス モデルでは、トラフィック統計、トラフィック制御、データ共有などのタスクを完了す...
コードをコピーコードは次のとおりです。 <html> <ヘッド> <m...
この記事では、CSS無限シームレススクロール効果を実現するためのvue3の具体的なコードを参考までに...
目次一致と不一致一致するすべてが平等ではない平等と不平等等しい等しくない一致と不一致シンボルの両側の...
序文MySQL には次の 4 種類の演算子があります。算術演算子比較演算子論理演算子ビット演算子これ...