首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于mysql性能测试的快速测试数据创建

用于mysql性能测试的快速测试数据创建
EN

Database Administration用户
提问于 2023-02-13 10:43:36
回答 1查看 90关注 0票数 0

我们希望测试mysql数据库中用于主键/索引的序列/bigint vs UUID(VERSION-4) VS UUID(version-7)的性能。对于mysql来说是个新手,很难找到一种简单的方法来轻松地创建数据卷,测试性能,并且“解释分析”在这里似乎也不起作用。基本上想做一些类似于下面的代码在postgres.Can中所做的事情,请在这里指导我?

(UUID Version-4是默认的随机UUID版本,Version-7是时间戳排序的UUID,它比随机的UUID更有顺序,因此在缓存方面更好)。希望以某种方式在mysql中生成这些数据并进行测试。

下面的代码在postgres中工作得很好,我想模仿mysql中类似的代码来测试UUID序列的性能,以便生成、插入和查询。

代码语言:javascript
复制
CREATE UNLOGGED TABLE bigint ( id bigint PRIMARY KEY);

CREATE UNLOGGED TABLE uuid7 ( id uuid PRIMARY KEY);

create sequence myseq cache 32767;
EN

回答 1

Database Administration用户

回答已采纳

发布于 2023-02-13 17:29:06

(评论太多了。)

“缓存”--确保使用至少两倍于innodb_buffer_pool_size中的数据进行测试。否则,大部分或全部数据将被缓存,您将不会看到太大的差别。

由于"100000“行可能无法填充默认的buffer_pool_size,因此您可能希望降低测试的设置。(一定要将其包括在测试计划中。)

"generate“和"nextval”函数是否存储函数?UDF?客户代码?请包括这段代码。

没有LIMITORDER BY是不现实的--你可以得到一些is的子集。它们通常(但不一定)有连续的ids。

IN ( SELECT ... )是一个臭名昭著的坏表演者。用不同的方式来制定测试,这样它就不会受到这个问题的影响。

BIGINT --几乎没有任何应用程序需要比4字节INT (BIGINT的8字节)更适合的应用程序。

EXPLAIN ANALYZE不一定会为您提供性能方面的线索。如果估计,有时很差,各种各样的事情。实际上,您必须对查询进行计时才能获得有用的结果。

“时间戳排序的UUID”--只有在访问模式是基于时间的情况下才与此相关。一个例子:一个新闻网站通常会被探测到“最近”的文章。一定要模拟这两种使用模式。

SELECT * --需要详细信息。至少有3个不相关的问题可能影响基准。() *是否如此小以至于INDEX“覆盖”?() *是否包含任何TEXTBLOB列,从而导致“非记录”获取,这将是所需时间的重要部分。(*)其他。

UNLOGGED不是MySQL术语。

使用AUTO_INCREMENT,而不是SEQUENCE。(以及一些语法更改。)

为了比较-4和-7,您需要(1)表中的行比buffer_pool中的行多,(2)支持按时间聚集的索引的访问模式。

MySQL几乎没有你在其他地方找到的功能。唯一的问题是BENCHMARK(expression, count),它可能对您的任务没有什么用处。存储的例程可以做一些您需要的事情,但是它们不能接受或返回“数组”。MariaDB有伪表,如seq_1_to_100000

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/323435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档