生産OLTP主にInnoDBテーブルを持つシステムを想定しています。
特定のstatus
変数と診断を詳述する逸話があれば、喜んでいただけます。
興味深いことに、MySQL 5.5では、複数のinnodbバッファープールを使用できるようになりました。
気になるパラメータは
約1か月で、クライアント用に112のinnodbバッファープールを実装する予定です。どうだったか教えてあげます。
Innodb_buffer_pool_instancesの最大値は64であることがわかったので、144 GBを構成することにしたので、innodb_buffer_pool_instancesを18に、innodb_buffer_pool_sizeを8に設定しました。現在、サーバーに450GBをロードしています
複数のInnoDBバッファープールを試しました。スレッドのロックと競合が多すぎました。単一の162GBバッファープールに切り替え、read_io_threadsとwrite_io_threadsを64(最大値)に設定しました。これはずっとうまくいきました。
MySQLについて驚くべきことを学びました。それよりも大きい単一のモノリシックInnoDBバッファープールを割り当てる場合インストールされた合計数を物理CPUの数で割った値、完全なInnoDBバッファープールが原因で、OSを定期的にメモリスワップするようにします。 innodb_buffer_pool_instances と呼ばれるMySQL 5.5のオプションを使用して、バッファープールを分割できます。昨日、昨年の回答で述べたクライアントにこれを適切に実装しました。クライアントのバッファプール用にまだ162GBあります。各DBサーバーはデュアルヘキサコアであるため、サーバーのinnodb_buffer_pool_instancesオプションを2に設定しました。私はそれを12に設定することを考えていましたが、同僚が MySQLとSwappinessに関するJeremy Coleのブログ を見せてくれました。読んだ後、すぐにクライアントのために実践しました。このコマンドを実行しました
numactl --hardware
サーバーの192GBのマッピングを確認しましたRAM各物理コアに96GBとして。したがって、innodb_buffer_pool_instancesを2に設定しました。現在、問題はありません。これを確認するために私の回答を更新します次の2つのmontnsのメモリスワッピングに影響します。
次のリソースをご覧ください。
最初に、my.cnfのデフォルトのInnoDBバッファープールサイズを増やします(デフォルトでは8MBと考えています)。
あなたはおそらくこれをあなたのRAMサイズの75%に設定するべきです(一般的に)