MySQL基准测试数据准备
mysql 5.7.26sysbench 1.1.0一、创建测试库create database sysbenchtest;二、创建测试用户grant all PRIVILEGES on sysbenchtest.* to sysbenchuser@'%' identified by
sysbench测试主机CPU
系统:CentOS 7.4工具:sysbench 1.0.17查看测试CPU命令参数:# sysbench cpu help sysbench 1.0.17 (using system LuaJIT 2.0.4) cpu options: --cpu-max-prime
sysbench测试磁盘IO
系统:CentOS 7.4工具:sysbench 1.0.17测试IO性能分三个阶段:准备阶段、运行阶段和清理阶段准备阶段:# sysbench --file-num=20 --threads=20 --file-total-size=100G --events=1000000 --file-test-mode=rndrw&nb
sysbench测试主机memory
系统:CentOS 7.4工具:sysbench 1.0.17查看测试memory命令参数:sysbench memory help sysbench 1.0.17 (using system LuaJIT 2.0.4) memory options: --memory-bl
MySQL索引之cardinality
查看一个表的索引:mysql> show index from rank_item; +-----------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+----
Innodb关键特性之启动、关闭和恢复
参数innodb_fast_shutdown影响着表的存储引擎为Innodb的行为,该参数可以取值为0、1、2,默认值为1,支持全动态局设置。设置为1:关闭MySQL的时候不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘。设置为0:会做清除脏页和插入缓冲区的合并操作,也会将脏页全部刷新到磁盘上面去,但是这个时候关闭的速度也是最慢的。
Innodb关键特性之刷新邻接页
1、工作原理 当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做的好处显而易见,通过AIO可以将多个IO写入操作合并为一个IO操作,增大写入量,减少了物理写IO,故该工作机制在传统机械磁盘下有着显著的优势。 1、在写入次数基本不增加的情况下,增加了写入的量; 2、加速了脏页的回收; 3、充分利用double write每次1
Innodb关键特性之异步IO(AIO)
1、关于AIO与SIO 为了提高磁盘操作性能,当前的数据库系统都采用异步IO的方式来处理磁盘操作。 1、异步IO:用户可以在发出一个IO请求后立即再发出另外一个IO请求,当全部IO请求发送完毕后,等待所有IO操作完成,这就是AIO。 2、与AIO对应的是Sync IO,即每进行一次IO操作,需要等待此次操作结束才能继续接下来的操作。2、开启异步IO 首先OS要有异步io,且开启,然后mys
Innodb关键特性之Adaptive Hash Index
众所周知,InnoDB使用的索引结构是B+树,但其实它还支持另一种索引:自适应哈希索引。哈希表是数组+链表的形式。通过哈希函数计算每个节点数据中键所对应的哈希桶位置,如果出现哈希冲突,就使用拉链法来解决。更多内容可以参考 百度百科-哈希表 从以上可以知道,哈希表查找最优情况下是查找一次.而InnoDB使用的
Innodb关键特性之doublewrite
一、经典Partial page write问题 介绍double write之前我们有必要了解partial page write(部分页失效)问题。 InnoDB的Page Size一般是16KB,其数据校验也是针对这16KB来计算的,将数据写入到磁盘是以Page为单位进行操作的。我们知道,
Innodb关键特性之Insert Buffer
一、Insert Buffer Innodb存储引擎中,主键是唯一的标识符,如果主键是递增的,那么主键插入null会自动增长,同时插入的数据按照顺序存放。如果主键不是自增的,例如UUID这样的,那么插入和辅助索引一样,是随机的。对于非聚集索引,每次插入都要离散读,大大降低了插入的效率。&nbs
浅谈checkpoint技术
MySQL中,一条DML语句,如delete或者update,改变了页中的记录,那么此时页是脏的,即缓冲池的页的版本比磁盘的新,数据库需要将缓冲池的数据刷新到磁盘。 如果每次缓冲池的页发生变化,都要将新版本的页刷新到磁盘,那么性能消耗一定很大,如果将脏页刷新到磁盘的过程中发生宕机,那么数据就不能恢复了。为了避免发生数
innodb新特性之buffer pool动态调整大小
5.7 开始支持buffer pool 动态调整大小,每个buffer_pool_instance都由同样个数的chunk组成(chunks数组), 每个chunk内存大小为innodb_buffer_pool_chunk_size(实际会偏大5%,用于存放chuck中的block信息)。buffer pool以innodb_buffer_pool_chunk_size为单位进行动态增大和缩小。调
innodb新特性之buffer pool预热
背景innodb buffer pool做为innodb最重要的缓存,其缓存命中率的高低会直接影响数据库的性能。因此在数据库发生变更,比如重启、主备切换实例迁移等等,innodb buffer pool 需要一段时间预热,期间数据库的性能会受到明显影响。 另外mysql 5.7以前innodb buffer pool缓存大小修改不是动态的,重启才能生效。因此innodb buffer pool的预
关于Mysql 的 ICP、MRR、BKA等特性
一、ICP( Index_Condition_Pushdown)对 where 中过滤条件的处理,根据索引使用情况分成了三种:(何登成)index key, index filter, table filter如果WHERE条件可以使用索引,MySQL 会把这部分过滤操作放到存储引擎层,存储引擎通过索引过滤,把满足的行从表中读取出。ICP能减少Server层访问存储引擎的次数和引擎层访问基表的次数
MySQL索引提示
SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。MySQL数据库支持索引提示(INDEX HINT)显式的告诉优化器使用了哪个索引。有以下几种情况可能用到索引提示:1、MySQL数据库的优化器错误的选择了某个索引,导致SQL运行很慢。这个在情况比较少见。优化器在绝大部分情况下工作的非常有效和正确。
为什么优化器选择了聚集索引?
通过这个以下这个案例,来说明优化器在选择索引时候的取舍。查看表结构:MySQL > show create table test2 \G *************************** 1. row ***************************
MySQL count(*)之索引选择
覆盖索引对于一些统计问题,如下:MySQL > show create table test1 \G *************************** 1. row ***************************
MySQL单列索引和联合索引
本文通过一个案例,介绍优化器对单列索引和联合索引的选择。order表的ord_seq字段上有2个索引,单列索引(order_seq)和联合索引(order_seq,order_type)MySQL > explain select * from `order` where order_seq =&nbs
MySQL SHOW INDEX 语法解析
本文对show index from tablename;语法进行分析。如:show index from `order`1、Table 表名2、Non_unique 如果索引不能包括重复值则为0,如果可以则为1。也就是平时所说的唯一索引。3、Key_name 索引名称,如果名字相同则表明是同一个索引,而并不是重复,比如上图中的第二、三条数据,索引名