mysql飚满问题有一台 mysql 5.7.1 的数据库实例以写入为主,IO 飙到接近100%,可以看到 写入 IOPS 很也高分析mysql飚满问题过程通过 iotop 工具可以看到当前 IO 消耗最高的 mysql 线程查看线程49342的堆栈,可以看到正在进行redo log的刷新,对应的是9号文件9号文件对应的是redo log的第一个文件 为什么 mysql 进程会频繁的刷新 redolog 文件,要结合 redolog 的刷盘策略来分析,关键是 innodb_flush_log_at_trx_commit 参数,默认是1最安全,但在写压力大的情况下,也会带来较大的性能影响,每次事务提交时 mysql 都会把 log buffer 的数据写入 log file 并且 flush (刷到磁盘)中去。 结合这个集群的写入场景来看,大部分都是小事务的写入,每次事务提交都会触发刷盘动作,这种场景下通过增大 innodb_log_buffer_size 和 innodb_log_file_size 的优化效果不明显。mysql飚满优化方案应用层面,对于写压力大的系统,可以将单条...
今天有一个朋友问我了一个问题意思是假设我们有一张表需要每天 定时迁移数据 那么我们在进行迁移的时候某些环境下就会触发自增列 并发插入死锁 问题如下。mysql 死锁问题测试 触发 死锁问题 采用一下 sql 进行 测试 复现insert into data_cache (customerID,organizationID,createTime) ( select customerID,organizationID,createTime from data where DATE(createTime) <= DATE(?) and autoIndex >= ? and autoIndex <= ? ); 大致意思是根据 autoIndex 去判定那些数据需要迁移,在程序中已经分好区域了,比如 1~100 , 101~200 , 201~300 这些,两张表的数据表结构均一致如下CREATE TABLE `data` ( `customerID` varchar(50) NOT NULL COMMENT '客户编号...
当我们通过 mysql 使用 NOT IN 查询时,如果条件字段可以为 NULL 并且值为NULL需要特别注意一下这个时候使用 NOT IN 查询时是查询不到的。测试NULL时反查询不到例子假如我们现在有一个表 useridnickname1张三2李四3NULL4王五现在我们查询用户名不是 张三 和 李四 的用户select * from users where user_name not in ('张三','李四');这个时候我们应该得到的是两条数据idnickname3NULL4王五但是结果却只有一条数据idnickname4王五分析测试NULL时反查询不到问题 这是因为 mysql 中 not in 使用的是 不相等(!=) 比较,即每条记录的 user_name 都和 张三, 李四 进行数据比较。foreach ($user_names as $user_name) { if ($user_name != '张三' && $user_name != '李四') { return true; // 符合条件 }...