執行緒專用記憶體為每個客戶端連線獨享,用於儲存排序、分組、連接、讀寫緩衝、結果集暫存等操作資料。大多數可透過參數控制大小,但總記憶體消耗 = 單執行緒配置 × 最大連線數,配置不當極易導致 OOM 或嚴重 Swap,反而拖垮效能。本文詳細解析各專用記憶體用途、參數與調優要點。
thread_stacksort_buffer_sizeORDER BY、GROUP BY、DISTINCT 等排序操作(filesort)SELECT * 增加排序行寬join_buffer_sizeread_buffer_sizeread_rnd_buffer_sizenet_buffer_size(初始值),max_allowed_packet(上限)max_allowed_packet 控制上限bulk_insert_buffer_sizeINSERT ... VALUES(),(),() 批量插入、LOAD DATA INFILEtmp_table_size、max_heap_table_sizeORDER BY、GROUP BY、DISTINCT、UNION 等需臨時表的操作MIN(tmp_table_size, max_heap_table_size)專用記憶體總量 = Σ(各參數) × max_connections
max_connections=151,若每執行緒分配 10MB,理論峰值超 1.5GBsort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_size 維持預設或微調;tmp_table_size/max_heap_table_size 設 64MB-256MB;重點投資共享記憶體Created_tmp_disk_tables、Sort_merge_passes、Select_full_join 等狀態變數判斷是否需調整執行緒專用記憶體是「雙面刃」:適度配置加速單查詢,過度配置拖垮整體穩定。核心原則:共享記憶體優先,專用記憶體保守,靠索引與 SQL 優化解決效能問題,而非單純堆疊記憶體。