阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL 8.0新特性全面认识

216次阅读
没有评论

共计 5043 个字符,预计需要花费 13 分钟才能阅读完成。

一、MySQL 8.0 中添加的功能

1、新的系统字典表

整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用 InnoDB 引擎进行存储

2、支持 DDL 原子操作

InnoDB 表的 DDL 支持事务完整性,要么成功要么回滚,将 DDL 操作回滚日志写入到 data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作

3、安全和用户管理

新增 caching_sha2_password 认证插件,并且是默认的身份认证插件。性能和安全方面加强

权限支持 role

新增密码历史记录功能,限制重复使用以前的密码

4、支持资源管理

支持创建和管理资源组,并允许将服务器运行的线程分配给特定的组,以便线程根据资源组可用的资源执行

5、innodb 增强

自增列优化,修复 MySQL 的 bug#199, 该 bug 导致在 DB 重启时,MySQL 会将表上最大的自增值作为最大值,下次分配是分配 max(id)+1, 如果是归档表或者其它模式删除数据后,DB 系统重启,自增值可能被重用

新增 INFORMATION_SCHEMA.INNODB_CACHED_INDEXES,查看每个索引缓存在 InnoDB 缓冲池中的索引页数

InnoDB 临时表都将在共享临时表空间 ibtmp1 中创建

对于 SELECT … FOR SHARE 和 SELECT … FOR UPDATE 语句,InnoDB 支持 NOWAIT 和 SKIP LOCKED

innodb_undo_tablespaces 的最小值为 2,并且不再允许将 innodb_undo_tablespaces 设置为 0。最小值 2 确保回滚段始终在撤消表空间中创建,而不是在系统表空间中创建

支持 ALTER TABLESPACE … RENAME TO 语法

新增 innodb_dedicated_server,让 InnoDB 根据服务器上检测到的内存量自动配置 innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method

新增 INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF 视图

新增了动态配置项 innodb_deadlock_detect,用来禁用死锁检查,因为在高并发系统中,当大量线程等待同一个锁时,死锁检查会大大拖慢数据库

支持使用 innodb_directories 选项在服务器脱机时将表空间文件移动或恢复到新位置

6、MySQL 8.0 更好支持文档型数据库和 JSON

7、优化

不可见索引,开始支持 invisible index,(感觉又和 Oracle 一样了),在优化 SQL 的过程中可以设置索引为不可见,优化器变不会利用不可见索引

支持降序索引,可以对索引定义 DESC,之前,索引可以被反序扫描,但影响性能,而降序索引就可以高效的完成

8、支持 RANK(), LAG()、NTILE() 等函数

9、正则表达式增强,提供了 REGEXP_LIKE(),EGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR() 等函数 

10、新增备份锁,允许在线备份期间的 DML,同时防止可能导致快照不一致的操作。备份锁由 LOCK INSTANCE FOR BACKUP 和 UNLOCK INSTANCE 语法支持

11、字符集  默认字符集由 latin1 变为 utf8mb4

12、配置文件增强

MySQL 8.0 版本支持在线修改全局参数持久化,通过加上 PERSIST 关键字,可以将调整持久化到新的配置文件中,再次重启 db 还可以应用到最新的参数。对于加上 PERSIST 关键字修改参数命令,MySQL 系统会生成一个包含 json 格式数据的 mysqld-auto.cnf 文件,比如执行:

    set PERSIST  expire_logs_days=10 ; #内存和 json 文件都修改,重启还生效

    set GLOBAL  expire_logs_days=10 ; #只修改内存,重启丢失

系统会在数据目录下生成一个包含如下内容的 mysqld-auto.cnf 的文件:

{“mysql_server”: {“expire_logs_days”: “10”} }

当 my.cnf 和 mysqld-auto.cnf 同时存在时,后者具有高优先级。

13、直方图

MySQL 8.0 版本开始支持期待已久直方图。优化器会利用 column_statistics 的数据,判断字段的值的分布,得到更准确的执行计划。

可以使用 ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS |DROP HISTOGRAM ON  clo_name] 来收集或者删除直方图信息

14、支持会话级别 SET_VAR 动态调整部分参数,有利于提升语句性能。

select /*+ SET_VAR(sort_buffer_size = 16M) */ id  from test order id ;

insert  /*+ SET_VAR(foreign_key_checks=OFF) */ into test(name) values(1);

15、默认参数的调整

调整 back_log 的默认值,保持和 max_connections 一致,增强突发流量带来的连接处理容量。

修改 event_scheduler 默认为 ON,之前默认是关闭的。

调整 max_allowed_packet 的默认值,从 4M 增加到 64M。

调整 bin_log,log_slave_updates 默认值为 on。

调整 expire_logs_days 的过期时间为 30 天,老版本是 7 天,生产环境时,检查该参数,防止 binlog 过多造成空间紧张。

调整 innodb_undo_log_truncate 默认为 ON

调整 innodb_undo_tablespaces 默认值为 2

调整 innodb_max_dirty_pages_pct_lwm 默认值 10

调整 innodb_max_dirty_pages_pct 默认值为 90

新增 innodb_autoinc_lock_mode 默认值为 2

16、InnoDB 性能提升

废除 buffer pool mutex, 将原来一个 mutex 拆分成多个,提高并发

拆分 LOCK_thd_list 和 LOCK_thd_remove 这两个 mutex,大约可提高线程链接效率 5%。

17、行缓存

 MySQL8.0 的优化器可以估算将要读取的行数,因此可以提供给存储引擎一个合适大小的 row buffer 来存储需要的数据。大批量的连续数据扫描的性能将受益于更大的 record buffer

18、改进扫描性能

改进 InnoDB 范围查询的性能,可提升全表查询和范围查询 5-20% 的性能。

19、成本模型

InnoDB 缓冲区可以估算缓存区中的有多少表和索引,这可以让优化器选择访问方式时知道数据是否可以存储在内存中还是必须存储到磁盘上。

20、重构 SQL 分析器

改进 SQL 分析器。旧的分析器由于其语法复杂性和自顶向下的分析方式从而有严重的限制,导致难以维护和扩展。

二、MySQL 8.0 中被废弃的特性

  • 废弃 validate_password 插件
  • 废弃 ALTER TABLESPACE 和 DROP TABLESPACE ENGINE 子句
  • 废弃 JSON_MERGE()  -> JSON_MERGE_PRESERVE() 取代
  • 废弃 have_query_cache 系统变量

三、MySQL 8.0 被移除的功能

query cache 功能被移除,相关的系统变量也被移除

mysql_install_db  被 mysqld –initialize or –initialize-insecure 替代

INFORMATION_SCHEMA 下的 INNODB_LOCKS 和 INNODB_LOCK_WAITS 表已被删除。用 Performance Schema data_locks 和 data_lock_waits 表替代

INFORMATION_SCHEMA 下的四张表移除:GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS

InnoDB 不再支持压缩的临时表。

不再支持 PROCEDURE ANALYSE() 语法

Renamed InnoDB Information Schema Views
Old Name                                      New Name
INNODB_SYS_COLUMNS            INNODB_COLUMNS
INNODB_SYS_DATAFILES            INNODB_DATAFILES
INNODB_SYS_FIELDS                  INNODB_FIELDS
INNODB_SYS_FOREIGN                    INNODB_FOREIGN
INNODB_SYS_FOREIGN_COLS    INNODB_FOREIGN_COLS
INNODB_SYS_INDEXES                    INNODB_INDEXES
INNODB_SYS_TABLES                    INNODB_TABLES
INNODB_SYS_TABLESPACES            INNODB_TABLESPACES
INNODB_SYS_TABLESTATS            INNODB_TABLESTATS
INNODB_SYS_VIRTUAL                    INNODB_VIRTUAL

remove 的 server 选项:

–temp-pool
–ignore-builtin-innodb
–des-key-file
–log-warnings
–ignore-db-dir 

remove 的配置选项:

innodb_file_format
innodb_file_format_check
innodb_file_format_max
innodb_large_prefix

remove 的系统变量

information_schema_stats  ->information_schema_stats_expiry
ignore_builtin_innodb
innodb_support_xa
show_compatibility_56
have_crypt
date_format
datetime_format
time_format
max_tmp_tables
global.sql_log_bin(session.sql_log_bin 保留)
log_warnings ->log_error_verbosity
multi_range_count
secure_auth
sync_frm
tx_isolation -> transaction_isolation
tx_read_only -> transaction_read_only
ignore_db_dirs
query_cache_limit
query_cache_min_res_unit
query_cache_size
query_cache_type
query_cache_wlock_invalidate
innodb_undo_logs –>innodb_rollback_segments

remove 的状态变量

Com_alter_db_upgrade
Slave_heartbeat_period
Slave_last_heartbeat
Slave_received_heartbeats
Slave_retried_transactions, Slave_running
Qcache_free_blocks
Qcache_free_memory
Qcache_hits
Qcache_inserts
Qcache_lowmem_prunes
Qcache_not_cached
Qcache_queries_in_cache
Qcache_total_blocks
Innodb_available_undo_logs status

remove 的函数

JSON_APPEND() –> JSON_ARRAY_APPEND()

ENCODE()

DECODE()

DES_ENCRYPT()

DES_DECRYPT()

remove 的 client 选项:

–ssl  –ssl-verify-server-cert 被删除,用 –ssl-mode=VERIFY_IDENTITY |REQUIRED |DISABLED 替代

–secure-auth

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5043字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中