Google perftools 中的 TCMalloc(Thread-Caching Malloc)針對多執行緒小記憶體分配場景極具優勢。本文記錄將 TCMalloc 注入 MySQL 的完整鏈路:編譯安裝、啟動腳本掛載、lsof 驗證、Sysbench OLTP 壓測對比,量化展示其在高併發下的吞吐提升與延遲降低效果。
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.10/gperftools-2.10.tar.gz tar zxf gperftools-2.10.tar.gz && cd gperftools-2.10 ./configure --prefix=/usr/local/gperftools && make -j$(nproc) && make install echo "/usr/local/gperftools/lib" > /etc/ld.so.conf.d/gperftools.conf && ldconfig
vi /usr/local/mysql/bin/mysqld_safe # 在 "# executing mysqld_safe" 下一行添加: export LD_PRELOAD=/usr/local/gperftools/lib/libtcmalloc.so
systemctl restart mysqld lsof -p $(pidof mysqld) | grep tcmalloc # 輸出包含 libtcmalloc.so 即生效
yum install -y sysbench # 或源碼編譯最新版
--test=oltp --mysql-table-engine=innodb --oltp-table-size=10000 --max-requests=10000 --num-threads=16 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=root --mysql-db=test --mysql-socket=/tmp/mysql.sock
關鍵參數含義:
--oltp-table-size:測試表行數--max-requests:總請求上限,0 為不限--num-threads:併發執行緒數,模擬連線池大小report.txt| 指標 | 原生 MySQL | + TCMalloc | 提升幅度 |
|---|---|---|---|
| Transactions (TPS) | 756.11/sec | 862.83/sec | +14.1% |
| Total Time | 13.23s | 11.59s | -12.4% |
| Avg Latency | 21.14ms | 18.52ms | -12.4% |
| 95% Latency | 56.25ms | 36.49ms | -35.1% |
| Deadlocks | 8 (0.60/s) | 6 (0.52/s) | -13.3% |
| Read/Write Req/sec | 14,376 | 16,402 | +14.1% |
brk/mmap 頻率LD_PRELOAD 路徑在升級、遷移後持久化MALLOC_CONF 微調:percpu_cache:1,lg_dirty_mult:-1TCMalloc 以極低接入成本換取雙位數效能提升,是 MySQL 基礎設施層面的「高性價比優化槓桿」。建議在預發環境全鏈路壓測驗證後,納入標準化部署模版。