近期发现MySQL slow log 里面有很多慢查询,而分析慢查询日志发现大量的慢查询是insert语句的。在高峰期(早上10点左右)半小时的慢查询量可以到28G左右。遂决定优化
优化方法:
1、 一个客户端在一个时候要插多条数据,那么用多个values
insert into t1 values(...),(...),(...)
如果是往一个非空的表里插数据,可调节bulk_insert_buffer_size(缺省为8388608字节=8M)
2、 如果多个客户端在同时插许多条数据,那么用insert delayed语句
利:客户端马上返回,数据排成一队;数据整齐的写到一个块里,而不是分散。
弊:如果这个表被查获删数据,那么插入会变慢,另外,为这个表起一个handler线程来处理这些数据也要耗费一些额外资源
待插的数据放在内存里,一旦数据库被意外终止(如kill -9),那么数据会丢失。
这个方法只适用于myisam,memory,archive,blackhole引擎类表。
可调节delayed_insert_limit(缺省为一次100条)
delayed_insert_timeout(缺省为300)秒内,若无新的insert delayed语句,则handler线程退出。
delayed_queue_size(缺省为1000条)一旦满了