在 使用netty 框架的时候如果用来处理数据 进行数据库的插入从而对后续的检测提供数据。那么如果传感器客户端 发送数据量大的时候 数据库的插入压力会很大。这时候有两种方法一种就是减少客户端传感器的发送检测数据的频率,另一种方式从数据库存储引擎上下功夫。我们知道 innodb_flush_log_at_commit = N 和sysc_binlog = M 这两个参数是十分重要的。
当N= 1 的时候 是十分“严谨”的,即每次事务提交的时候log Thread 不仅将redolog_buffer 中的内容写到redo_log 中,同时将redo_log刷到磁盘中。
当N = 2 的时候,是稍微不严谨的,当你提交事务的时候只是将log_buffer 中写入log_file ,至于数据什么时候真正刷入磁盘中,取决于操作系统的调度大致是每秒一次刷盘。
当N = 0 的时候,是最不严谨的,当你提交事务的时候并不会引起写日志文件 ,或者刷盘,而是直接每秒进行将log buffer 中的写到日志文件和log file 的刷盘操作。性能最好 但是也不安全。
当M = 0 的时候,是指每次写日志文件的时候,不会进行刷盘操作,而是由操作系统控制。
当M > 0 的时候,是每隔N个事务 或者N条sql语句才进行刷盘操作。
我们适当的设置N 为 M 为20 或者50 来减少io压力。
所以 应该 根据业务进行合适的设置值。
回忆一条sql 执行流程:执行sq 修改内存中数据数据 之后应该是写redo log (prepare) 写bin log(commit) 然后提交事务。