03 MySQL服务器优化
原文链接: 03 MySQL服务器优化
如何配置一个进程只跑在单个CPU上?
CPU性能调优方法之一:把进程或线程绑定在单个CPU上,这可以增加进程的CPU缓存速度,提高它的内存I/O性能。方法如下:
# 启动MySQL,将该进程绑定到CPU1上
taskset -c 1 mysqld_safe --defaults-file=/u01/conf/my3306.cnf &
# 使用sysbench压测工具查看CPU绑定后效果
drop database test;
create database test;
sysbench /usr/local/share/sysbench/tests/include/oltp_legacy/select.lua \
--oltp-table-size=100000 --mysql-table-engine=innodb --db-driver=mysql \
--mysql-user=root --mysql-password=root123 --mysql-port=3306 \
--mysql-host=10.245.231.202 --mysql-db=test \
--events=0 --time=60 --oltp-tables-count=20 --report-interval=10 --threads=2 prepare
sysbench /usr/local/share/sysbench/tests/include/oltp_legacy/select.lua \
--oltp-table-size=100000 --mysql-table-engine=innodb --db-driver=mysql \
--mysql-user=root --mysql-password=root123 --mysql-port=3306 \
--mysql-host=10.245.231.202 --mysql-db=test \
--events=0 --time=60 --oltp-tables-count=20 --report-interval=10 --threads=2 run
使用top
命令,查看每个CPU的负载(按1查看),截图如下:
从上图中可以看出MYSQL
的进程绑定到CPU1
上了
基于Linux中可用内存即将耗尽时为了释放更多内存会采取的步骤
# 释放前
free -m
#------------------------------------------------------------------------------
total used free shared buffers cached
Mem: 7982 5165 2816 0 180 3661
-/+ buffers/cache: 1324 6658
Swap: 16143 19 16124
#------------------------------------------------------------------------------
cat /proc/sys/vm/drop_caches
0
sync
echo 3 > /proc/sys/vm/drop_caches
cat /proc/sys/vm/drop_caches
3
# drop_caches 的值可以是 0-3 之间的数字,代表不同的含义:
# 0:不释放(系统默认值)
# 1:释放页缓存
# 2:释放 dentries 和 inodes
# 3:释放所有缓存
# 释放后
free -m
#------------------------------------------------------------------------------
total used free shared buffers cached
Mem: 7982 1196 6785 0 2 28
-/+ buffers/cache: 1165 6816
Swap: 16143 19 16124
#------------------------------------------------------------------------------
# 释放完内存后改回去让系统重新自动分配内存。
echo 0 >/proc/sys/vm/drop_caches
逻辑I/O和物理I/O有什么区别?随机I/O和连续I/O有什么区别?
逻辑I/O和物理I/O区别
- 逻辑I/O是指指读取内存中的数据
- 物理I/O是指直接读取物理磁盘中的文件
随机I/O和连续I/O区别
- 随机I/O需要花费昂贵的磁头旋转和定位来查找
- 连续IO访问的速度远远快于随机IO
- 连续I/O一般只需扫描一次数据,缓存连续I/O的用处不大
- 缓存随机I/O可以节省更多的workload
描述一个网络接口工作超负荷会发生什么,包括对应用程序性能的影响。
ping值过高,丢包严重,应用程序连接访问缓慢
杂记
解决free内存不足和numa架构内存分配不均
- 保证系统有足够多free内存,这个可以通过设置内存参数
- vm.min_free_kbytes= NNNNN 当系统free内存少于这个时,内核会启动回收内存,进程在分配内存时也会启动回收内存
- vm.extra_free_kbytes= NNNNN 当系统free内存少于这个时,内核会从pagecache回收内存(用户进程不会回收内存)
- vm.min_free_kbytes= NNNNN 当系统free内存少于这个时,内核会启动回收内存,进程在分配内存时也会启动回收内存
- 在突然大量连接到来之前保留足够free内存
- 采用交叉内存分配模式启动mysql或其它需要大内存的系统,保持多个节点之间内存分配平衡
numactl--interleave all command
- 优化mysql的%buffer%等参数内存分配,避免过大不合理参数
其他
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
numactl --hardware
# 内存带宽计算工具
/ptu40_005_lin_intel64/bin/vtbwrun-c -A
# 下载地址:
# http://www.processorportal.com/Download_Intel_Performance_Tuning_Utility_4_0_Update_5/tree3f-aggregator_news_item--103398-/