私は非常に少数のInnoDBテーブル(たとえば、1MB未満)を使用していますが、MySQLの起動時に、
InnoDB: Initializing buffer pool, size = 128.0M
このような小さなサイズで使用しているのに、サーバーが128M RAMを使用しているということですか?
MySQLのドキュメントによると、 MySQL 5.5ではInnoDBバッファープールはデフォルトで128MBに設定されています 。
次のようにして、InnoDBバッファープールの使用量と予約量を表示できます。
SELECT
BufferPoolUsed BytesUsed,
(BufferPoolUsed / power(1024,1)) UsedKB,
(BufferPoolUsed / power(1024,2)) UsedMB,
(BufferPoolUsed / power(1024,3)) UsedGB,
BufferPoolReserved BytesReserved,
(BufferPoolReserved / power(1024,1)) ReservedKB,
(BufferPoolReserved / power(1024,2)) ReservedMB,
(BufferPoolReserved / power(1024,3)) ReservedGB
FROM
(
SELECT
(A.num * B.num) BufferPoolUsed,
(A.num * C.num) BufferPoolReserved
FROM
(SELECT variable_value num FROM information_schema.global_status
WHERE variable_name='Innodb_page_size') A,
(SELECT variable_value num FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_data') B,
(SELECT variable_value num FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_total') C
) AA
;
Windows用のMySQL 5.5.12では256Mに設定しています。これが私の出力です:
mysql> SELECT
-> BufferPoolUsed BytesUsed,
-> (BufferPoolUsed / power(1024,1)) UsedKB,
-> (BufferPoolUsed / power(1024,2)) UsedMB,
-> (BufferPoolUsed / power(1024,3)) UsedGB,
-> BufferPoolReserved BytesReserved,
-> (BufferPoolReserved / power(1024,1)) ReservedKB,
-> (BufferPoolReserved / power(1024,2)) ReservedMB,
-> (BufferPoolReserved / power(1024,3)) ReservedGB
-> FROM
-> (
-> SELECT
-> (A.num * B.num) BufferPoolUsed,
-> (A.num * C.num) BufferPoolReserved
-> FROM
-> (SELECT variable_value num FROM information_schema.global_status
-> WHERE variable_name='Innodb_page_size') A,
-> (SELECT variable_value num FROM information_schema.global_status
-> WHERE variable_name='Innodb_buffer_pool_pages_data') B,
-> (SELECT variable_value num FROM information_schema.global_status
-> WHERE variable_name='Innodb_buffer_pool_pages_total') C
-> ) AA
-> ;
+-----------+--------+----------+--------------------+---------------+------------+------------+------------+
| BytesUsed | UsedKB | UsedMB | UsedGB | BytesReserved | ReservedKB | ReservedMB | ReservedGB |
+-----------+--------+----------+--------------------+---------------+------------+------------+------------+
| 6864896 | 6704 | 6.546875 | 0.0063934326171875 | 268435456 | 262144 | 256 | 0.25 |
+-----------+--------+----------+--------------------+---------------+------------+------------+------------+
1 row in set (0.00 sec)
mysql>
MySQLの起動時にこの値を設定できます。例えば:
1GのRAMを使用するように設定するには
[mysqld]
innodb_buffer_pool_size=1G
256MBのRAMを使用するように設定するには
[mysqld]
innodb_buffer_pool_size=256M
My.cnfで変更した後、mysqlを再起動して有効にする必要があります。
バッファープールは、MySQLがInnoDBデータとインデックスをメモリにキャッシュするために使用されます。使用されている合計メモリではなく、MySQL DB
InnoDBテーブルが128MBと小さい場合、すべてのInnoDBテーブルがメモリ内テーブルとして扱われます。 128Mbはバッファの最大サイズの制限であり、必要な場合にのみ満たされます。
あなたはそれについて読むことができます ここ
MySQLは起動時にバッファプールにメモリを割り当てますが、実際に必要なのはメモリだけです。つまり、128MのRAMを確保できない場合、MySQLは起動しませんが、サーバーは最初はその128Mのメモリを使用しません。バッファプールが完全に利用されるまで、RAMは他のアプリケーションで使用できます。
128 Mは、歴史的に素晴らしいバッファープールサイズです。しかし、それは今では本当に歴史です:)より多くのプールサイズを与えることを検討してください。多くのパターンでは、サーバーの総メモリの70〜80%をinnodbバッファープールに割り当てる必要があるか、与える可能性があるとしています。 MySQL最適化ステージでは、InnoDBバッファープールの最適化が一般的です。ただし、RAMを誤って見積もることに注意してください。あなたは十分に保つ必要がありますRAM別のタスク用。Apacheなど。まず最初に、サーバーに最適なmy.cnf(構成ファイル)を生成します。これは、シンプルだが優れたPerconaオンラインツールを使用して実行できます。 。それはあなたにとって非常に便利な出発点になります: percona online tools