数据库
数据库
S-U-M-M-E-R
这个作者很懒,什么都没留下…
展开
-
Redis单线程处理IO请求性能瓶颈
Redis单线程处理IO请求性能瓶颈主要包括2个方面:1、任意一个请求在server中一旦发生耗时,都会影响整个server的性能,也就是说后面的请求都要等前面这个耗时请求处理完成,自己才能被处理到。耗时的操作包括以下几种:a、操作bigkey:写入一个bigkey在分配内存时需要消耗更多的时间,同样,删除bigkey释放内存同样会产生耗时;b、使用复杂度过高的命令:例如SORT/SUNION/ZUNIONSTORE,或者O(N)命令,但是N很大,例如lrange key 0 -1一次查询全量数据;转载 2021-02-06 01:22:28 · 683 阅读 · 0 评论 -
mysql主从关键特性
binlog 的三种格式:一种是 statement,一种是 row。可能你在其他资料上还会看到有第三种格式,叫作 mixed,其实它就是前两种格式的混合。进入mysql的bin目录,用mysqlbinlog工具查看binlog。例如mysqlbinlog ../data/mysql-bin.000011 --base64-output=decode-rows -v | more 其中的: --base64-output=decode-rows –v 选项解析中,base64-output,可以..转载 2021-02-05 00:30:20 · 161 阅读 · 0 评论 -
MySQL 是“怎么保证 redo log 和 binlog 是完整的”
1.事务执行过程中先把日志写到binlog cache ,事务提交的时候再把binlog cache 写入到binlog文件中2.binlog cache ,系统为每个线程分配了一片binlog cache内存。,参数binlog_cache_size控制单个线程内binlog cache大小。如果超过这个大小就要暂存到磁盘3.事务提交的时候,执行器把binlog cache 里完整的事务写入binlog中。并清空binlog cache。 4.每个线程都有自己的binlog cache,共用一份bin转载 2021-02-04 23:39:57 · 280 阅读 · 0 评论 -
mysql引起查询变慢的原因
转载 2021-02-04 22:54:54 · 199 阅读 · 0 评论 -
mysql 45讲中对加锁规则的总结
转载 2021-02-04 22:30:13 · 335 阅读 · 0 评论 -
mysql特性之WAL两阶段提交(redolog+binlog)
问题一:在两阶段提交的不同时刻,MySQL 异常重启会出现什么现象?1.如果在图中时刻 A 的地方,也就是写入 redo log 处于 prepare 阶段之后、写 binlog 之前,发生了崩溃(crash),由于此时 binlog 还没写,redo log 也还没提交,所以崩溃恢复的时候,这个事务会回滚。这时候,binlog 还没写,所以也不会传到备库。2.在时刻 B,也就是 binlog 写完,redo log 还没 commit 前发生 crash,那崩溃恢复的时候 MySQL 会怎么处理?.转载 2021-02-02 00:48:23 · 857 阅读 · 0 评论 -
mysql之count(*)为啥这么慢
结论:MyISAM 表虽然 count() 很快,但是不支持事务;show table status 命令虽然返回很快,但是不准确;InnoDB 表直接 count() 会遍历全表,虽然结果准确,但会导致性能问题。如果你现在有一个页面经常要显示交易系统的操作记录总数,到底应该怎么办呢?答案是,我们只能自己计数。count(*)优化策略InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于 count(*) 这样的操作,遍历哪原创 2021-02-02 00:20:39 · 146 阅读 · 0 评论 -
mysql crud造成数据空洞的原因
mysql数据空洞删除时,如果重新添加新的数据还在(删除所包含的区间),且不会产生页分裂的情况下,该空洞可以被复用如果数据页写满的时候,会产生页分裂,会产生新的数据空洞 页合并是页分裂的逆过程,当两个相邻页面利用率较低时,会发生页合并。如果数据是按照索引递增顺序插入的,那么索引是紧凑的。但如果数据是随机插入的,就可能造成索引的数据页分裂。另外,更新索引上的值,可以理解为删除一个旧的值,再插入一个新值。不难理解,这也是会造成空洞的。解决方案alter table A engine=InnoDB原创 2021-02-01 23:52:10 · 350 阅读 · 0 评论 -
mysql刷脏页的过程
刷脏页的场景:1.redo log写满(redo log本质是一个定长的循环队列) 2.内存写满(淘汰页面) 3.定时写回 4.关闭mysql时写回 3.4影响较小。InnoDB 的刷盘速度两个因素:一个是脏页比例,一个是 redo log 写盘速度。参数 innodb_max_dirty_pages_pct 是脏页比例上限,默认值是 75%;按照 innodb_io_capacity 定义的能力乘以 R% 来控制刷脏页的速度;一个场景例子buffer pool里维护着一个脏页列表,假设现原创 2021-02-01 22:09:34 · 665 阅读 · 0 评论 -
mvcc方便理解版本
一个数据版本,对于一个事务视图来说,除了自己的更新总是可见以外,有三种情况:版本未提交,不可见;版本已提交,但是是在视图创建后提交的,不可见;版本已提交,而且是在视图创建前提交的,可见。现在,我们用这个规则来判断图 4 中的查询结果,事务 A 的查询语句的视图数组是在事务 A 启动的时候生成的,这时候:(1,3) 还没提交,属于情况 1,不可见;(1,2) 虽然提交了,但是是在视图数组创建之后提交的,属于情况 2,不可见;(1,1) 是在视图数组创建之前提交的,可见。...转载 2021-01-31 22:17:02 · 135 阅读 · 0 评论 -
mysql锁
FTWRL 前有读写的话 ,FTWRL 都会等待 读写执行完毕后才执行FTWRL 执行的时候要刷脏页的数据到磁盘,因为要保持数据的一致性 ,理解的执行FTWRL时候是 所有事务 都提交完毕的时候mysqldump + -single-transaction 也是保证事务的一致性,但他只针对 有支持事务 引擎,比如 innodb所以 还是强烈建议大家在创建实例,表时候需要innodb 引擎 为好全库只读 readonly = true 还有个情况在 slave 上 如果用户有超级权限的话 readon转载 2021-01-31 17:01:46 · 98 阅读 · 0 评论 -
mysql 索引
1、覆盖索引:如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据2、最左前缀:联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符3、联合索引:根据创建联合索引的顺序,以最左原则进行where检索,比如(age,name)以age=1 或 age= 1 and name=‘张三’可以使用索引,单以name=‘张三’ 不会使用索引,考虑到存储空间的问题,还请根据业务需求,将查找频繁的数据进行靠左原创 2021-01-31 16:16:30 · 124 阅读 · 0 评论 -
mysql事物相关
1.事务的概念是什么?事务是对数据库中数据操作的保证数据逻辑一致的最小操作单位。2.mysql的事务隔离级别读未提交, 读已提交, 可重复读, 串行各是什么意思?读未提交:一个事务读取到了其他事务未提交的操作。读已提交:一个事务读取到了其他事务已经提交的操作。可重复读:一个事务从它开始到结束整个生命周期中,所能读取到的数据内容和它启动的时候所能读到的数据内容是相同的。不会出现在事务运行的整个过程中,不同的时间点读取到的数据不一样的情况。串行化:所有的事务都进行排队执行,事务之间不存才并发的情况。转载 2021-01-31 15:10:23 · 268 阅读 · 1 评论 -
SQL语句是如何执行的(mysql)
一 、mysql架构图二 、sql执行顺序select 语句sql执行顺序(1)from(3) join(2) on(4) where(5)group by(开始使用select中的别名,后面的语句中都可以使用)(6) avg,sum…(7)having(8) select(9) distinct(10) order by(11) limit...原创 2020-10-05 15:35:04 · 177 阅读 · 0 评论