找回密码
 立即注册
搜索
查看: 73|回复: 0

MySQL 9.7 为什么这么强大?超好用!

[复制链接]

430

主题

9

回帖

1890

积分

管理员

积分
1890
发表于 3 天前 | 显示全部楼层 |阅读模式

MySQL 9.7.0 LTS 在 2026 年 4 月 21 日发布,同一天 8.0.46 成为 8.0 最后的小版本,8.0 正式 EOL
对于社区版而言,这是一次实质性的升级:把五个企业版组件放到社区版中来、把 Hypergraph 优化器放进社区版里去、支持 DML 的 JSON Duality View 放入社区版中来
先确定好升级路线
8.0 不再发布安全补丁了,继续运行就相当于把风险留给了生产
保守路线为 8.0 升到 8.4LTS,大部分情况下不需要做改动;新的特性就用 9.7 LTS;已经稳定在 8.4 的话,不要因为版本号而强行升级
在进行升级之前使用 MySQL Shell 来检查兼容性,并把结果输出为 JSON 格式可以直接被放入到 CI 系统中
# 只读检查,不能修改数据;--target-version 指定目标LTS

mysqlsh -- util check-for-server-upgrade --user=root --host=127.0.0.1 --port=3306 \
  --target-version=9.7.0 --output-format=JSON
9.7 是 LTS 线,5 年 Premier 加上 3 年 Extended,在做生产基线没有问题
五个企业版组件已经下放到各个地方
复制 Applier 指标、Group Replication 流控统计、资源管理器、主节点选举,再加上 Telemetry,全部进入社区版
-- 复制Applier指标表到performance_schema中

INSTALL COMPONENT
'file://component_replication_applier_metrics'
;
-- OpenTelemetry 指标、链路、日志

INSTALL COMPONENT
'file://component_telemetry'
;

-- 注意:当 replica_parallel_workers=0 时,Applier 指标表会为空

SELECT
*
FROM
performance_schema.replication_applier_metrics;
SELECT
*
FROM
performance_schema.replication_applier_progress_by_worker;
Telemetry 直接发给 otel-collector,不需要自己去写 exporters
-- collector 对应的 HTTP 端口

SET
GLOBAL
telemetry.otel_exporter_otlp_traces_endpoint
=
'http://otel-collector:4318/v1/traces'
;
SET
GLOBAL
telemetry.trace_enabled
=
ON
;Hypergraph 优化器
经典的优化器是基于左深树的,join 的顺序只能在链式结构中查找,bushy 计划和排序属性很难参与到代价比较当中
Hypergraph 把表当作节点,把 join 谓词看作是边,并且用动态规划来枚举连通子图,再用 hash join 与嵌套循环在同一个代价模型中进行比较
在官方 TPC-DS SF1 的 101 条查询中,有 77 条变快了,24 条变慢了,几何平均提升率为 22.45%,但是有 14 条退化程度超过了 50%,因此默认关闭
三种开启方式的影响程度由小到大
-- 1. 会话级别,在当前连接中进行验证

SET
SESSION optimizer_switch
=
'hypergraph_optimizer=on'
;

-- 2、一条SQL语句,并且使用SET_VAR hint,不会影响到其他的语句

SELECT
/*+ SET_VAR(optimizer_switch='hypergraph_optimizer=on') */

c.id,
count
(
*
)
as
cnt
FROM
orders
AS
o
JOIN
customers
AS
c
ON
c.id
=
o.customer_id
GROUP
BY
c.id
ORDER
BY
cnt
DESC
LIMIT
10
;

-- 3、持久化,在重启之后仍然有效,全量前一定要做压测

SET
PERSIST optimizer_switch
=
'hypergraph_optimizer=on'
;
相同的 SQL 跑两次 EXPLAIN ANALYZE 来比较实际行数以及耗时,并且只有确认速度加快的语句使用 hint 固定
-- 基线跑一次,然后开会话开关重跑,比较 actual time 和 rows

EXPLAIN ANALYZE
SELECT
...;
SET
SESSION optimizer_switch
=
'hypergraph_optimizer=on'
;
EXPLAIN ANALYZE
SELECT
...;
sysbench 外部测试中 read-only-distinct 提升了 26%、range=10000 提升了 15%,主要体现在多表连接和带有排序的聚合上
JSON Duality View 支持写入
社区版之前只能创建视图,只能查看数据,9.7 版本补齐了 INSERT、UPDATE、DELETE 等功能,并且支持自动生成主键(省略)。
CREATE TABLE
customers(customer_id
int
primary key
,name
varchar
(
100
));
CREATE TABLE
orders(
  order_id
int
auto_increment
primary key
,
  customer_id
int
,
  amount
DECIMAL
(
10
,
2
),
FOREIGN KEY
(customer_id)
references
customers(customer_id)
);

-- 在WITH语句中定义的操作才可以被书写,没有被声明的对象默认为只读

CREATE
OR
REPLACE JSON RELATIONAL DUALITY
VIEW
order_dv
AS

SELECT
JSON_DUALITY_OBJECT(
WITH
(
INSERT
,
UPDATE
,
DELETE
)
'_id'
rder_id,
'amount'
: amount,
'customer'
: (
   
SELECT
JSON_DUALITY_OBJECT(
WITH
(
INSERT
,
UPDATE
))
   
'customer_id'
: customer_id,
'name'
: name
   
FROM
customers
WHERE
customers.customer_id
=
orders.customer_id
  )
)
FROM
orders;

-- order_id 自增,JSON 中可以省略

INSERT INTO
order_dv
VALUES
(
'{"amount":1299.99,"customer":{"customer_id":1}}'
);

-- 使用 _id 来定位文档,只可以修改一条

UPDATE
order_dv
SET
data
=
'{"_id":1,"amount":999.00}'

WHERE
JSON_EXTRACT(data,
'$._id'
)
=
1
;
DELETE
FROM
order_dv
WHERE
JSON_EXTRACT(data,
'$._id'
)
=
1
;
一条视图 DML 会被拆分成多个基表子语句,并且整个操作是原子提交、失败全部回滚,触发器和外键级联照常执行
滚动升级和容器 CPU
replica_allow_higher_version_source 默认为 ON,可以接受低版本的数据从库连接到高版本主库
-- 先升主库,观察之后再逐个滚从库

SET
GLOBAL
replica_allow_higher_version_source
=
ON
;
cpuset、cgroup 也得到了正确的识别,在 Kubernetes 中 limit 为 4 核不会按照宿主机 32 核来计算线程池
密码存储换 PBKDF2-SHA512
caching_sha2_password 新增 PBKDF2 存储格式,默认仍然是 CRYPT5,客户端不需要做任何修改
-- 新密码或者重置密码的时候用PBKDF2-SHA512

SET
GLOBAL
caching_sha2_password_storage_format
=
'PBKDF2_SHA512'
;

-- 开启强制之后,存量账号登录会要求马上修改密码,并不会直接锁定

SET
GLOBAL
caching_sha2_password_enforce_storage_format
=
ON
;
主库生成的哈希直接复制到从库中,各个节点的配置需要保持一致,否则同一个账号在不同的节点上会有不同的表现
企业版和向量检索
Dynamic Data Masking 仍然属于企业版,策略绑定到列上,按照执行用户或者角色返回掩码值,应用程序不需要修改
向量检索 9.7 还不是 GA,官方正在按照创新版来铺设道路,所以现在不要为了向量迁移数据库
结论
8.0 尽快安排升级排期,在新的项目中使用 9.7 LTS 版本;复制指标、Telemetry 等先接好,Hypergraph 按照 SQL 灰度,PBKDF2 跟着改密码的频率

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表