注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

MySQL InnoDB联合索引讲解

联合索引是指对表上的多个列进行索引,其创建方法与单个索引一样,不同之处仅在于有多个索引列。例如,以下代码创建了一张t表,并且索引idx_a_b是联合索引,联合的列为(a,b)。 create table t(a int, b int, primary key(a), key idx_a_b(a,b)) engine=innodb……继续阅读 »

彭东稳 1个月前 (09-11) 426浏览 0评论 0个赞

优化InnoDB磁盘I/O

优化InnoDB磁盘I/O 如果你遵循数据库设计和调优技术的最佳做法,但由于磁盘I/O活动较大,你的数据库仍然很慢,请考虑这些磁盘I/O优化。如果top工具显示你的CPU使用率百分比低于70%,则你的工作负载可能是磁盘导致的。几种优化方式如下: 增加缓冲池大小 当表数据缓存在InnoDB缓冲池中时,可以通过查询重复访问,而不需要任何磁盘I/O。使用inn……继续阅读 »

彭东稳 2个月前 (09-04) 596浏览 0评论 1个赞

MySQL索引原理及SQL优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少……继续阅读 »

彭东稳 2个月前 (08-28) 587浏览 0评论 3个赞

MySQL InnoDB恢复过程详解

InnoDB如果发生意外宕机了,数据会丢么?对于这个问题,稍微了解一点MySQL知识的人,都会斩钉截铁的回答:不会!为什么?他们也会毫不犹豫的说:因为有重做日志(redo log),数据可以通过redo log进行恢复。回答得很好,那么InnoDB怎样通过redo log进行数据的恢复的,具体的流程是怎样的?估计能说清楚这个问题的人剩的不多了,更深入一点:除……继续阅读 »

彭东稳 4个月前 (07-06) 1042浏览 0评论 0个赞

MySQL InnoDB MVCC实现

数据多版本(MVCC)是MySQL实现高性能的一个主要的方式,通过对普通的SELECT不加锁,直接利用MVCC读取指版本的值,避免了对数据重复加锁的过程,今天我们就用最简单的方式,来分析下MVCC具体的原理,先解释几个概念: 隐藏列 在分析MVCC原理之前,先看下InnoDB中数据行的结构: 在InnoDB中,每一行都有2个隐藏列DATA_TRX_ID和D……继续阅读 »

彭东稳 4个月前 (07-06) 740浏览 0评论 0个赞

MySQL 5.7 InnoDB COUNT(*)优化

在MySQL 5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算。 使用 实际上records接口函数是在优化阶段调用的,在满足一定条件时,直接去计算行级计数。其explain出来的结果相比老版本也有所不同,这里我们使用sysbench的sbtest表来进行测试,共200万行数据……继续阅读 »

彭东稳 4个月前 (06-27) 927浏览 0评论 1个赞

MySQL InnoDB聚簇及辅助索引

一、B+树索引 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成? 我们都知道CPU是很快的,磁盘是很慢的,……继续阅读 »

彭东稳 5个月前 (05-31) 1228浏览 0评论 2个赞

MySQL死锁问题分析

线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”。 Oh, My God! 是死锁问题。尽管报错不多,对性能目前看来也无太大影响,但还是需要解决,保不齐哪天成为性能瓶颈。为了更系统的分析问题,本文将从死锁检测、索引隔离级别与锁的关系、死锁成因、问题定位这五个方面来展开讨论。 ……继续阅读 »

彭东稳 5个月前 (05-27) 1213浏览 0评论 1个赞

MySQL InnoDB缓冲池配置详解

一、InnoDB缓冲池 InnoDB维护一个称为缓冲池的内存存储区域 ,用于缓存内存中的数据和索引。了解InnoDB缓冲池的工作原理,并利用它来保存内存中经常访问的数据,这是MySQL调优的一个重要方面。有关InnoDB缓冲池如何工作的信息,请参阅InnoDB缓冲池LRU算法。 1.1 LRU(least recently used) InnoDB管理buf……继续阅读 »

彭东稳 5个月前 (05-25) 1922浏览 2评论 2个赞

MySQL InnoDB缓冲池预读

InnoDB在I/O的优化上有个比较重要的特性为预读,预读请求是一个i/o请求,它会异步地在缓冲池中预先回迁多个页面,预计很快就会需要这些页面,这些请求在一个范围内引入所有页面。InnoDB以64个page为一个extent,那么InnoDB的预读是以page为单位还是以extent? 这样就进入了下面的话题,InnoDB使用两种预读算法来提高I/O性能:线……继续阅读 »

彭东稳 5个月前 (05-24) 975浏览 0评论 1个赞

MySQL InnoDB Monitor

 一、InnoDB Monitor 在MySQL处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数、锁类型等。于是,需要能查看到更详细的事务锁占用情况。 MySQL提供一套InnoDB监控机制,用于周期性(每15钞)输出InnoDB运行相关状态(In……继续阅读 »

彭东稳 5个月前 (05-24) 622浏览 0评论 0个赞