系统升级后 mysqld 性能很差

系统升级后 mysqld 性能很差

我最近将我的旧款 4GB Core2duo Mac 和 OS X 10.6.8 换成了 16GB 4 核 i5、SSD 和 10.7.2。

新系统除了 mysqld 之外,其他一切都非常快。在轻负载下运行良好,但当我给它一些实际工作时,它的行为就非常奇怪了。

我尝试过 mysql-5.1.59-osx10.6-x86_64 和 mysql-5.5.16-osx10.6-x86_64,结果类似。

工作负载是一个批处理文件,它使用我们从供应商处获得的大型数据库,并将数据处理成可在生产服务器上的应用程序中使用的格式。在旧 Mac 上,它需要 3 到 4 个小时才能运行。

在新版本上,它会在一段时间内快速运行,然后陷入停滞,之后每个查询运行速度都慢得惊人,IO 很少,CPU 在一个核心上固定在 100%(批处理文件通过常规 mysql cli 客户端一次只运行一个查询)。其他应用程序的速度也严重下降,并且占用大量 CPU,尽管根据 top 的说法,有 10GB 的非活动内存。

例如,现在 mysqld 正在运行

select t.t_id, a.a_id from t inner join a on a.x=t.x into outfile;

此查询已运行约一小时,而在旧系统上仅需 4 分钟。它在一个核心上使用 100% 的 CPU,并且每分钟左右将 1MB 块写入输出文件。使用 iosnoop,我看不到表 a 或 t(均为 MyISAM)的任何读取,因此我猜它们缓存在 VM 中。相关索引已预加载到 MyISAM 键缓冲区中。因此肯定不存在 IO 瓶颈。然而,这个新系统比旧系统慢得多(约 20 倍)。

我有 5.5 性能模式,但我不理解它。我有 dtrace,但除了使用 iosnoop 等给定实用程序外,我不太擅长驱动它。

到底发生了什么?我该怎么做才能发现相关信息?

编辑:这是 my.cnf 对 mysqld 的全部内容 — 其它所有内容均为默认设置。

[mysqld]
datadir = /Users/fsb/mysql
port = 3306
socket = /tmp/mysql.sock
key_buffer_size = 1536M
performance_schema = ON

答案1

您的观察一点也不令人惊讶。

如果说我多年来作为 MySQL DBA 学到了一件事,那就是:MySQL 的性能提升完全取决于您的配置。我可以绝对肯定地说这一点,因为我已经安装了 PostgreSQL 和 MySQL,并且已经看到 PostgreSQL 的“开箱即用”性能比 MySQL 的“开箱即用”性能好得多。

为了证明这一点,除了我自己的观点之外,

Percona 最近在 MySQL 的多个版本之间进行了一场“大逃杀”

  • MySQL 4.1
  • MySQL 5.0
  • MySQL 5.1(内置 InnoDB)
  • 带有 InnoDB 插件的 MySQL 5.1
  • MySQL 5.5
  • MySQL 5.6

所有测试都是在未配置 MySQL 的情况下进行的。结果如何?

  • MySQL 4.1 在单线程环境中表现最佳
  • 带有 InnoDB 插件的 MySQL 5.1 在多核上的扩展性优于内置 InnoDB 5.1、5.5 和 5.6

我能从中得到什么?您必须配置 MySQL 5.5/5.6 才能使用多核增强功能

鉴于您正在使用的 my.cnf,MySQL 仍然在运行,就所有意图和目的而言,“开箱即用”。

请执行必要的尽职调查(查询调整、所需配置、数据库基础设施、适当的存储引擎选择和调整),以使 MySQL 达到最佳性能并为您提供更好的服务。

答案2

您有足够的交换空间吗?

您的 /tmp 和 /var/tmp 空间是否足够?

我只是提出一个大胆的猜测,但是 MySQL 数据库的 tmp 空间怎么样?

相关内容