数据库
文章平均质量分 77
思想者001
这个作者很懒,什么都没留下…
展开
-
UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
事务提交时发现事务已被标记为回滚(rollback-only)。请求接口/test会复现UnexpectedRollbackException异常。原因是在调用TestService的事务方法test时,spring会创建一个事务,在调用DealService的事务方法deal时,spring默认传播Propagation_Required,即被调用时如存在事务则使用该事务,因为deal方法的事务和test方法的事务是同一个事务。原创 2023-08-09 17:47:10 · 949 阅读 · 0 评论 -
SQL Mybatis 多层foreach + uinon
表user:DROP TABLE IF EXISTS user;CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id原创 2022-05-09 19:33:57 · 461 阅读 · 0 评论 -
MYSQL order by 索引 为什么还全表扫描+文件排序?
有一张表:CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, `c` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `ic` (`c`(19)) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSE原创 2022-04-12 20:35:56 · 2247 阅读 · 0 评论 -
MYSQL or 导致索引失效
Mysql版本 5.6.50新建表:CREATE TABLE ttt (id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,a mediumint(8) unsigned NOT NULL DEFAULT ‘0’,b mediumint(8) unsigned NOT NULL DEFAULT ‘0’,PRIMARY KEY (id),KEY idx_a (a) USING BTREE,KEY idx_b (b) USING BTREE) EN转载 2022-04-11 15:07:26 · 2809 阅读 · 0 评论 -
慢SQL-mysql in + order by id + limit 导致的慢SQL
背景有通知表,建表SQL如下:CREATE TABLE `perf2_notice_info` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `notice_type` varchar(32) DEFAULT NULL COMMENT '通知类型: ALIWORK_TODO_TASK、EMAIL', `deal_status` varchar(32) DEFAULT 'NOT_START' COMMENT '原创 2022-04-10 00:57:08 · 3129 阅读 · 0 评论 -
慢SQL-处理思路
通过explain 分析原因type至少为range、ref、const,如果为all和index说明执行了全表扫描extra中如果出现using filesort 和 using temporary 则可能因为排序和或者使用临时表导致SQL性能差,使用using index(覆盖索引) 或者 using index conditon(索引下推)来提高性能。优化索引索引失效最左匹配索引:KEY `idx_shopid_orderno` (`shop_id`,`order_no`)SQL 语原创 2022-04-09 22:29:26 · 957 阅读 · 0 评论 -
MySQL INNODB是怎么加锁的?
怎么查询?查询无处不在,无论是select 还是update、delete,首先要做的就是查询是否存在目标记录。innodb的表是由几棵索引树组成的,首先有一颗主键索引树,每行完整数据只存在于其叶子节点上,非叶子节点仅用于排序;然后还有唯一索引树和普通索引树,唯一索引树和普通索引树的叶子节点仅存储索引值和主键值,因此通过唯一索引或普通索引查询时,可能需要再根据主键索引值查询主键索引树,这也就是所谓的回表查询。索引树均是向上排序,即左边的叶子节点一定比右边的叶子节点的小,普通索引树中相等的几个索引值的叶原创 2020-08-06 22:51:35 · 1333 阅读 · 2 评论 -
线上故障排查思路
思维导图MySQL 排查常用命令# 查询慢SQL查询是否开启show variables like 'slow_query_log';# 查询慢SQL的时间show variables like 'long_query_time';# 查看慢SQL存放路径,一般:/home/mysql/data3016/mysql/slow_query.logshow variables like 'slow_query_log_file';# 查看数据库的事务隔离级别,RDS:READ-COMMIT原创 2022-03-11 15:19:25 · 2225 阅读 · 0 评论 -
InnoDB 中一棵高度3的 B+ 树可以存放多少行数据?
InnoDB 中一棵 B+ 树可以存放多少行数据?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是4k,而对于我们的InnoDB存储引擎也有自己转载 2020-09-29 16:05:53 · 695 阅读 · 0 评论 -
Select for update就安全了么?间隙锁导致死锁
Select for update就安全了么?背景有一个短信表:CREATE TABLE `t_msg` ( `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `Mobile` VARCHAR(20) NOT NULL COMMENT '手机号', `Content` VARCHAR(1000) NOT NULL COMMENT '短信内容', `Status` SMALLINT(6) NOT NULL COMMENT '短信状态;1:待发送;原创 2020-09-25 10:22:10 · 6681 阅读 · 2 评论 -
MySQL 两阶段事务的作用
有如下表:select * from tt;+----+-------+| id | value |+----+-------+| 1 | 1 |+----+-------+有如下方法:@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)public int increAndGet(int id){ incre(id); return get(id)原创 2020-08-26 11:42:25 · 153 阅读 · 0 评论 -
MySQL 常用的 procedure
delimiter ;;create procedure idata()begin declare i int; set i=1; while(i<=100000)do insert into t values(i, i, i); set i=i+1; end while;end;;delimiter ;call idata();原创 2020-09-01 17:57:25 · 945 阅读 · 0 评论 -
Mybatis中Order By 不能使用#号
mybatis中使用#号可以防止SQL注入,但是order by却不能使用#而必须使用$,这是为什么呢?测试环境:CREATE TABLE `t2` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `value` VARCHAR(50) NULL DEFAULT '0', PRIMARY KEY (`id`))ENGINE=InnoDB;mysql> select * from t2;+----+-------+| id | va原创 2020-08-22 12:21:37 · 3355 阅读 · 1 评论 -
记一次MySQL重复插入问题 可重复读和读提交 间隙锁
问题描述MySQL 5.7 有表t2:CREATE TABLE `t2` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `idx_f` INT(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), INDEX `idx_f` (`idx_f`))COLLATE='utf8_general_ci'ENGINE=InnoDB;mysql> select * from t2;+原创 2020-08-13 21:52:16 · 1191 阅读 · 0 评论 -
如何读懂MySQL死锁日志
测试环境:CREATE TABLE `test` ( `id` INT(10) NOT NULL, `str` VARCHAR(50), PRIMARY KEY (`id`), UNIQUE INDEX `str` (`str`))COLLATE='utf8_general_ci'ENGINE=InnoDB;INSERT INTO `test` (`id`, `str`) VALUES (10234567, '1sdfsdfsdfsdfsdfsdfsdfsdfsdflkj;lkjlkh原创 2020-08-10 19:56:22 · 1980 阅读 · 0 评论 -
分享一次因为Redis持久化超时导致服务器重启的事件
写在前面记录一次Redis持久化超时导致服务器重启的系统事件。建议首先阅读 https://blog.csdn.net/zhouwenjun0820/article/details/1058813131. 持久化监控(1)可以通过指定命令【info persistence】查询当前Redis实例持久化状态,如下图:其中【rdb_last_bgsave_time_sec】是上一次rdb...原创 2020-05-02 18:58:22 · 1224 阅读 · 0 评论 -
彻底明白Redis集群主从切换原理
写在前面参考文章:https://www.cnblogs.com/dadonggg/p/8628735.html1.Redis Cluster为了支持高可用,Redis提供了集群部署方案,当master发生故障时,能及时进行主从切换。客户端使用参数【-c】连接集群中任意一个节点,无论是主还是从,都没有任何区别,都能访问整个集群。这是因为Redis集群是去中心化的,每个节点都维护着集群...原创 2020-05-02 17:53:08 · 25248 阅读 · 4 评论 -
彻底明白Redis主从同步原理
1.主从复制两个Redis实例(可ip相同port不同),可使用slaveof命令设置主从关系。redis采用乐观同步策略,即容忍短时间内主从不一致,但是保证最终一致性,主从复制分为三个阶段:连接阶段数据同步阶段命令传播阶段2.连接阶段当slave执行完salveof ${master_ip} ${master_port}命令时,slave向master发起socket连接,mas...原创 2020-05-01 23:15:03 · 2449 阅读 · 1 评论 -
彻底明白Redis持久化原理
写在前面参考文章:https://blog.csdn.net/qq_41453285/article/details/1032982851.Redis持久化为什么要持久化?为了重启恢复或者故障恢复。Redis提供了两种持久化方案,分别是RDB和AOF。1.1 RDB1.1.1 概述定时对内存进行快照存储,默认保存为dump.rdb文件,快照完成后替换旧rdb文件。1.1.2 ...原创 2020-05-01 19:26:02 · 1111 阅读 · 0 评论