性能测试问题总结
目录
对于默认安装的mysql,进行insert插入测试,发现QPS很低
通过iostat -x 1
发现磁盘的IO很高
SHOW VARIABLES LIKE 'sync_binlog';
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
SHOW VARIABLES LIKE 'innodb_flush_method';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'innodb_io_capacity';
sync_binlog:二进制日志文件binlog的刷新写入方式
innodb_flush_log_at_trx_commit:指定了 InnoDB 在事务提交后的日志写入方式
innodb_flush_method:这个参数控制着innodb数据文件及redo og的打开、刷写模式,有以下几种设置:
innodb_buffer_pool_size:这是Innodb最重要的一个配置参数,这个参数控制Innodb本身的缓大小,也影响到,多少数据能在缓存中。建议该参数的配置在物理内存的70%-80%之间。
innodb_io_capacity:动态调整刷新脏页的数量。默认是200,单位是页。
该参数设置的大小取决于硬盘的IOPS,即每秒的输入输出量(或读写次数)。
至于什么样的磁盘配置应该设置innodb_io_capacity参数的值是多少,可参考:
动态设置(也可以在配置文件中设置)
SET GLOBAL sync_binlog = 100;
SET GLOBAL innodb_flush_log_at_trx_commit = 2;
SET GLOBAL innodb_io_capacity = 2000;
[mysqld]
# 配置性能优化
sync_binlog = 100
innodb_flush_log_at_trx_commit = 2
# O_DIRECT (避免双缓冲技术)
innodb_flush_method = O_DIRECT
# 设置为 RAM 大小的 50%-70%,不需要大于数据库的大小
innodb_buffer_pool_size = 6G
# 128M – 2G (不需要大于 buffer pool)
innodb_log_file_size = 2G
innodb_io_capacity = 2000
TODO
当kafka性能较差的时候,生产者可以设置批量发送,提高性能,同时可以解决内存占用过大的问题
场景:业务需要将大量的请求&响应消息写入mongo
方案一:直接写入(缺点:受mongo写入限制,速度慢)
方案二:使用队列,多线程写入(缺点:多线程并发写入容易导致mongo的资源占用忽高忽低,不稳定,表现为QPS忽高忽低)
方案三:由于kafka写入速度更快,先将数据写入kafka,然后起一个消费者慢慢入库
待测试
???