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的预
MySQL5.7 Online DDL
1. ALter table (5.7) 一般情况下,alter table 都会对原有的表做一个临时的副本拷贝,然后将所做的该表应用到副本,之后再将原表删除,rename 副本。在这个过程中,原表对外是可读的;但是对该表DML会被堵塞,直到alter 完成。 The exception referred to earlier is
MySQL5.7新特性之sys schema视图应用
sys schema视图摘要 sys schema视图中包含了很多以各种方式总结的Performance Schema表的视图,这些视图大多数都是成对出现,使得每组视图中的一个成员具有与另一个成员相同的名称,加上一个X$前缀。例如host_summary_by_file_io视图汇总按照主机分组的文件I/O延迟。没有X$前缀的视图提供了更加友好且易...
MySQL5.7新特性之redo log事务日志大小调整
在MySQL5.6/5.7之前的版本中,如MySQL5.5,如果要修改ib_logfile(redo log)大小,步骤如下:1)执行set global innodb_fast_shutdown=0命令,把所有脏数据写入磁盘;2)执行mysqladmin shutdown命令关闭数据库;3)在my.cnf文件里修改innodb_lof_file_size参数值;4)执行mv ib_logfile* ***bak命令,将redo log移动...
MySQL5.7新特性之优化union all
MySQL5.6中,使用union all相当于创建一张临时表,这在执行大的联合查询时候会增加I/O开销,降低查询速度。 例如执行以下SQL语句: (select id from accessLog order by id) union all (select id from access_test order by id); 在MySQL5.6环境:点击(此处)折叠或打开...
MySQL5.7新特性之优化排序limit
测试一个案例,测试环境分别为MySQL5.5和MySQL5.7。 在MySQL5.5环境中:点击(此处)折叠或打开mysql> select * from access_test order by rand() desc limit 5;+---------+------------------------------------------+------------+---------------------+-----...
MySQL5.7新特性之select半连接优化
MySQL的子查询一直以来都是性能差的著称,解决方法是以join代替。 MySQL5.5版本中该查询先把accessLog表中版本为2.2的数据线过滤出来,然后每个符合条件的数据都与内表进行一次select id from accessLog_01,因此性能低下。MySQL5.5采取的解决方法是将in重写为exists。 在MySQL5.6/5.7版本中,子查询执...
MySQL5.7新特性之错误日志打印到操作系统日志文件
通常,MySQL将错误日志输出在hostname.err文件中,但MySQL5.7可以将错误日志打印到操作系统日志中,具体操作如下: MySQL服务器启动的时候,mysqld_safe加 --syslog参数,如下: 启动MySQL服务:[root@mysql log]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --syslog --user=mysq...
MySQL5.7新特性之explain UPDATE/DELETE/INSERT
在MySQL5.5版本中,explain查看执行计划,只能支持select语句,但是在MySQL5.6/5.7版本中,可以支持DML语句,即UPDATE、DELETE、INSERT。 建立测试表accessLog和accessLog_bak进行测试:点击(此处)折叠或打开mysql> explain select * from accessLog where id=16649850;...
MySQL5.7新特性之单表支持多个DML触发器
MySQL5.6不支持一个表有多个UPDATE/DELETE/INSERT触发器。 下边看一个例子: 创建三个测试表:点击(此处)折叠或打开mysql> create table t_trig_test_01 (name varchar(10));Query OK, 0 rows affected (0.07 sec)mysql> create ...
MySQL5.7新特性之函数索引
在MySQL5.7之前的版本中,函数索引是无法用到索引的,也不支持虚拟列,下边的SQL执行时候回进行全表扫描: select * from t1 where mod(mode_id,8)=1 MySQL5.7支持虚拟列,并且可以使用函数索引。 确定数据库版本:点击(此处)折叠或打开mysql> select version();...
MySQL5.7新特性之数据碎片整理
对于innodb存储引擎,例如删除一行,这些行只是标记为“已删除”,而不是真正从索引中物理删除了,因而空间也没有真正得到释放。Innodb的Purge线程会异步的来清理这些没有用的索引键和行,但是依然没有把这些释放出来的空间给系统用,因而会导致页面中存在很多空洞。 MySQL5.7之前的版本中,需要使用OPT...
MySQL5.7新特性之死锁打印到错误日志
在MySQL5.5及之前的版本中,查看死锁需要执行show engine innodb status \G; 在MySQL5.6/5.7版本中,可以在my.cnf配置文件中加入: innodb_print_all_deadlocks=1 就可以把死锁信息打印到错误日志里边。
MySQL5.7新特性之redo log事务日志大小调整
在MySQL5.6/5.7之前的版本中,如MySQL5.5,如果要修改ib_logfile(redo log)大小,步骤如下:1)执行set global innodb_fast_shutdown=0命令,把所有脏数据写入磁盘;2)执行mysqladmin shutdown命令关闭数据库;3)在my.cnf文件里修改innodb_lof_file_size参数值;4)执行mv ib_logfile* ***bak命令,将redo log移动...
MySQL5.7新特性之回收undo log物理文件空间
MySQL的undo log保存在共享表空间ibdata1文件里,随着业务运转,ibdata1会越来越大。在MySQL5.7之前的版本,需要停机利用mysqldump将数据导出,然后重建数据库,再导入数据的方法解决该问题,MySQL5.7提供在线回收的机制。 MySQL5.6版本中,可以把undo log回滚段分离到单独的一个表空间,但是依然没有实...
MySQL5.7新特性之在线动态修改innodb_buffer_pool_size
在MySQL5.7之前的版本中,innodb_buffer_pool_size不能在线修改,只能重启MySQL进程进行修改。MySQL5.7开始可以在线动态修改其大小。在MySQL5.6测试环境:点击(此处)折叠或打开mysql> select version();+-----------+| version() |+-----------+...
MySQL5.7新特性之在线DDL不会锁表
MySQL5.7在线修改varchar字段不在锁表,测试过程如下:点击(此处)折叠或打开mysql> select version();+------------+| version() |+------------+| 5.7.18-log |+------------+...
MySQL5.7新特性之更改索引名字不会锁表
MySQL5.7在更改索引名字时候不会锁表,测试过程如下:点击(此处)折叠或打开mysql> select version();+------------+| version() |+------------+| 5.7.18-log |+------------+...