MySQL 说“InnoDB: Initializing buffer pool, size = 128.0M”,是不是说使用了128MB RAM?

How*_*ard 5 mysql innodb linux ubuntu

我只是使用了很少的 InnoDB 表(例如小于 1MB),但是在 MySQL 启动期间,它说

InnoDB: Initializing buffer pool, size = 128.0M
Run Code Online (Sandbox Code Playgroud)

是不是说我用这么小的内存,服务器还是128M内存?

Rol*_*DBA 10

根据 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
;
Run Code Online (Sandbox Code Playgroud)

我在 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>
Run Code Online (Sandbox Code Playgroud)

您可以在 MySQL 启动时设置此值。例如:

将其设置为使用 1G RAM

[mysqld]
innodb_buffer_pool_size=1G
Run Code Online (Sandbox Code Playgroud)

将其设置为使用 256MB 的 RAM

[mysqld]
innodb_buffer_pool_size=256M
Run Code Online (Sandbox Code Playgroud)

在my.cnf中更改后,必须重启mysql才能生效。