MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能
Security improvements.
提供更好的性能并减少管理员对设置的手工修改
InnoDB enhancements.
开始支持全文索引。
Online DDL(即一些ALTER TABLE操作无需拷贝表、不阻塞增删改)。
CREATE TABLE语句支持DATA DIRECTORY='directory' 可将file-per-table 下每个表对应的.ibd文件存放在数据目录以外的其他目录,提升了灵活性继而可提升性能,比如将.ibd放在单独的SSD盘。
支持transportable tablespaces、允许单表空间(每个表的.ibd文件)动态导入导出。 FLUSH TABLE的FOR EXPORT从句可将buffer中未保存的变化刷到.ibd文件。之后可将.ibd文件拷贝和元数据文件拷贝至其他服务器实例(如SSD、HDD)。ALTER TABLE的DISCARD TABLESPACE和IMPORT TABLESPACE从句可将数据载入不同的MySQL实例。
可通过innodb_page_size设置InnoDB页大小(默认16KB可设置为8KB、4KB)以适应特定的负载和硬件来降低冗余、提升系能。
Buffer Pool刷新算法得以改进以增强性能和并发性,可通过一系列参数进行调整。
与memcached整合可使用NoSQL-style API来访问数据避免解析和构建查询计划的开销(适用于简单查询、更新等)。
优化用的统计信息更加精确且可在服务重启后保持并可控制采样率。
优化只读事务对于ad-hoc queries和report-generating 应用提升了性能和并发。
可将InnoDB undo log 从系统表空间移至一个或多个独立表空间(如移动到SSD盘)。
可通过 innodb_checksum_algorithm=crc32指定使用更快的checksum算法。
redo log文件总大小可达到512G(之前为4G),通过innodb_log_file_size指定单个文件大小,innodb_log_files_in_group指定文件数量、innodb_log_group_home_dir指定存放路径。
可将MySQL中InnoDB表配置为只读模式(通过--innodb-read-only),这样可在只读媒介如DVD、CD上访问InnoDB表或者搭建多实例共享数据目录的数据仓库。
可通过innodb_compression_level指定InnoDB compressed表的压缩级别并通过innodb_log_compressed_pages指定是否将buffer pool中compressed pages由于更新操作引起的re-compressed pages存储在redo log中。
可通过innodb_compression_failure_threshold_pct, innodb_compression_pad_pct_max动态调整InnoDB压缩表中的填充块(用以避免DML时的重新压缩,但数量过多时会增加压缩失败的几率)的比例,以降低压缩失败率而无需通过新的参数重建表或者以不同的页大小重建整个实例。
INFORMATION_SCHEMA中新增InnoDB相关系统表,可查询InnoDB buffer pool、表元数据、索引、外键、底层性能相关的数据等。
新的InnoDB可以使用LRU算法释放打开的表所占用的内存以缓解有大量表的服务器上的内存负载。(可通过 table_definition_cache 调整打开的InnoDB表可使用的内存量)
内部性能优化,如通过拆分kernel mutex减少争用、将flush操作由主线程移至独立线程、使用多个刷新线程、较少大内存系统上的buffer pool的争用。
更快的死锁检测算法,InnoDB相关的死锁信息会全部写入错误日志。
可在服务器重启后立即重载页至InnoDB buffer pool以避免重启后过长的“热身”时间,尤其是InnoDB buffer pool较大的实例。可在服务器关闭时dump出buffer pool中的数据下次重启后载入、也可以在运行过程中导入导出。
5.6.16后innochecksum可支持2G以上的文件
可通过innodb_status_output和innodb_status_output_locks,分别动态开闭InnoDB Monitor和InnoDB Lock Monitor(分别会在error log中打印出InnoDB相关信息,后一个参数的开启要以前一个参数的开启为前提,以后后一个参数的结果是前一个结果的子集)。
5.6.17后可以使用online DDL(ALGORITHM=INPLACE)通过如下操作OPTIMIZE TABLE、ALTER TABLE ... FORCE、ALTER TABLE ... ENGINE=INNODB 来重建表,以减少重建时间并允许并发的DML。
分区最大量可达8192(包含子分区的量)
可使用ALTER TABLE ... EXCHANGE PARTITION与非分区表交换分区表的一个分区或子分区(前提是这两个表除了分区之外表结构一致、且非分区的表不为临时表且无外键引用或被引用的外键非分区表中不包含要交换的分区边界以外的值)
可以限定在一个或者多个分区或子分区内查询。支持的语句包括SELECT、DELETE、INSERT、REPLACE、UPDATE、LOAD DATA、LOAD XML。
Partition lock pruning通过消除分区上的锁,极大提升了多分区表上DML、DDL操作的性能。
Performance Schema.
更加丰富的信息。表输入输出,表事件过滤,线程事件过滤,表、索引I/O及表锁摘要信息,语句及语句的阶段信息等。相关的两个参数为 --gtid-mode和--enforce-gtid-consistency。若使用GTIDs在开始一个新的slave或者指向一个新的master时就不必指定日志文件和文件中的位置,过程可大大简化。另外,因基于GTID的复制时完全基于事务的,因而很容易检查主从一致性,只要master上提交的事务在slave上也提交过就可以保证一致。
可通过binlog_row_image控制 row-based复制中的row image所包含的列,使其可以包含所有列或者不包含BLOB和TEXT列或者仅包含必要的用于唯一标识并执行每一行上的变化的个别列,以便于节省磁盘开销、网络开销和内存使用。
MySQL Server 对二进制日志的读写是 crash-safe的,因只记录和读取完整的事务/事件。默认,会记录事件本身和事件的长度,然后利用这些信息验证事件是否被正确书写。也可以通过binlog_checksum 变量使server使用CRC32算法为事件写校验和,并通过 master_verify_checksum使server从日志文件中读取校验和, --slave-sql-verify-checksum 可以使slave的SQL thread从中继日志中读取校验和。
支持选择将master的连接信息以及slave的中继日志信息保存在文件或者表中,相关参数为--master-info-repository和--relay-log-info-repository。但为了保证复制的crash-safe,当选择将master的连接信息以及slave的中继日志信息保存在表中时相关的表必须是事务性引擎如InnoDB(5.6.6之后的版本会自动创建为InnoDB表但之前的版本会创建MyISAM表,因此在复制开始之前一定要修改为InnoDB引擎)
mysqlbinlog工具可以从指定的主机以原始的二进制格式备份二进制日志文件。工具相关的命令行参数为 --read-from-remote-server和--raw
支持延迟复制,也即,将slave延后于master一段特定的时间。改特性可以用于测试延迟带来的影响或者挽救 DBA在master上不小心犯的错误(通过CHANGE MASTER TO中的MASTER_DELAY指定)。
对于有多块网络接口的salve机器可指定只使用其中某一个(通过CHANGE MASTER TO 语句中的 MASTER_BIND指定)
新增log_bin_basename参数用于指定二进制日志文件完整的路径和文件名
支持slave上多个线程并行执行master上传递下来的事务。通过 slave_parallel_workers指定slave上并发执行事务的worker数量。这种并发是基于数据库的,也即数据库内的操作是有先后顺序的,主从上需以一致的顺序执行,但不同数据库之间则不需要这种顺序,也即一个worker可不必等待其他worker在更新完某个库之后再更新某库。
Optimizer enhancements.
优化了SELECT ... FROM single_table ... ORDER BY non_index_column [DESC] LIMIT [M,]N;查询性能
实现了Disk-Sweep Multi-Range Read.有效减少了在大表且没有缓存在缓存中的情况下在辅助索引上范围扫描造成的随机磁盘访问。采用的办法是先扫描找出相关行关联的key,然后依据主键将key排序,最终依据排好序的key回表取出数据。
实现了ICP(Index Comndition Pushdowndown)。若没有ICP,存数引擎层根据索引定位表中的行并返回给Server层然后在这里用WHERE从句中的条件对结果进行过滤。若使用ICP,如果WHERE条件中的部分列可由索引中的字段进行评估那么server层会将WHERE条件中的这一部分下推到存储引擎层。引擎层进行评估后只取出满足要求的行。这样可有效减少引擎访问表的次数和server访问引擎的次数。
EXPLAIN支持 DELETE, INSERT, REPLACE和UPDATE,以前只支持SELECT,且可以以JSON格式输出。
处理FROM从句中的子查询(派生表)更加高效。首先FROM后的子查询的物化过程直到查询执行时需要这一部分的内容时才进行,另外查询可能会在派生表上加索引以加快查询。
使用semi-join和物化策略优化子查询。
使用BKA(Batched Key Access)join算法提升join性能。支持inner join、outer join、semi-join、nested outer joins和nested semi-joins。
新增tracing功能主要供开发者使用。通过一些列 optimizer_trace_xxx 变量和 INFORMATION_SCHEMA.OPTIMIZER_TRACE来提供
Condition handling.
可通过GET DIAGNOSTICS语句获取各种诊断信息
Data types.
对于TIME、DATETIME、TIMESTAMP类型的值支持小数的秒,最多可支持毫秒级别(也即6位的精度)。
之前的版本中每个表至多只有一个TIMESTAMP列可以初始化为当天日期时间(DEFAULT CURRENT_TIMESTAMP)或者更新至当天日期时间( ON UPDATE CURRENT_TIMESTAMP)。新版本的中取消了此限制.另外,之前只有TIMESTAMP列可以使用DEFAULT CURRENT_TIMESTAMP和 ON UPDATE CURRENT_TIMESTAMP,现在datetime列也可以。
之前版本中TIMESTAMP列定义中什么都不指定的话自动的默认为DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。现在可以通过 explicit_defaults_for_timestamp 变量关闭这一行为。
Host cache.
提供了更多有关导致连接错误的原因的信息以及对host cache访问的改进,其中包含客户端IP和主机名可用以避免DNS查询。具体实现如下:
增加了一系列 Connection_errors_xxx状态变量,提供有关连接错误的信息,这些信息是全局的表示所有连接的各类错误信息的聚合,不是针对于某个特定IP地址。
performance_schema库新增host_cache表且有更多的关于错误信息的计数字段来track各类错误(非针对特定IP的错误),这样一来便可通过查询该表得知有多少主机被缓存、哪些主机发生了哪类错误、连接错误量有多接近max_connect_errors限制。
可通过 host_cache_size调整host cache大小
OpenGIS.
原生实现了OPENGIS规范定义的测量两个几何值之间关系的一系列函数。
降级
ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE和NO_ZERO_IN_DATE 几个sql mode 不赞成使用,MySQL5.7中这些值不会有任何影响,效果会被包含在strict SQL mode中((STRICT_ALL_TABLES 或 STRICT_TRANS_TABLES)。MySQL升级时要注意这些问题。确保新版本中的SQL MODE不会影响应用。
GROUP BY中的隐式排序不赞成使用,这属于有MySQL的一个扩展,可能在将来版本中出于性能考虑被移除。所以最好使用ORDER BY语句明确指明排序。
不推荐使用4.1之前版本的密码和mysql_old_password认证插件,不安全。为防止使用旧版本密码哈希可将secure_auth 开启。对于DBA 建议将使用mysql_old_password 认证插件的账户转为使用 mysql_native_password认证插件。
不建议使用OLD_PASSWORD()和old_passwords=1来生成4.1版本之前的密码。
不建议使用 --skip-innodb或者--innodb=OFF, --disable-innodb;date_format, datetime_format 和 time_format; have_profiling, profiling 和 profiling_history_size ; innodb_use_sys_malloc 和innodb_additional_mem_pool_size; timed_mutexes 变量。这些都可能在将来的版本中移除。
使用 --lc-messages-dir 和 --lc-messages 代替--language(用于指明错误信息使用的语言)。
不建议使用 ALTER IGNORE TABLE。
不建议使用 msql2mysql, mysql_convert_table_format, mysql_find_rows, mysql_fix_extensions, mysql_setpermission, mysql_waitpid, mysql_zap, mysqlaccess 和 mysqlbug这些工具。
不建议使用mysqlhotcopy工具。
移除
--log选项,使用 --general_log 和 --general_log_file=file_name 代替。
--log-slow-queries 选项。使用 --slow_query_log以及 --slow_query_log_file=file_name 代替。
--one-thread选项。用 --thread_handling=no-threads 代替。
--safe-mode。
--skip-thread-priority。
--table-cache。使用table_oopen_cache变量代替。
移除--init-rpl-role、--rpl-recovery-rank options选项, 和rpl_recovery_rank、Rpl_status状态变量。
取消engine_condition_pushdown 变量,改为optimizer_switch变量中的一个flag engine_condition_pushdown。
取消have_csv, have_innodb, have_ndbcluster和have_partitioning变量。使用SHOW PLUGIN或者查询INFORMATION——SCHEMA中的PLUGINS表。
sql_big_tables变量替换为big_tables.
sql_low_priority_updates变量替换为low_priority_updates.
sql_max_join_size变量替换为max_join_size.
max_log_data_size变量替换为max_allowed_packet。
FLUSH MASTER和FLUSH SLAVE语句替换为 RESET MASTER和 RESET SLAVE.
SLAVE START和SLAVE STOP替换为START SLAVE和STOP SLAVE。
取消SHOW AUTHORS和SHOW CONTRIBUTORS.
取消SET 命令中的OPTION和ONE_SHOT修饰符。
不允许加在存储过程、存储函数中将参数或者本地变量设置为DEFAULT( SET var_name = DEFAULT ).但可以将系统变量设置为DEFAULT。
移除 SHOW ENGINE INNODB MUTEX。
MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能的更多相关文章
- Performance Tuning guide 翻译 || Performance Tuning Guide 11G中新增特性
CSDN 对格式支持比較弱.能够到http://user.qzone.qq.com/88285879/blog/1399382878 看一致的内容. Performance Tuning Guide ...
- C# 5.0中新增特性
C# 5.0随着VisualStudio 2012一起正式发布了,让我们来看看C#5.0中增加了哪些功能. 1. 异步编程 在.Net 4.5中,通过async和await两个关键字,引入了一种新的基 ...
- MySQL5.7中新增的JSON类型的使用方法
创建表json_test: CREATE TABLE json_test(id INT(11) AUTO_INCREMENT PRIMARY KEY,person_desc JSON)ENGINE I ...
- MySQL5.7中InnoDB不可不知的新特性
讲师介绍 赖铮 Oracle InnoDB团队 Principle Software Developer 曾任达梦.Teradata高级工程师,主要负责研发数据库执行引擎和存储引擎,十年以商数据库内 ...
- 在 .NET 4.0 中使用 .NET 4.5 中新增的特性(CallerMemberNameAttribute/CallerFilePathAttribute/CallerLineNumberAttribute)
介绍 标题中所说的三个特性 CallerMemberNameAttribute / CallerFilePathAttribute / CallerLineNumberAttribute 我们统称为调 ...
- Java SE 9 新增特性
Java SE 9 新增特性 作者:Grey 原文地址: Java SE 9 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new_ ...
- 随笔分类 - [C#6] 新增特性
C#6.0中引入的基本特性总结 [C#6] 7-索引初始化器 摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 早C#3中引入的集合初始化器,可是让我们用上面的语法来在声明一个字典或者集合 ...
- MySQL5.6 GTID新特性实践
MySQL5.6 GTID新特性实践 GTID简介 搭建 实验一:如果slave所需要事务对应的GTID在master上已经被purge了 实验二:忽略purged的部分,强行同步 本文将简单介绍基于 ...
- 【PHP发展史】PHP5.2 到 PHP5.6 中新增的功能详解
截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护的 PHP5.2, 其余的一半用户在使用 PHP5.3. 因为 PHP 那“集百家之长”的 ...
随机推荐
- 初识Dubbo 系列之6-Dubbo 配置
配置 Xml配置 配置项说明 具体配置项,请參见:配置參考手冊 (+) API使用说明 假设不想使用Spring配置.而希望通过API的方式进行调用,请參见:API配置 (+) 配置使用说明 想知道怎 ...
- JS 的引用赋值与传值赋值
这个问题说大不大说小不小,如果你有幸踩了这个坑,一定会找这篇文章,哈哈~ 现说一下JS数字的类型:基本类型和引用类型 先看下下面两个栗子: var a = 30; var b = a; a = 20; ...
- 一致性哈希算法(c#版)
最近在研究"一致性HASH算法"(Consistent Hashing),用于解决memcached集群中当服务器出现增减变动时对散列值的影响.后来 在JAVAEYE上的一篇文章中 ...
- python 基础 9.2 mysql 事务
一. mysql 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如,你操作一个数据库,公司的一个员工离职了,你要在数据库中删除它的资料,也要删除该人员相关的,比如邮箱,个人资产等 ...
- gulp的使用方法
---恢复内容开始--- 什么是gulp? Gulp.js是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务. 使用步骤: 1.全局安装gulp: npm install - ...
- 九度OJ 1032:ZOJ (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4569 解决:2561 题目描述: 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的 ...
- php加速器: xcache
1.准备软件包 xcache-3.2.0.tar.gz 2.安装组件 $ echo 'export LC_ALL=C' >> /etc/profile $ tail -l /etc/pro ...
- Git with SVN
1)GIT是分布式的,SVN不是: 这 是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别.好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交.合并, ...
- 【题解】[Ghd]
[题解]Ghd 一道概率非酋题? 题目很有意思,要我们选出大于\(\frac{n}{2}\)个数字使得他们的最大公约数最大. 那么我们若随便选择一个数字,他在答案的集合里的概率就大于\(0.5\)了. ...
- LeetCode:安排工作以达到最大收益【455】
LeetCode:安排工作以达到最大收益[455] 题目描述 有一些工作:difficulty[i] 表示第i个工作的难度,profit[i]表示第i个工作的收益. 现在我们有一些工人.worker[ ...