升级服务器后, mysql 性能反而更慢了,求排查思路

133 天前
 danaesoziommw49
原机器是 小型 NUC i5-10310U 8C8G
升级后是 华为 2288H-V5 金牌 6133*2 40C64G
测试两台设备磁盘读写都是 500MB/s 左右,网络也都是 1G 。
---
但是新的机器查询比原机器更慢一倍,explain 输出结果又是一样的。
13w 数据的表,limit 500 都要 5 秒。
求排查思路。
10503 次点击
所在节点    MySQL
106 条回复
ntedshen
132 天前
诶对我有一计:
超线程关了再看看

https://www.mysql.com/why-mysql/benchmarks/mysql/
顺带你这并不是压测,跑赢了也没啥用就是。。。
kokutou
132 天前
Linux 内核加个启动参数关闭 CPU 漏洞补丁试试。。。
你就搜这句会有个阿里云的文档。
其实就是加个 mitigations=off 参数关闭所有漏洞修复
xaxb
132 天前
time echo "scale=5000; 4*a(1)" | bc -l -q

跑下 5000 位的圆周率看下 CPU 成绩,i7 10875h, 虚拟机内三次最佳:10.844s
laminux29
132 天前
小白没经验,装机前没来论坛问问,第一次自己瞎装机,翻车了很正常。

Intel Xeon@ Gold 6133 这是 OEM 的 CPU ,在 Intel Ark 没数据,在各大 CPU Benchmark 也没数据,买这款 CPU ,属于采购的重大决策失误。买 CPU 是不能买 OEM 的,因为你拿不到官方的频率数据、指令集数据、TDP 数据,拿不到 CPU Benchmark 数据,导致像现在这样,出问题了都没办法排查。

因为拿不到指令集与 TDP ,只能看看其他参数。i5-10310U 的睿频(单核睿频)是 4.4 Ghz ,而 Intel Xeon@ Gold 6133 只有 3.0 。并且前者的内存是非 ECC ,后者是功能更多更稳但更慢的 ECC ,所以 Mysql 在前者的表现优于后者,这也是不难理解的。
sunny2580839896
132 天前
@defunct9
ip:199.0.0.1
user:root
pwd:root
ssh 哥,帮我看下服务器
imgoodman
132 天前
```
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123123 -v /data/mysql:/var/lib/mysql -v /etc/my.cnf:/etc/my.cnf -d -p 3306:3306 mysql:8.0.32
```
导出全部数据,导入全部数据
julyclyde
132 天前
@cobbage 单线程你说的是 redis 吧还是旧版本 redis
realpg
132 天前
@defunct9 #1
很正常...

对于非专业的, 以他描述的内容 这里面至少有七八个坑在前面等着 OP 踩一遍
随便哪个踩到了 都可能是现在这个结果, 甚至更差...

甚至把 从他的描述 我就不太想帮忙...
IO 性能差 连 IO 构形都不说 告诉你个顺序读写速度...

而且, 这不是你习惯的开个 ssh 就能解决的问题... 这不是 os 以内的问题
longlonglanguage
132 天前
当初我学习数据库的时候是怀着非常崇敬的心情,觉得非常的高大上,觉得 sql 语句非常的强。当学习深入,看到各种数据库调优大师把 bug 当作数据库特性的时候,我才明白是很强,但是又很弱智。凑合着用吧,除非你想深入数据库开发这一块,要不然不用太深入,当你理解一个他的 bug 时候,他一个版本升级,bug 又没了,你调优调了个寂寞。不如紧跟时代潮流,市场上流行啥用啥,别人都帮你测试过了绝对好用。我的意思是新项目,如非要求的话,可以考虑用 pg 。
vkZudze5p1h4py5H
132 天前
先问下 AI 多好,何必求人还被质疑提问的艺术? deepseek 非深度思考模式的回答如下,我大致看了下,以上各位提出的思路几乎都考虑到了。

# MySQL 性能下降排查思路

从你的描述来看,升级到更高配置的服务器后 MySQL 性能反而下降了,这是一个典型的"硬件升级但性能不升反降"案例。以下是一些排查思路:

## 1. 基础配置检查

- **MySQL 版本**:确认两台服务器上的 MySQL 版本是否一致
- **配置文件**:比较`my.cnf`或`my.ini`配置是否有差异
- **存储引擎**:确认表是否都使用 InnoDB 引擎

## 2. CPU 相关排查

- **CPU 频率**:i5-10310U 基础频率 1.7GHz ,最大睿频 4.4GHz ;而金牌 6133 基础频率 2.5GHz ,但可能因节能设置降频
- **CPU 亲和性**:检查是否绑定了错误的 CPU 核心
- **节能模式**:在 BIOS 中检查是否启用了节能模式
- **CPU 调度策略**:检查`cpufreq`设置

## 3. 内存相关排查

- **NUMA 架构**:2288H-V5 是 NUMA 架构,检查 MySQL 是否跨节点访问内存
```bash
numactl --hardware
numastat -p <mysql_pid>
```
- **内存分配**:检查 InnoDB 缓冲池大小是否适当配置

## 4. 存储 I/O 排查

- **文件系统**:确认是否使用相同的文件系统(如 ext4/xfs)
- **I/O 调度器**:检查 I/O 调度算法是否合适
```bash
cat /sys/block/sdX/queue/scheduler
```
- **挂载参数**:比较`/etc/fstab`中的挂载选项

## 5. 数据库特定检查

- **查询缓存**:检查是否启用了查询缓存(MySQL 8.0 已移除)
- **临时表**:检查是否使用了磁盘临时表
```sql
SHOW STATUS LIKE 'Created_tmp%';
```
- **表统计信息**:尝试分析表
```sql
ANALYZE TABLE 表名;
```
- **并发连接数**:检查是否有连接堆积

## 6. 系统级检查

- **系统负载**:使用`top`/`htop`检查系统负载
- **中断平衡**:检查是否所有 CPU 核心都参与中断处理
```bash
cat /proc/interrupts
```
- **透明大页**:检查 THP 设置
```bash
cat /sys/kernel/mm/transparent_hugepage/enabled
```

## 7. 性能分析工具

- **慢查询日志**:启用并分析
```sql
SET GLOBAL slow_query_log = 'ON';
```
- **Performance Schema**:启用性能监控
- **pt-query-digest**:分析查询模式

## 建议的紧急检查项

1. 检查 NUMA 设置,尝试在启动 MySQL 时使用:
```bash
numactl --interleave=all mysqld ...
```
2. 检查 CPU 频率是否被限制:
```bash
cpupower frequency-info
```
3. 检查 InnoDB 缓冲池大小是否合理配置(建议物理内存的 50-70%)

这种性能下降通常与 NUMA 架构、CPU 频率调节或 I/O 子系统配置不当有关,建议先从这些方面入手排查。
ssb4
132 天前
@kpsanmao @livid 无价值的 AI 回答
est
132 天前
有个说法是,如果软件吃单核,那么桌面处理器就是吊打服务器处理器。

服务器处理器除了核心多,一些特殊指令比如 avx512 ,其实比不上桌面处理器。以前只有服务器支持 ECC 现在桌面级的很多也支持了。

楼主这款似乎是 Xeon 6133 ?查了下,睿频之后才 3 GHz 。10310U 是 4.4GHz
Jokesy
132 天前
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#log-bin=/databak/mysql-bin/mysql-bin
log_bin_trust_function_creators=1
skip-name-resolve
server-id=1
port=3306
federated
binlog-do-db=mysql
binlog-do-db=ORST_CLOUD
binlog-do-db=information_schema
binlog-do-db=performance_schema
replicate-do-db=mysql
replicate-do-db=ORST_CLOUD
replicate-do-db=information_schema
replicate-do-db=performance_schema
binlog-ignore-db=test
replicate-ignore-db=test
#slave-skip-errors = 1062

#*** parameter set ***
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
sync_binlog = 1
slow_query_log = ON
long_query_time = 3
binlog_format = ROW
transaction_isolation = READ-COMMITTED
query_cache_size = 0
query_cache_type = 0
interactive_timeout = 7200
wait_timeout = 7200
expire_logs_days = 30
max_connections = 5000
max_connect_errors = 30
event_scheduler=ON
group_concat_max_len=1024000
innodb_flush_log_at_trx_commit=2
character-set-server = utf8
max_allowed_packet = 600M
[mysqldump]
quick
max_allowed_packet = 600M

之前我优化的参数,你可以借鉴操作,核对有效使用
wwhc
132 天前
楼主的 NUC i5-10310U 是双通道 ddr4 2933 么?如果金牌 6133 服务器的内存配置是 32gbx2 的话,内存带宽就要慢上一倍
vkZudze5p1h4py5H
132 天前
@ssb4 怎么是无价值呢,我说的是建议先问下 AI ,贴出来的内容是展示一下 AI 的回答,里面几乎涵盖了上面所有人给出的思路。我并没有直接粘贴 AI 作为回答。
vkZudze5p1h4py5H
132 天前
@ssb4 请你瞪大你的眼睛看看是不是几乎涵盖了大家指出的各种方向,你是基于什么判定的无价值的 AI 回答呢
webs
132 天前
忍不住给高手们点了赞,包括你的大篇幅回答 @kpsanmao
coldear
132 天前
看看查询的时候是不是某个 core 长时间接近 100%
再对比一下老机器,可能是单核性能不够
opengps
132 天前
硬盘格式化时候的块大小是多少?
springz
132 天前
感觉先去掉一个 CPU 试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1138433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX