MySQL InnoDB联合索引学习
联合索引是指对表上的多个列进行索引,其创建方法与单个索引一样,不同之处仅在于有多个索引列。例如,以下代码创建了一张t表,并且索引idx_a_b是联合索引,联合的列为(a,b)。 create table t( a int, b int, primary key(a), key idx_a_b(a,b) ……
MySQL InnoDB磁盘I/O优化
一、影响SQL执行性能因素 影响SQL执行性能的关键就在于磁盘,数据库优化大部分工作都是在做磁盘的优化,比如尽可能把随机读写转换为顺序读写、预读、加大buffer pool、优化SQL尽量无磁盘操作等。 mysql> show global status like 'i%read%'; +----------------……
MySQL主机CPU负载太高解决思路
首先考虑,CPU为什么会占用过高?答案是CPU很忙,那么什么会导致CPU很忙呢? 1. 频繁的上下文切换 2. 计算量巨大 3. 磁盘访问等待严重 4. 死循环 5. 等等,还有我不知道的 遵循上面的分析,可以推导,在MySQL服务器上,如果看到CPU过高,该怎么解决问题? 频繁的上下文切换包括:锁很多,等待处理的线程特别多。这种情况在MySQL服务器上该如……
MySQL索引原理及SQL优化
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少……
针对SSD的MySQL IO优化
现在数据库标配基本都是SSD了,在使用SSD之前,对SSD进行了充分的测试,这其中当然包括最为关键的性能测试部分。下面就跟大家分享一下在SSD性能测试过程中遇到的一个问题和解决问题的思路。 我们的性能测试使用的测试工具是Sysbench,测试场景主要包括5类:全内存非事务更新(nontrx)、全内存事务更新(complex)、非全内存查询(select)、非……
MariaDB用户统计功能介绍
一、用户统计 MariaDB 5.2.0中引入了用户统计信息,MariaDB的用户统计实现基于Percona和Ourdelta的userstatv2补丁,原始代码来自Google(Mark Callaghan的团队),还有来自Percona,Ourdelta和Weldon Whipple的额外工作。MariaDB实现提供与userstatv2补丁相同的功能,……
使用pt-duplicate-key-checker检查MySQL重复索引
pt-duplicate-key-checker这款工具也是percona-toolkit中一款非常适用的工具,它可以帮助你检测表中重复的索引或者主键。我们知道索引会更查询带来好处,但是过量的索引反而可能会使数据库的性能降低,这款工具可以帮助我们找到重复的索引并且还会给你删除重复索引的建议语句,非常好用。 首先看我的这张表的索引结构 ……
MySQL备份恢复:Xtrabackup锁问题分析
从XtraBackup的备份过程可以看出,XtraBackup可以实现Innodb表的无锁备份,但是一个数据库中,即使所有的业务表都是InnoDB表,但是还存在一些MySQL系统库下的user表等,均是myisam表(MySQL 8.0均替换为InnoDB),同时备份过程需要获取Binlog文件名和位置,也要保证表定义文件的一致性,所以从整个实例的角度,即使……
为什么I/O慢会导致Linux负载飙升?
一、CPU利用率和负载率的区别 先来一张 top 命令图。 这里要区别 CPU 负载(Load)和 CPU 利用率,它们是不同的两个概念,但它们的信息可以在同一个 top 命令中进行显示。 什么是负载? 简单来说,负载(Load)指标表示一段时间内,系统有多少个运行的任务,也就是 CPU 使用队列的长度统计信息,这个数字越小越好。任务的统计包含: 正在 ……
MySQL一条SQL语句查询执行过程
我们总是希望 MySQL 能够获得更高的查询性能,最好的办法是弄清楚 MySQL 是如何优化和执行查询的。一旦理解了这一点,就会发现:很多的查询优化工作实际上就是遵循一些原则让 MySQL 的优化器能够按照预想的合理方式运行而已。 同样,对于 MySQL 这个软件的整体架构我们也应该熟记于心,不能只会使用。比如,你有个最简单的表,表里只有一个 ID 字段,在……
MySQL支持的SQL模式介绍
一、SQL模式介绍 MySQL服务器可以在不同的SQL操作模式,并能应用这些模式不同的客户,根据不同的价值SQL模式系统 变量。数据库管理员可以设置全局SQL模式相匹配的网站服务器操作要求,每个应用程序可以设置会话 SQL模式自身的要求。 SQL模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查。这样可以更容易地在不同的环境中使用MySQL,……
MySQL CASE和IF语句使用
SQL语句中的case语句与高级语言中的switch语句,是标准SQL的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作。 首先,让我们看一下CASE的语法。在一般的SELECT中,其语法格式如下: CASE <单值表达式> WHEN <表达式值> THEN <SQL语句或……