一.硬件
1.从bios设置将cpu和内存 调整为maximum performance模式
2.将c1e,c states设置为disable
3.关闭cpu numa特性(只针对mysql 服务器 )
*由于mysql的单进程多线程特性,因此如果使用numa特性可能会导致memory不能充分被利用。5.6.27版本以后,可以通过修改numa相关参数来避免这个问题。
numa 关闭方法:
3.传统存储模式, io 阵列卡
条带化 strip element size
关闭预读模式 read policy
写策略 write back
强制使用 write back
二.os层面
1.将文件系统格式改为xfs格式
2.io 调度器
dmesg | grep -i sche
vim /etc/grub.conf
cat /sys/block/sda/queue/scheduler
3.swappiness 设置为0,尽可能不使用swap
sysctl -a | grep -i swap
4.dirty(os层面的脏页 )
sysctl -a |grep dirty
dirty_background_ratio = 5 #当脏页超过5% 启动后台进程开始刷脏页
dirty_ratio=10 #如果脏页超过10%,则将刷脏页后台进程优先级提升为最高,此时服务器表现为hang住。
三.mysql 部署规范
1.参数文件
[mysql]
prompt="\u@mysqldb \R:\m:\s [\d]> "
pager="less -i -n -S"
no-auto-rehash #连接后,不读取所有的mysql表
tee="/tmp/query.log" #将查询结果输出到日志中
[mysqld]
interactive_timeout = 600
wait_timeout = 600
tmpdir = 设置专用目录,防止full
slave_load_tmpdir = 设置专用目录,防止full
character-set-server = utf8mb4
open_files_limit = 65535
max_connections = 512 #最大连接数
max_connect_errors = 1000000 #最大错误连接数,超过该值,host将被屏蔽,因此建议设置较大值。
log-output=file
slow_query_log=1
slow_query_log_file=slow.log
log-error=error.log
log_warnings=2
long_query_time=0.1
log-slow-admin-statements=0
log-queries-now-using-indexes=0
log-slow-slave-statements=0
back_log=1024 # back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
table_open_cache = 2048
table_definition_cache = 2048
max_heap_table_size = 64m
tmp_table_size = 64m
sort_buffer_size = 2~4m
read_buffer_size = 2~4m
log-slave-updates =1 #表示slave上也记录一份binlog
relay_log_recovery = 1
innodb_buffer_pool_size = 物理内存60%
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_max_dirty_pages_pct = 50
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout
innodb_status_file=1
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_flush_method = O_DIRECT #绕过os cache直接写入disk
三种模式写数据方式具体如下:
fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。
O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过fsync完成
O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲
1.从bios设置将cpu和内存 调整为maximum performance模式
![](http://img.blog.itpub.net/blog/attachment/201807/8/15412087_1531017295Gg1p.png?x-oss-process=style/bb)
2.将c1e,c states设置为disable
3.关闭cpu numa特性(只针对mysql 服务器 )
![](http://img.blog.itpub.net/blog/attachment/201807/8/15412087_1531017256LKh2.png?x-oss-process=style/bb)
*由于mysql的单进程多线程特性,因此如果使用numa特性可能会导致memory不能充分被利用。5.6.27版本以后,可以通过修改numa相关参数来避免这个问题。
numa 关闭方法:
![](http://img.blog.itpub.net/blog/attachment/201807/8/15412087_1531017559D5I1.png?x-oss-process=style/bb)
3.传统存储模式, io 阵列卡
条带化 strip element size
关闭预读模式 read policy
写策略 write back
强制使用 write back
![](http://img.blog.itpub.net/blog/attachment/201807/8/15412087_15310180885S56.png?x-oss-process=style/bb)
二.os层面
1.将文件系统格式改为xfs格式
2.io 调度器
dmesg | grep -i sche
vim /etc/grub.conf
cat /sys/block/sda/queue/scheduler
3.swappiness 设置为0,尽可能不使用swap
sysctl -a | grep -i swap
4.dirty(os层面的脏页 )
sysctl -a |grep dirty
dirty_background_ratio = 5 #当脏页超过5% 启动后台进程开始刷脏页
dirty_ratio=10 #如果脏页超过10%,则将刷脏页后台进程优先级提升为最高,此时服务器表现为hang住。
三.mysql 部署规范
1.参数文件
[mysql]
prompt="\u@mysqldb \R:\m:\s [\d]> "
pager="less -i -n -S"
no-auto-rehash #连接后,不读取所有的mysql表
tee="/tmp/query.log" #将查询结果输出到日志中
[mysqld]
interactive_timeout = 600
wait_timeout = 600
tmpdir = 设置专用目录,防止full
slave_load_tmpdir = 设置专用目录,防止full
character-set-server = utf8mb4
open_files_limit = 65535
max_connections = 512 #最大连接数
max_connect_errors = 1000000 #最大错误连接数,超过该值,host将被屏蔽,因此建议设置较大值。
log-output=file
slow_query_log=1
slow_query_log_file=slow.log
log-error=error.log
log_warnings=2
long_query_time=0.1
log-slow-admin-statements=0
log-queries-now-using-indexes=0
log-slow-slave-statements=0
back_log=1024 # back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
table_open_cache = 2048
table_definition_cache = 2048
max_heap_table_size = 64m
tmp_table_size = 64m
sort_buffer_size = 2~4m
read_buffer_size = 2~4m
log-slave-updates =1 #表示slave上也记录一份binlog
relay_log_recovery = 1
innodb_buffer_pool_size = 物理内存60%
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_max_dirty_pages_pct = 50
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout
innodb_status_file=1
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_flush_method = O_DIRECT #绕过os cache直接写入disk
三种模式写数据方式具体如下:
fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。
O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过fsync完成
O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15412087/viewspace-2157523/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15412087/viewspace-2157523/