MySQLを32ビットRHELボックスで実行しています。サーバー自体には合計4GBのメモリがあり、MySQLには2GBが割り当てられています。
ボックスに入れることができるメモリの最大量と、MySQLに割り当てることができるメモリの量を知りたいです。
32ビットOSのプロセスごとの制限として2GBと4GBの両方を聞いたことがあります...
最終的には、64ビットOSにアップグレードせずにMySQLのメモリを増やすことができるかどうかを知りたいです。
カーネルと構成によって異なります。通常は2Gbまたは3Gbのいずれかです。
ただし、アプリケーション自体に自主的な下限がある場合があります。一部の32btiアプリ/サービスは、OSが許可したとしても、2Gを超えて使用しません。これは、独自の内部メモリ管理がすべてに符号付き32ビット整数を使用する(または許可する)ためです。
CPU、メモリコントローラー、OS、およびアプリケーションがすべてPAEをサポートしている場合、単一のプロセスでより多くのRAMを使用できるようになります。 PAEはLinuxカーネルでサポートされており、RHELリポジトリでビルド前のカーネルが有効になっていることは間違いありません(パフォーマンスに影響があるため、ほとんどのデフォルトカーネルでは有効になっていません)-MySQLがサポートされるかどうかはわかりませんしかしそれのために。
古いカーネルを使用している場合は、メモリマップ構成を調べる価値があるかもしれませんが、ほとんどの新しいカーネルは、古い時代(RAM 32ビットアドレス空間の制限に近いことは実際には前例のないことでした)2G/2G分割がデフォルトでしたが、1G/3Gが必要な場合は変更できます。
主題を深く掘り下げることなく、私の推測では(古いカーネルを使用していて、それが3Gではなく2Gの制限を課している場合を除いて)MySQLは64ビットにアップグレードしないと2G以上を使用しませんコンパイル。ただし、余分なRAMが無駄になる可能性はほとんどありません。カーネルはキャッシュ/バッファに使用するため、MySQLが直接使用する方がはるかに効率的です(MySQLのキャッシュとOSキャッシュの両方のケースがはるかに少ないため)同じデータブロックを保持している)アイドル状態ではないため、いくつかの利点が見られます。
最新のディストリビューションとプロセッサのほとんどはPAEをサポートしています。これは、32ビットの制限を超えるメモリアドレス指定を可能にするIntelの命令セットです。 PAEでは、プロセッサが最大64GBのRAMにアクセスできます。PAEには追加のCPUオーバーヘッドがあります。
32ビットLinuxには、PAEを使用してもアドレス可能な3GBのプロセスあたりの制限があります。通常、カーネルは約1GBを予約します。
MySQLは単一プロセスデーモンです。そのため、PAEを使用しても、32ビットの制限外でアドレス指定することはできません。
いくつかの有用な参考文献:
各プロセスは4GBを認識(アドレス)できると思いますが、そのうちの2 GBはカーネル空間であり、アプリケーションデータで埋めることはできません。
したがって、MySQLは合計メモリ(物理メモリとスワップスペース)の2GB倍のMySQLインスタンスGBを使用する可能性があると想定しています。