InnoDB
が開発されたとき,オペレーティングシステムに付属のメモリーアロケータや実行時ライブラリは多くの場合,パフォーマンスとスケーラビリティーに欠けていました。その時点では,マルチコアCPU用にチューニングされたメモリーアロケータライブラリは存在しませんでした。そのため,InnoDB
は,mem
サブシステム内に独自のメモリアロケタを実装しました。このアロケタは単一の相互排他ロックによって保護されており,これがボトルネックになる可能性があります。InnoDB
はまた,システムアロケタ(malloc
および免费的
)の周りに,同様に単一の相互排他ロックによって保護されているラッパーインタフェースも実装しています。
今日,マルチコアシステムがより広範囲に使用可能になるにつれ,またオペレーティングシステムが成熟するにつれ,オペレーティングシステムに付属のメモリーアロケータに対して大幅な機能強化が行われてきました。新しいメモリアロケタは以前のものより性能が向上し,またよりスケラブルになりました。主要な高性能メモリアロケタには,囤积
、libumem
、mtmalloc
、ptmalloc
、tbbmalloc
,およびTCMalloc
が含まれます。ほとんどのワークロードは,特にメモリーの割り当てと解放が頻繁に行われる(マルチテーブル結合などの)場合,内部のInnoDB
固有のメモリーアロケータではなく,より高度にチューニングされたメモリーアロケータを使用するとメリットがあります。
InnoDB
が独自のメモリーアロケータまたはオペレーティングシステムのアロケータのどちらを使用するかは,MySQLオプションファイル(my.cnf
またはmy.ini
)内のシステム構成パラメタinnodb_use_sys_malloc
の値を設定することによって制御できます。在
または1
(デフォルト)に設定されている場合,InnoDB
はメモリプルを自ら管理するのではなく,ベスとなるシステムのmalloc
および免费的
関数を使用します。このパラメタは動的ではなく,システムが起動された場合にのみ有効になります。InnoDB
メモリアロケタを引き続き使用するには,innodb_use_sys_malloc
を0
に設定します。
InnoDB
メモリアロケタが無効になっている場合,InnoDB
は,パラメタinnodb_additional_mem_pool_size
の値を無視します。InnoDB
メモリーアロケータは,システムメモリーアロケータにフォールバックしなくても割り当て要求を満たせるように,追加のメモリープールを使用します。InnoDB
メモリーアロケータが無効になっている場合,このような割り当て要求はすべて,システムメモリーアロケータによって満たされます。
動的リンクを使用するUnixラLD_PRELOAD
またはLD_LIBRARY_PATH
がそのアロケタを実装している動的ラ。ほかのシステムでは,ある程度の再リンクが必要になる可能性があります。選択したメモリアロケタラブラリのドキュメントを参照してください。
システムメモリアロケタが使用されている(innodb_use_sys_malloc
が在
である)場合,InnoDB
はすべてのメモリ使用を追跡することができないため,显示引擎innodb状态
コマンドの出力内のセクション「缓冲池和内存」の「总内存分配」にはバッファプルの統計のみが含まれます。mem
サブシステムまたはut_malloc
を使用して割り当てられたメモリはすべて除外されます。
innodb_use_sys_malloc
とinnodb_additional_mem_pool_size
はMySQL 5.6.3では非推奨であり,将来のリリスで削除される予定です。
InnoDB
のメモリ使用のパフォマンスへの影響の詳細は,セクション8.9 "バッファリングとキャッシュ"を参照してください。