Mysql
無法在 Mysql 中增加 InnoDB 緩衝池大小
我的數據庫面臨一個非常罕見的問題。我有 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
我已經嘗試過的:
- 我確認 My my.ini 沒有問題。
- 我多次重新啟動我的 mysql,但 innodb 大小沒有增加。最後,我從某個地方得知我的作業系統中對 Mysql 的記憶體分配非常少,這就是作業系統沒有增加其 innodb 大小的原因。
- 我增加了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)