Mysql

無法在 Mysql 中增加 InnoDB 緩衝池大小

  • October 27, 2016

我的數據庫面臨一個非常罕見的問題。我有 64 GB RAM 的 Windows Server,但我無法在 mysql 中增加 innodb 緩衝池大小。

目前 InnoDb 緩衝池大小:1.6G

當我增加它並重新啟動 Mysql 時,它會拋出錯誤:

161026  0:52:30 [Note] Plugin 'FEDERATED' is disabled.
161026  0:52:31  InnoDB: Initializing buffer pool, size = 2.6G
161026  0:52:31  InnoDB: Error: cannot allocate 2816491520 bytes of
InnoDB: memory with malloc! Total allocated memory
InnoDB: by InnoDB 22604620 bytes. Operating system errno: 8
InnoDB: Check if you should increase the swap file or
InnoDB: ulimits of your operating system.
InnoDB: On FreeBSD check you have compiled the OS with
InnoDB: a big enough maximum process size.
InnoDB: Note that in most 32-bit computers the process
InnoDB: memory space is limited to 2 GB or 4 GB.
InnoDB: We keep retrying the allocation for 60 seconds...
161026  0:53:31InnoDB: Fatal error: cannot allocate the memory for the buffer pool
161026  0:53:31 [ERROR] Plugin 'InnoDB' init function returned error.
161026  0:53:31 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
161026  0:53:31 [ERROR] Unknown/unsupported table type: INNODB
161026  0:53:31 [ERROR] Aborting

我沒有 32 位作業系統**,但我的 MYSQL 是 32 位的。** 我的 Windows 伺服器上有 64 位作業系統。

記憶體空間限制為 2 GB 或 4 GB。對於 32 位 Mysql,但我無法將其設為 2 GB,我的 Innodb 只有 1.6 GB。

增加 Innodb 的大小是非常必要的,因為我的錯誤日誌中出現以下錯誤:

MySql.Data.MySqlClient.MySqlException: Can't create a new thread (errno 12); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug

我已經嘗試過的:

  1. 我確認 My my.ini 沒有問題。
  2. 我多次重新啟動我的 mysql,但 innodb 大小沒有增加。最後,我從某個地方得知我的作業系統中對 Mysql 的記憶體分配非常少,這就是作業系統沒有增加其 innodb 大小的原因。
  3. 我增加了windows的虛擬記憶體。之前是 8GB,我增加到 16GB。(此更改只是現在並且不知道其結果,因為它需要重新啟動伺服器並且在 7 小時之前我無法重新啟動我的伺服器) - 你認為這可以解決我的問題嗎?

MySQL 版本:5.1

如果有人知道解決方案,請告訴我,我將非常感謝您。

由於您使用的作業系統是 64 位的,因此您需要確保您使用的 MySQL 版本是 64 位而不是 32 位,如何獲取這些資訊:

show variables like 'version_compile_machine';

如果 MySQL 版本是 32 位,那麼您將得到如下結果

+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| version_compile_machine | i386  |
+-------------------------+-------+
1 row in set (0.00 sec)

注意 MySQL 32 位有限制,不能將記憶體增加到 1.8 到 2G 以上。

如果 MySQl 版本是 64 位,那麼您將得到以下結果

   +-------------------------+---------+
   | Variable_name           | Value   |
   +-------------------------+---------+
   | version_compile_machine | x86_64  |
   +-------------------------+---------+
   1 row in set (0.00 sec)

引用自:https://dba.stackexchange.com/questions/153474