Mysql关键配置
- innodb_buffer_pool_size
缓冲池是数据和索引缓存的地方
这个值越大越好,这能保证你在大多数的读取操作时使用的是内存而不是硬盘
对性能影响非常大,一般可以设置内存的50~80% - innodb_log_file_size
这是redo日志的大小
redo日志被用于确保写操作快速而可靠并且在崩溃时恢复
MySQL 5.5和5.6及以上版本可以调整,根据业务设置成500M到几G
应用程序需要频繁的写入数据,可以设置大点 - innodb_file_per_table
是否采用独立表空间
默认关闭,建议都设置成独立表空间
如果不设置,磁盘空间满了,删除表空间也无法释放,必须做数据迁移 - log-bin
是否开启binlog
默认关闭,生产项目建议开启
回滚和数据恢复
审计 - max_connections
应用程序没有正确的关闭数据库连接,Too many connections错误
默认是100,建议设置成1000
应用程序里使用连接池或者在MySQL里使用进程池 - lower_case_table_names
是否区分大小写
默认区分,生产使用根据业务需求调整 - character_set_server
字符集
迁移、数据库变更、数据导入等都是必须要注意的,不然数据乱码了就会很麻烦压力测试
1.Sysbench
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试
内置很多lua脚本:
oltp_read_write.lua
oltp_read_only.lua
oltp_write_only.lua
oltp_insert.lua
oltp_delete.lua
oltp_commit.lua压测结论
- innodb_buffer_pool_size配置为4G,innodb_log_file_size配置为1G,在300线程数的情况下,mysql的QPS可以达到20000,mysql的TPS可以达到1000。(生产可以选择此配置,所需资源较少)
- innodb_buffer_pool_size配置为6G,innodb_log_file_size配置为1G,在1000线程数的情况下,mysql的QPS可以达到25000,mysql的TPS可以达到1267。(在服务器为8核CPU、16G内存、7200转磁盘的配置下,为最优的mysql配置)
- 在继续增加mysql内存和线程数的情况下,性能提升不是很大,CPU成为提升性能的瓶颈。
常用的查询
— 查看当前连接数
show STATUS like ‘Threads%’;
— 查看最大连接数
show variables like ‘%max_connections%’;
— 查看缓存池大小
show variables like ‘%innodb_buffer_pool_size%’;
— 查看最大被使用的数量
show global status like ‘Max_used_connections’;
— 查看日志缓存大小
show variables like ‘%innodb_log_buffer_size%’;
— 查看日志文件大小
show variables like ‘%innodb_log_file_size%’;