我想针对其他一些分支(例如 Percona 服务器、MariaDB 以及可能的其他分支)对 MySQL 服务器 rpm 进行性能测试(又名烘焙)。我希望通过提出这个问题,我可以更好地理解设置适当性能测试背后的方法。我计划使用 sysbench 来运行我的实际测试,但我对任何事情都持开放态度。
什么是 Percona?
它与 MySQL 有何不同?
我们什么时候应该考虑从库存 MySQL 切换(或升级)到 Percona?
为了在我们的情况下添加一些细节,我们几乎只使用具有广泛外键约束和一些存储过程的 InnoDB(我知道 Percona 已经做了很多优化)。
我们目前发现 MySQL 对我们的查询优化不佳,因此任何超过 3-4 个连接的查询我们都必须使用 STRAIGHT 连接显式构建以提高性能。
我按照本指南在 Percona Server 5.5 上运行了复制,并想知道我是否应该添加read-only=1到我的从属设备my.cnf以使其只读?
该指南为 mysql 表设置复制,以便复制用户,但我主要使用从属来获取 mysqldumps,在紧急情况下将其重新配置为主,所以我认为我们不需要(或应该)启用写入它不断?
我正在使用 MySQL 5.5,当我显示有关字符集的变量时,我有
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Run Code Online (Sandbox Code Playgroud)
我是否需要将character_set_database和更改character_set_server为utf8?
是的,我将在他们两个上运行 strace ......但是,我想知道......
我们有一个应用程序,它将来自不同来源的文章存储在 MySQL 表中,并允许用户检索按日期排序的文章。文章总是按来源过滤,所以对于客户选择我们总是有
WHERE source_id IN (...,...) ORDER BY date DESC/ASC
Run Code Online (Sandbox Code Playgroud)
我们使用 IN,因为用户有很多订阅(有些有数千个)。
这是文章表的架构:
CREATE TABLE `articles` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`source_id` INTEGER(11) UNSIGNED NOT NULL,
`date` DOUBLE(16,6) NOT NULL,
PRIMARY KEY (`id`),
KEY `source_id_date` (`source_id`, `date`),
KEY `date` (`date`)
)ENGINE=InnoDB
AUTO_INCREMENT=1
CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
COMMENT='';
Run Code Online (Sandbox Code Playgroud)
我们需要(日期)索引,因为有时我们在这个表上运行后台操作而不按源过滤。但是,用户不能这样做。
该表有大约 10 亿条记录(是的,我们正在考虑对未来进行分片......)。一个典型的查询如下所示:
SELECT a.id, a.date, s.name
FROM articles a FORCE INDEX (source_id_date)
JOIN sources s ON s.id = a.source_id
WHERE a.source_id IN (1,2,3,...)
ORDER BY a.date DESC …Run Code Online (Sandbox Code Playgroud) 用例:测量创建给定数量的图像。对于每张图像,我们需要存储一小组质量指标(浮点数、双精度数)以及图像整数 [1 ...N]、时间戳和一个或两个外键值。然后应该在 Web 应用程序 (PHP) 中“实时”绘制它以供用户评估。
每个 Web 客户端每 5 秒轮询一次数据库。理想情况下,每组质量指标的存储 + 检索应该花费 < 2 秒(大约)。在最坏的情况下,可能有大约 30 个同时进行的 Web 客户端轮询,并且可能同时写入大约 10 个测量值,从而导致大约 30 次的写入突发。每秒1000组质量指标。
在编程语言中,这类数据可能会存储在数组或列表中。由于我不知道在 MariaDB / MySQL 世界中有任何类似的东西,我只是使用一个常规的 InnoDB 表,上面提到的每个值都有一列。这已经有 90 多万行,预计在未来几个月会增长得更快。
InnoDB 总体上是最好的存储引擎,还是我应该考虑其他?最好的做法是在一段时间后存档数据,也许是在处理完所有测量图像后?它会帮助启用压缩,还是会对性能产生非常负面的影响?
近日,笔者从标准MySQL来移动Percona,并使用了Percona的向导生成my.cnf。
但是,我可以看到,默认情况下,生成的my.cnfuse设置query_cache_type = 0。(查询缓存被禁用)。
我在服务器上运行的唯一内容是 Wordpress 博客。我的问题是:
我有一个 3 节点 Percona XtraDB 集群,根据mysqlcheck,其中一些表已损坏(一些索引包含错误的条目数):
mydb.mytable
Warning : InnoDB: Index 'foo' contains 1393929 entries, should be 1393918.
Warning : InnoDB: Index 'bar' contains 1393921 entries, should be 1393918.
error : Corrupt
Run Code Online (Sandbox Code Playgroud)
OPTIMIZE TABLE在集群上运行的最佳实践是什么?
我在没有用户的测试环境中做了一些实验,似乎OPTIMIZE TABLE一个节点上的an不会自动将其影响传播到其他节点。这与此命令修改索引和表的存储空间,而不是其内容或其定义的事实一致。
在每个节点的生产环境中运行命令,让它在下一个节点中运行之前完成它可能有什么缺点?
考虑到 MySQL(和 Percona XtraDB Cluster,据我所知)不支持分布式表锁,这对用户会有什么影响?这会使集群处于不一致的状态吗?
我的情况是 MySQL 日志分区在不到一天的时间内就被填满了。我无法禁用二进制日志,因为我需要它们进行复制。
我知道我可以设置日志保留时间,但它接受天数,搜索只显示我这个https://serverfault.com/questions/179165/can-expire-logs-days-be-less-than-1-day-in -mysql问题,建议通过脚本自己完成。
由于这个问题已经有将近 8 年的历史了,我想知道现在是否有可能。
如果重要,我正在使用 Percona MySQL 5.7
mysql ×10
percona ×10
innodb ×2
mariadb ×2
mysql-5.5 ×2
performance ×2
backup ×1
cache ×1
corruption ×1
index ×1
mysql-5.7 ×1
optimization ×1
replication ×1
utf-8 ×1