萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Windows 服務器 MySQL「Out of memory」錯誤完整解決方案

MySQL 出現 Out of memory (Needed 8164 bytes) 錯誤,意味著記憶體分配超出限制。這在 Windows 服務器環境中較為常見,通常可透過調整 MySQL 配置參數來解決。本文將詳細記錄排查過程與最終解決方案,供遭遇相同問題的開發者參考。

錯誤現象回顧

事件檢視器記錄如下錯誤資訊:

  • 事件類型:錯誤
  • 事件來源:MySQL
  • 事件 ID:100
  • 描述:D:\bin\mysqld: Out of memory (Needed 8164 bytes)

初步嘗試:調整快取相關參數

首先嘗試修改 query_cache_size,但問題未解決。隨後進一步增大以下參數:

  • query_cache_limit
  • max_heap_table_size
  • tmp_table_size

調整前數值均為 16777216 (16MB),調整後均設為 67108864 (64MB)。因業務大量使用預處理語句且結果集較大,這兩個參數對臨時表與記憶體表至關重要。

配置文件修改實踐

在 my.cnf (Windows 下通常為 my.ini) 中新增以下配置:

[mysqld]
max_heap_table_size = 67108864
tmp_table_size = 67108864
query_cache_limit = 67108864

重啟 MySQL 服務後,透過 SHOW VARIABLES 驗證參數已生效。

MySQL 官方預設配置範本說明

MySQL 安裝目錄提供四種預設配置範本,可根據伺服器規格選擇:

配置文件適用場景建議記憶體
my-small.ini小型資料庫、測試環境< 256MB
my-medium.ini中型資料庫、共用伺服器256MB - 512MB
my-large.ini專用資料庫伺服器512MB - 1GB
my-huge.ini企業級專用資料庫伺服器> 1GB

生產環境建議以 my-large.ini 或 my-huge.ini 為基礎,再根據實際負載微調關鍵參數。

核心建議

  • 優先調整 max_heap_table_size 與 tmp_table_size,兩者應保持一致,避免臨時表自動轉為磁碟表導致效能驟降。
  • 若仍報錯,檢查 innodb_buffer_pool_size 是否過大導致系統可用記憶體不足。
  • Windows 環境下注意監控 Commit Limit,必要時調整系統虛擬記憶體設定。

透過上述調整,該錯誤已徹底解決,服務穩定運行至今。

copyright © 萬盛學電腦網 all rights reserved