mysql - MariaDB 服务器运行速度比我们可以复制的任何东西快 10 倍。想法为什么?

标签 mysql sql linux memory-management mariadb

我们有一个便宜的共享主机网站。

他们有一个 MariaDB 服务器,我想这是很多客户共享的。我们对此运行了一些相当大的查询并获得了快速响应。我们想将托管转移到别处,但我们根本无法让数据库在任何地方都以同样快的速度运行。

我们尝试了一个新的 VPS 服务器,配备 SSD、12 核和 16 GB 内存。查询比共享主机的数据库长 10 倍。 (事实上​​ ,增加核心数量几乎没有什么区别)。我们尝试了 MySQL 和 MariaDB + 我们的主机还设置了 lightspeed、memcache 和 Redis,但它们没有帮助。

对于我一直在测试的特定查询,共享服务器运行大约需要 0.7 秒,新服务器大约需要 8 秒。

我们检查了索引是否就位(EXPLAIN 查询在两者上看起来相同),并且我们确信整个查询没有被缓存,因为对查询的微小更改不会影响速度。输出很小,所以处理速度较慢。

慢速查询时间长且范围广,但实际上是在尝试匹配 ID 保存为 varchar 的行时效率低下。例如。

SELECT post.ID
FROM post 
LEFT JOIN meta
ON post.ID = meta.postID
AND meta.key = "ABC"
WHERE post.type = "XYZ"
AND meta.value = "123456";

对慢速查询的 EXPLAIN 显示:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, SIMPLE, _booking_all_day, ref, "post_id,meta_key", meta_key, 576, const, 71474, Using where; Using temporary; Using filesort
....

我在此处粘贴了每个服务器的显示变量: https://pastebin.com/iW6WL3zC - 快速的共享服务器。 https://pastebin.com/kJGKHyqs - 新的、速度较慢的服务器。

我有相当多的 MySQL 经验,但我不是数据库工程师!这是我第一次使用 MariaDB,所以我不知道是否有我不知道的重要优化。

一个明显的答案是重写错误的 SQL 代码。我们会这样做,但我们需要在有时间之前移动主机。这个问题只是关于为什么相同的查询可能如此不同/尝试让新服务器运行得一样快(甚至更快)的任何建议!谢谢。

最佳答案

..3zC 老的,快的:MariaDB 10.1.27 buffer_pool=18G
..yqs 新的,慢:MariaDB 10.1.37 buffer_pool=128M

innodb_buffer_pool_size 对性能非常重要。您的 10 倍线索是我经常看到的 I/O 绑定(bind)和缓存中的区别。

每台机器有多少内存? buffer_pool 应该是 可用 RAM 的大约 70%。

同时,他们有相同版本的WP吗?

提高 WP 后元性能的技巧:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta 推荐的索引更改可能实际上加快了较慢机器中的查询速度,足以匹配较快机器。

关于mysql - MariaDB 服务器运行速度比我们可以复制的任何东西快 10 倍。想法为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53372851/

相关文章:

linux - 如何创建在每个发行版上运行的静态 Go 二进制文件?

linux - 忽略 ‘system’ 的返回值,用属性 warn_unused_result 声明 ---GCC 编译器 linux

php - 循环不工作时查询内的 MySQL 查询 (PHP)

mysql - 在 Apache Flink 的 Table API 中使用 CASE WHEN 进行查询

mysql - 这条SQL中的 "t"指的是什么?

mysql - 使用 MAX(id) 优化查询

mysql - 添加外键时表迁移问题

mysql - 使用其他两个表中的数据填充新表

sql - 有没有一种方法可以让我在测试其中一个结果时使用 CASE 而不是运行它两次?

linux - 基于 linux 的 USB 小工具设备的静态主机 RNDIS IP