MySQL Serverパラメータ最適化-innodb_file_per_table(独立テーブルスペース)


1概要
Innodbストレージエンジンは、ibdata*の共有テーブルスペースにすべてのデータを格納してもよいし、各テーブルを独立したものに格納してもよい.ibdファイルの独立した表領域.
共有テーブルスペースおよび独立テーブルスペースは、データの格納方法です.
 
共有表領域:あるデータベースのすべての表データ、インデックスファイルはすべて1つのファイルに配置され、デフォルトではこの共有表領域のファイルパスはdataディレクトリの下にあります.デフォルトのファイル名はibdata 1を10 Mに初期化します.
 
≪独立表領域|Independent Tablespace|emdw≫:各表は独立したファイル方式で格納、各表は1つずつ生成されます.frmテーブル記述ファイル、もう一つ.ibdファイル.このファイルには、個別のテーブルのデータコンテンツとインデックスコンテンツが含まれています.デフォルトでは、その格納場所もテーブルの場所にあります.
2両者の長所と短所2.1共有表領域:
メリット:
表領域を複数のファイルに分割して各ディスクに格納できます(表領域ファイルのサイズは、1つのテーブルが異なるファイルに分散できるなど、表サイズに制限されません).データとファイルを一緒に置くと管理が便利です.
欠点:
すべてのデータとインデックスは1つのファイルに格納され、1つの大きなファイルを複数の小さなファイルに分割することができますが、複数のテーブルとインデックスが表空間に混在して格納されます.これにより、1つのテーブルに対して大量の削除操作を行った後、表空間には多くの隙間があります.特に統計分析では、日値システムのようなアプリケーションは共有表空間を使用するのに最も適していません.
2.2独立した表領域:
プロファイル(my.cnf)で設定:innodb_file_per_table
メリット:
    1.各テーブルには独自のテーブルスペースがあります.
    2.各テーブルのデータとインデックスは、独自のテーブルスペースに存在します.
    3.単一テーブルを異なるデータベースで移動できます.
    4.スペースは回収可能(drop table操作箇所を除き、表空は自分で回収できない)
a.Drop table操作は自動的に表領域を回収し、統計分析或いは日値表に対して、大量のデータを削除した後、:alter table Table Name engine=innodb;不要なスペースを縮める.
b.innodb-pluginを使用するInnodbに対してもturncate tableを使用すると空間が収縮します.
c.独立した表領域を使用する表については、どのように削除しても、表領域の断片化はパフォーマンスに深刻な影響を及ぼさず、処理する機会もあります.
欠点:
単表は100 Gを超えるように大きくなりすぎた.
比較すると、排他的な表領域を使用する効率とパフォーマンスが向上します.
3独立した表領域パラメータinnodb_file_per_table詳細3.1パラメータリスト:
Command-Line Format --innodb_file_per_table
System Variable
Name innodb_file_per_table
Variable Scope
Global
Dynamic Variable
Yes
Permitted Values (<= 5.6.5)
Type boolean
Default OFF
Permitted Values (>= 5.6.6)
Type boolean
Default ON
3.2パラメータ機能
このパラメータはmysql 5にあります.6.6以降のバージョンでは、デフォルトでオンになっています.このパラメータをオンにすると、Innodbは新しく作成したテーブルごとにデータとインデックスを独立して格納します.ibdファイルには、システムの表領域ではありません.これらのinnodbテーブルが削除されたり、空になったりすると、ストレージスペースが回収されます.
innodb_を開くfile_per_tableは、ALTER TABLE操作によりテーブルを再構築する場合、innodbテーブルをシステム共有テーブル空間から独立に移動する.ibdファイル.
innodbを開かないfile_per_table,innodbは,すべてのテーブルおよびインデックスのデータをシステムテーブル空間を構成するibdataファイルに格納する.これにより、DROP TABLEやTRUNCATE TABLEなどのファイルシステム操作のパフォーマンスオーバーヘッドが低減されます.統合ディスクをmysqlデータを格納する場合に最適です.システム表領域が縮小しないため、すべてのデータベースが1つの空間インスタンスに含まれています.innodb_file_per_table=OFFの場合、スペースが限られたシステムテーブルスペースに大量の一時データを導入しないようにしてください.
    innodb_file_per_tableはSET GLOBALにより動的にONまたはOFFに変更することができる、myでもよい.cnfで永久的な修正を行いmy.cnfで修正して有効になるとmysqldサービスを再起動する必要があります.
mysql> set global innodb_file_per_table =ON;
mysql> show variables like '%per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
注:動的に変更すると、元は共有表領域であった場合、動的に独立表領域に変更した後に新規作成された表のみが独立表領域であった場合、後続の操作にのみ有効になります.
4 innodb共有テーブルスペースを独立したテーブルスペースに変換
現在の表領域の状況を表示するには、次の手順に従います.
mysql> show variables like '%per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+
は、現在共有表領域であることを示す.
共有表領域を独立した表領域に変換するには、次の2つの方法があります.
    1.バックアップを論理的に実行し、プロファイルmyを変更します.cnfのパラメータinnodb_file_per_tableパラメータは1で、サービスを再起動した後に論理バックアップをインポートすればよい.
    2.プロファイルを変更するmy.cnfのパラメータinnodb_file_per_tableパラメータは1で、サービスを再起動すると変更する必要があるすべてのinnodbテーブルが実行されます:alter table table_name engine=innodb;
2つ目の方法で変更すると、元のライブラリのテーブルのデータはibdata 1に保存され続け、新しいテーブルは独立したテーブルスペースを使用します.
****************************************************************************************
原文住所:
http://blog.csdn.net/jesseyoung/article/details/
42236615
ブログのホームページ:http://blog.csdn.net/jesseyoung
****************************************************************************************