TwitterはMySQLの改善を投稿しました。
変更のソースコードは、修正されたBSDライセンスの下で配布され、
GitHubでホストされます。habrakatの詳細な変更点をご覧ください。
追加の状態変数
開発者は、特にInnoDBの内部コンポーネントからの状態変数を追加しました。これにより、システムの動作をより効果的に制御し、特にロード時の動作をよりよく理解できるようになりました。 追加される変数には次のものがあります。
- 開いている、閉じている、現在開いているInnoDBファイルとテーブルスペースファイルの数。 この情報は、以前はInnoDBサブシステムによって提供されていませんでした。
- 検出されたフリーズの数。 この情報は、以前はInnoDBサブシステムによって提供されていませんでした。
- 現在のトランザクションログ番号(LSN)、チェックポイントの前のLSN、およびリセットが行われるLSN。 この情報は、以前はSHOW ENGINE INNODB STATUSコマンドを使用して利用可能でした。
NUMAアーキテクチャに基づくメモリ割り当ての最適化
最新のマルチプロセッサシステムのほとんどは、不均等なメモリアクセステクノロジーを使用しています。これはNUMAアーキテクチャと呼ばれ、NUMA「ノード」間でシステムの共有メモリを共有できます。 InnoDBバッファープールに大量のメモリを割り当てると、深刻な問題が発生する傾向があります。 MySQLで使用されるNUMAシステムで発生する特定の問題の詳細については、Jeremy Coleのブログを参照してください。 開発者は、システムを最適化して問題を解消するために、次の変更を行いました。
- 起動時にすべてのバッファプールメモリを強制的に再配布するオプションが追加されました。 まず、これは、どのページをどのNUMAノードに配置するかをシステムに決定させるために行われました。 何らかの理由でバッファプールメモリを完全に割り当てることができない場合、InnoDBサブシステムは起動時に動作を中断します。
- numactl --interleave = allコマンドを使用してmysqldの起動を最小限に抑え、使用可能なすべてのNUMAノード間でメモリを共有できるオプションがmysqld_safeに追加されました。 これにより、NUMAノードにメモリを割り当てる利点がないことが保証されるため、多数のNUMAノードすべてがメモリを常に使用し続けます。
- オペレーティングシステムを起動する前にオペレーティングシステムのバッファキャッシュをクリアするオプションがmysqld_safeに追加されました(Linux OSのみ)。 Linuxは、システムが低メモリ状態にある場合を除き、原則としてメモリを再割り当てするためにキャッシュを解放しません。これにより、均等に分散されたメモリが不均等に分散される可能性がある、つまりメモリを再割り当てする際の優先順位につながる可能性があります開始する前に、キャッシュされた情報の量が最も少ないノードに与えられます。 開始する前にキャッシュをクリアすると、InnoDBがバッファープールメモリを割り当てる前に、システムがキャッシュに大量のメモリを割り当てることがなくなります。
リクエストサーバーのタイムアウト
サーバーによって実行される不必要な作業の量が削減されたため、サーバーはミリ秒の精度で一定の待機時間を超える要求を事前にキャンセルできました。
プロアクティブフェッチを使用したバッファプールのエクスポートと復元
InnoDBバッファープールのエクスポートと復元は、安全で軽量な方法を使用して可能になります。これにより、最小限の影響でサービスを再起動するツールを作成できます。
ソリッドステートドライブ(SSD)の最適化
MySQLは、ページの更新プロセスの最適化やディスクの寿命を延ばすためのディスクへの書き込み回数の削減など、SSDディスクを使用するマシン向けに最適化されました。
ニュースソース:
engineering.twitter.com/2012/04/mysql-at-twitter.htmlテキストは
READMEファイルから取得され
ます 。