摘要:
背景 Innodb使用undo log来实现MVCC,这意味着如果一个很老的事务长时间不提交,那么新产生的undo log都无法被及时清理掉。在MySQL 5.5及之前版本中,undo log是存储在ibdata中。从5.6开始可以使用独立的undo log表空间来存储undo。但是直到5.6,一旦 阅读全文
摘要:
--source include/master-slave.inc --source include/have_binlog_format_row.inc connection slave; set global slave_rows_search_algorithms='TABLE_SCAN'; 阅读全文
摘要:
提要 相对于纳秒级的内存访问延时,普通的机械盘达到了毫秒级的随机访问延时,对于OLTP应用来说,物理IO绝对是目前数据库管理系统的最大性能杀手,所以增加内存的大小,提高IO的命中率无疑可以作为一种降低时延的常用优化手段。 针对使用InnoDB引擎的MySQL实例来说,增加buffer pool的大小 阅读全文
摘要:
命令的输出 MariaDB> analyze select * from tbl1 where key1 between 10 and 200 and col1 like 'foo%'\G *************************** 1\. row ****** 阅读全文
摘要:
GTID 资料 MySQL 5.6 引入了global transaction identifiers (GTIDs,全局事务ID)的特性,这一特性是用来解决主从复制(replication)场景下的一些问题,GTID 只存在于 binlog 中,数据库中是没有的。 要了解 GTID 的话,官方文档 阅读全文
摘要:
背景: Innodb引擎使用B_tree结构保存表数据,这样就需要一个唯一键表示每一行记录(比如二级索引记录引用)。 Innodb表定义中处理主键的逻辑是: 1.如果表定义了主键,就使用主键唯一定位一条记录 2.如果没有定义主键,Innodb就生成一个全局唯一的rowid来定位一条记录 auto_i 阅读全文
摘要:
MariaDB 10.0.8增加了一种新的执行计划——Extended Keys。 它充分利用了InnoDB的隐藏列来做执行计划,因为我们都知道InnoDB的索引组织表会把主键放在最末尾,所以实际上每个索引最后都包含了主键。 打开和关闭这个优化器选项的命令如下: Enable: set optimi 阅读全文
摘要:
唯一索引额外功能 为了便于说明,我们创建一个简单的表t,如下: 我在这个表的字段a上创建了唯一索引,字段b上面没有索引,表里初始化两行数据,分别是(1, 1)和(2, 1)。假设我现在要执行一个新的插入语句: 就会报错: 如果我现在要给字段b上加上一个唯一索引,可以这么执行: 同样会报错: 也就是说 阅读全文
摘要:
背景 MySQL现行版本中存在一个count(distinct)语句返回结果错误的bug,表现为,实际结果存在值,但是用count(distinct)统计后返回的是0。 drop table if exists tb; set tmp_table_size=1024; create table tb 阅读全文
摘要:
背景 innodb_flush_log_at_trx_commit 这个参数可以说是InnoDB里面最重要的参数之一,它控制了重做日志(redo log)的写盘和落盘策略。 具体的参数意义见手册 简单说来,可选值的安全性从0->2->1递增,分别对应于mysqld 进程crash可能丢失 -> OS 阅读全文