Mysql 5.6 新特性
随笔,真的随笔,以后理解得更深了再修改。
Index Condition Pushdown
更多的让存储引擎去处理Where语句中的条款,避免返回无关字段数据等;
Multi-Range Read
对于第二索引来说,它指向的数据未必是在同一个块里,所以查询会乱序,不一定高效。MRR会检索一个查询中的多个范围数据,将它们同部排序后,变成一个大范围的顺序IO,再去读,从而提高效率。
File Sort Optimization
对于有order by non_indexed_column和limit x组合语句的查询,如果X条结果可以放在排序缓冲区中,就会提升排序性能;
Innodb Improvements
Persistent Optimizer Stats
用户可以控制Innodb对每个索引做采样的数据集的大小,以及是否持久化这些统计数据。持久化后即使重启,统计仍在,因而提升性能和有更一致的行为。
New INFORMATION_SCHEMA tables
因为使用SQL语句查询比分析show status的文本更方便,所以增加了更多的这样的表。
- Metrics Tables:innodb_metrics,更多和更丰富的资源和性能监控;
- System Tables:可以查询Innodb的内部数据字典;
- Buffer Pool Information Table:显示BP页信息以调优大内存或大压力系统;
Split Kernel Mutex
之前是由一个单独的mutex来控制进入Innodb核心操作的并发的,现在改进成了拆成多个mutex以及读写锁,以减少竞争;
Multi-Threaded Purge
最初Purge操作是在主线程中做的,所以常和其它操作冲突。在5.5中挪到了单独的Purge线程里。现在可以配多个线程,以使Purge多张表时更有效。
Separate Flush Thread
之前在主线程中,现在Flush操作也单拎出来做一个线程了。
Pruning the Innodb Table Cache
在打开很多表时会造成系统负担,使用了LRU算法来挑出合适的表关掉。
NoSQL Interface via Memcached
直接使用Memcache API来访问Innodb数据。简化了接口,持久化了Memcache的数据,省了MC的内存。
Scalability Improvements
Partition Table操作更方便,效率更高。
- Explicit Partition Selection:直接指定处理查询的分区;
- Import/Export for Partitioned Tables:快速将一个分区表的数据和未分区表的数据做切换,从而完成快速导入分区数据;
Replication Improvements:
- Optimized Row-Based Replication:在指定了主键或明确的字段时,只复制相关的字段的Before和After数据,以减少各方面相关开销;
- Multi-Threaded Slaves:从库的execution thread改成了多个;多线程基于database名来分派任务从而提高并行度;
- Crash Safe Slaves:对如Innodb这种支持事务的引擎有效。Slave重启后会自动重启中断的DML操作,不需要象现在这样让DBA手动去重设master.info和relaylog.info来使复制继续;
- Replication Checksums:检查数据损坏,并返回错误,以防Slave自己数据坏掉,从而提升数据完整性。校验和基于二进制日志、Relay Log及单独的Event。这个特性可以指定某个Slave来应用。
- Time-Delayed Replication:可以指定某些Slave延缓执行操作,以避免误操作。最多可以68年。
- Informational Log Events:使用Row-based复制时,把用户的操作也写进Binlog,这样也会被复制到从库,从而提升可读性;
- Remote Binlog Backup:不需从库就可以备份Binlog;
- Server UUIDs:自动生成UUID,方便各种监控工具获取信息。可以在show slave status命令中得到。对大规模集群很有效。
Instrumentation and Diagnostic Improvements via performance-schema
- Reduced Overhead:代码优化了;
- Table I/O and Instrumentation:setup_object让DBA可以分析应用是如何产生IO请求的。
- Table Locks Instrumentation:仍是setup_object表,发现访问最密集的表和其它对象相关的索引;
- Session/User Level Instrumentation:setup_actors表,监控某个用户或连接产生的压力;
- Global Performance Metric Summaries:方便DBA写脚本做监控,可以分类,按线程,按对象,按instrumentation point等
- Table/Index I/O Summary:setup_object表,发现访问最热的表和索引;
- Table Lock Wait Summary:积累锁相关数据;
- Statement Level Instrumentation:方便DBA针对单个的Statement做监控和分析;
- Show Contents of Host Cache - centralized logging of connection errors:众望所归下,集中打印连接错误。方便分析大集群中的错误。