web-dev-qa-db-ja.com

InnoDBデフォルト設定の最適化

My.iniを調べて、さまざまなデフォルト設定を確認しました。データベースが1台のスタンドアロンPCで実行されています。 InnoDBとMySQLのパフォーマンスを全般的に最適化してパフォーマンスを向上させたい。ディスク容量の制約はありません。パフォーマンス、信頼性、および可能な特定の時点のバックアップ[高可用性]のために最適化するためにどのデフォルト設定を変更する必要がありますか。

編集済み

現在、MySQL AdministratorでMaintenanceを介して「Optimize Tables」を実行すると、常に次のように表示されます。

テーブルは最適化をサポートしていません。代わりに再作成+分析を実行しています

すべてのテーブル。すべてのテーブルがInnoDBですが、なぜ最適化をサポートしていないのですか?

8
RPK

InnoDBを調整する方法は中心にあります

  • InnoDBバッファープール:データページとインデックスページをキャッシュします。キャッシュできるデータとインデックスの量は、ディスク容量の制約の関数ではなく、現在InnoDBで使用されている使用可能なメモリとディスク容量の関数です。
  • InnoDBメタデータ:デフォルトでは、ファイルibdata1は通常、InnoDBのすべてを収容します。データページ、インデックスページ、テーブルメタデータ、 [〜#〜] mvcc [〜#〜] データが含まれます。

InnoDBデータとインデックスページで使用されるディスクスペースに基づいてInnoDBバッファープールを計算するために過去5年間使用してきた式は次のとおりです

SELECT CONCAT(ROUND(KBS/POWER(1024,IF(Power1024<0,0,
IF(Power1024>3,0,Power1024)))+0.49999),SUBSTR(' KMG',IF(Power1024<0,0,
IF(Power1024>3,0,Power1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,(SELECT 2 Power1024) B;
  • バイトには(SELECT 0 Power1024)を使用
  • KBには(SELECT 1 Power1024)を使用
  • MBには(SELECT 2 Power1024)を使用
  • GBには(SELECT 3 Power1024)を使用
  • TBに(SELECT 4 Power1024)を使用します(TerraBytesのRAMがある場合は、私にメールしてください)

もちろん、私は現在InnoDBで使用されている利用可能なメモリとディスク容量の関数について述べました。ここからは常識を働かせてください。上記のクエリの推奨数は、インストール済みの75%を超えないようにする必要がありますRAM !!!これは、InnoDBバッファープールのサイズを決定するための最も簡単な経験則です。

InnoDBの安定した同期書き込みを提供するため、 innodb_flush_methodをO_DIRECT に設定する必要もあります。 私はまた、InnoDB のディスクストレージを最適化する方法についての投稿も書きました。

メッセージTableは最適化をサポートしておらず、代わりに再作成+分析を実行しています。このエラーメッセージが表示される理由は、ストレージエンジンがInnoDBであるという事実です。機械的には、OPTIMIZE TABLEはテーブルを一時テーブルにコピーし、 ANALYZE TABLE を実行します。

実際には、InnoDBに対するANALYZE TABLEはまったく役に立ちません。 InnoDBテーブルでANALYZE TABLEを実行した場合でも、InnoDBストレージエンジンは、カーディナリティの近似のためにインデックスに何度もダイブして、コンパイルしたばかりの統計を破棄します。実際、PerconaはANALYZE TABLEに対していくつかのテストを実行し、同じ結論に至りました

InnoDB Tuningについて私が1年にわたって作成した他の投稿は次のとおりです

11
RolandoMySQLDBA

これは古い記事です 「粗調整」の重要な変数について。最も重要なのはおそらく innodb_buffer_pool_size

MySQL 5.5にアップグレードすることを強くお勧めします(まだ実行していない場合)。彼らはInnoDBのパフォーマンスにかなりの変更を加えました。デフォルトエンジンであるため、InnoDB向けに最適化する方法に関するメインストリームセクションも提供しています。 http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb.html

ポイントインタイムバックアップについては、 バイナリログ を確認する必要があります。これを有効にする基本は、log-bin my.cnfの変数

3
Derek Downey

最適化には多くの色があります。

最初のステップは、「最適化」があなたにとって何を意味するかを決定することだと思います。一部の人にとっては、「最速のSELECTクエリ」を意味します。他の人にとっては、「SELECTパフォーマンスとINSERTパフォーマンスの最良のバランス」を意味します。さらに他の人にとっては、「最も速いINSERTパフォーマンス」。

基準とは何か、変更が役立つかどうかをどのように判断するかを決定する必要がありますbeforeチューニングを開始します。

次に、構成ファイルと起動オプションをバージョン管理下に置き、実験を開始します。誰のアドバイスに従うか、どこで見つけたかを文書化します。 (コードベースとハードウェアの変更に伴い、アドバイスは時間とともに変化します。)これらのドキュメントもバージョン管理下に置いてください。