一、 数据字典与原子DDL
mysql的所有表结构定义的元数据存放在mysql.idb中。整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储.看下图,我创建了一个 database business,你会发现表的定义文件*.frm没有了。
-
[root
@yw
-gz
-hd
-test
-211 mysql
]
# ls
-
auto
.cnf binlog
.
index client
-cert
.pem ibdata1 mysql public_key
.pem undo_001
-
binlog
.000001 business client
-
key
.pem ib_logfile0 mysql
.ibd server
-cert
.pem undo_002
-
binlog
.000002 ca
-
key
.pem error
.
log ib_logfile1 performance_schema server
-
key
.pem yw
-gz
-hd
-test
-211
.pid
-
binlog
.000003 ca
.pem ib_buffer_pool ibtmp1 private_key
.pem sys
-
[root
@yw
-gz
-hd
-test
-211 mysql
]
# ls business
/
-
job_execution_log
.ibd t_gw_remit_query
.ibd t_mer_transfer
.ibd
-
job_status_trace_log
.ibd t_gw_remit_serial
.ibd t_sms_gateway
.ibd
-
t_bal_sett_report
.ibd t_gw_serial
.ibd t_sms_recode
.ibd
-
t_boss_logger
.ibd t_mail_record
.ibd t_sms_service
.ibd
在执行DDL之类的操作时,很难做到crash-safe,更别说让DDL具备事务性了。
在MySQL8.0之前,DDL操作在server crash的情况下,会遗留.frm,.ibd文件。MySQL8.0 能实现原?DDL(包括 DROP TABLE, DROP SCHEMA, CREATE TABLE, TRUNCATE TABLE, ALTER TABLE),在server crash的情况下,不会遗留.frm,.ibd临时文件,保证了DDL操作的原子性!
二 、字符集支持(Character set support)
数据库的默认字符集 latin1 到 utf8mb4 。
三、重构sql分析器,提升性能
改进SQL分析器。旧的分析器由于其语法复杂性和自顶向下的分析方式从而有严重的限制,导致难以维护和扩展。
四、onlineDDL 的巨大改进。8.0.12版本将会增加 ALGORITHM=INSTANT 方法。我们知道,mysql的对表结构的更改,一直让DBA头疼。目前有2两种ALGORITHM [=] {INPLACE|COPY} 。instant是比inplace方法更改,锁定表的时间更短。
五、innodb 增强,提升性能
(1)innodb_undo_tablespaces的最小值为2,并且不再允许将innodb_undo_tablespaces设置为0。 最小值2确保回滚段始终在撤消表空间中创建,而不是在系统表空间中创建
(2)InnoDB临时表都将在共享临时表空间ibtmp1中创建
六、调整back_log的默认值,保持和 max_connections一致,增强突发流量带来的连接处理容量。这告诉我们,有些参数是随着另外一个参数动态调整的。
新增innodb_dedicated_server,让InnoDB根据服务器上检测到的内存量自动配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method
-
原来是:来试验一下:
-
mysql
> select
* from `performance_schema`
.global_variables where VARIABLE_NAME
in
(
'innodb_dedicated_server'
,
'innodb_buffer_pool_size'
,
'innodb_buffer_pool_instances'
)
;
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
| VARIABLE_NAME
| VARIABLE_VALUE
|
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
| innodb_buffer_pool_instances
| 1
|
-
| innodb_buffer_pool_size
| 134450944
|
-
| innodb_dedicated_server
| OFF
|
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
3 rows
in set
(0
.00 sec
)
-
-
-
后来是
-
mysql
> select
* from `performance_schema`
.global_variables where VARIABLE_NAME
in
(
'innodb_dedicated_server'
,
'innodb_buffer_pool_size'
,
'innodb_buffer_pool_instances'
)
;
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
| VARIABLE_NAME
| VARIABLE_VALUE
|
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
| innodb_buffer_pool_instances
| 8
|
-
| innodb_buffer_pool_size
| 6442450944
|
-
| innodb_dedicated_server
| ON
|
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
3 rows
in set
(0
.00 sec
)
七、
在线修改系统变量后,会将修改后的值持久化到磁盘。他并不是持久化到my.cnf中,而且重新生成一个新的文件mysqld-auto.cnf,并将修改后的值保存到该文件中。
mysqld-auto.cnf文件中的配置相比my.cnf文件具有高优先级,如果相同配置出现在两个文件中,就以mysqld-auto.cnf文件中的记录为主。
-
mysql
> set persist autocommit
=1
;
-
Query OK
, 0 rows affected
(0
.00 sec
)
-
-
mysql
>
八、对于开发人员来说,增加了窗口函数,with 语法,对于编写复杂的sql语句提供了强有力的支撑
九、目前为止2018-7-4 ,xtrbackup2.4不支持mysql8的物理备份。
InnoDB性能提升
废除buffer pool mutex,将原来一个mutex拆分成多个,提高并发
MySQL 8.0 版本开始支持期待已久直方图。优化器会利用column_statistics的数据,判断字段的值的分布,得到更准确的执行计划。
这些有很多的关于性能提升的数据,最后,我将用压力测试工具来实际压测一下,看看oracle公司有没有撒谎。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30393770/viewspace-2158946/
,如需转载,请注明出处,否则将追究法律责任。