web-dev-qa-db-ja.com

MySQLは「InnoDB:バッファプールの初期化、サイズ= 128.0M」と言っていますが、128MBのRAMを使用しているということですか?

私は非常に少数のInnoDBテーブル(たとえば、1MB未満)を使用していますが、MySQLの起動時に、

InnoDB: Initializing buffer pool, size = 128.0M

このような小さなサイズで使用しているのに、サーバーが128M RAMを使用しているということですか?

5
Howard

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を再起動して有効にする必要があります。

10
RolandoMySQLDBA

バッファープールは、MySQLがInnoDBデータとインデックスをメモリにキャッシュするために使用されます。使用されている合計メモリではなく、MySQL DB

InnoDBテーブルが128MBと小さい場合、すべてのInnoDBテーブルがメモリ内テーブルとして扱われます。 128Mbはバッファの最大サイズの制限であり、必要な場合にのみ満たされます。

あなたはそれについて読むことができます ここ

4
thanosk

MySQLは起動時にバッファプールにメモリを割り当てますが、実際に必要なのはメモリだけです。つまり、128MのRAMを確保できない場合、MySQLは起動しませんが、サーバーは最初はその128Mのメモリを使用しません。バッファプールが完全に利用されるまで、RAMは他のアプリケーションで使用できます。

0
Aaron Brown

128 Mは、歴史的に素晴らしいバッファープールサイズです。しかし、それは今では本当に歴史です:)より多くのプールサイズを与えることを検討してください。多くのパターンでは、サーバーの総メモリの70〜80%をinnodbバッファープールに割り当てる必要があるか、与える可能性があるとしています。 MySQL最適化ステージでは、InnoDBバッファープールの最適化が一般的です。ただし、RAMを誤って見積もることに注意してください。あなたは十分に保つ必要がありますRAM別のタスク用。Apacheなど。まず最初に、サーバーに最適なmy.cnf(構成ファイル)を生成します。これは、シンプルだが優れたPerconaオンラインツールを使用して実行できます。 。それはあなたにとって非常に便利な出発点になります: percona online tools

0