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


8

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

編集済み

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

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

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


その編集は別の質問、imoを保証します。OPTIMIZE TABLEのドキュメントをご覧ください:dev.mysql.com/doc/refman/5.5/en/optimize-table.html InnoDBはコマンドをサポートしていますが、プロセスはMyISAMとは異なります
Derek Downey

回答:


11

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で使用されている利用可能なメモリとディスク容量の関数について述べました。ここからは常識を働かせてください。上記のクエリからの推奨数は、インストールされているRAMの75%を超えてはいけません!!! これが、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年にわたって作成した他の投稿は次のとおりです


私のPCには2GBのRAMがあり、InnoDB_Buffer_Pool_Sizeはデフォルトで6Mに設定されています。500Mに増やしました。助言がありますか?
RPK、2011

インストールされているRAMの75%である1.5Gである1536Mに設定します
RolandoMySQLDBA '05 / 08/05

私はあなたのクエリを実行しました、そしてそれは出力45Gを与えます。サーバーのRAMは8Gです。RAMを絶対に増やす必要がありますか?あるいは、上記のクエリにはいくつかの条件があります。..
Stewie

@Stewie 45GのInnoDBがある場合、予算があれば60GBのRAMが必要です。8Gしかないので、インストールされているRAM(6G)の75%で十分です。
RolandoMySQLDBA 2012年

@RolandoMySQLDBA:素晴らしい投稿!しかし、Stewieの場合、RAMが8 GBしかないのに理由がよくわかりませんが、クエリの出力が8 GB(この場合は45G)を超える可能性があります。
Chubaka

3

これは、「粗調整」の重要な変数に関する古い記事です。最も重要なのはおそらく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に変数を設定することです


MySQL 5.5にアップグレードしました。
RPK、2011

2

オプティマイズには多くの色があります。

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

調整を始める前に、基準とは何か、変更が役立つかどうかをどのように判断するかを決める必要があります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.