首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Singlestore (memsql)查询导致高CPU使用率和表上的锁

Singlestore (memsql)查询导致高CPU使用率和表上的锁
EN

Stack Overflow用户
提问于 2022-08-26 04:09:14
回答 3查看 113关注 0票数 -1

高CPU使用率和表上的锁是由我的查询造成的。尽管我尝试使用各种集群索引和碎片键,但性能并没有提高。

在Memsql中,我们创建了这个表并执行了这个查询。在我的环境中,这个查询是运行速度最快的查询。请提供有关如何优化此Memsql表或查询的建议。

表:

代码语言:javascript
复制
CREATE TABLE `mobile_flow` (
  `marker` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `teqthry` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `stry_on` bigint(20) NOT NULL,
  `stry_clsd` bigint(20) NOT NULL,
  `matr_start` bigint(20) NOT NULL,
  `cost_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `prc_findr` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `cost_row` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `prd_sol` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `prd_range` double NOT NULL,
  `prd_invty` double NOT NULL,
  `prd_hagx` int(11) DEFAULT NULL,
  UNIQUE KEY `unq_n1` (`marker`,`teqthry`,`matr_start`) USING HASH,
  KEY `index_1` (marker`,`teqthry`,`matr_start`) USING CLUSTERED COLUMNSTORE,
  SHARD KEY `shd_n1` (`matr_start`,`teqthry`)
);

查询:

代码语言:javascript
复制
SELECT count(*)
FROM mobile_flow
WHERE matr_start<1426393500 and matr_start>=1525202400 AND teqthry='kund' AND marker in ('scpopec', 'rdeg', 'dhendqs');
EN

回答 3

Stack Overflow用户

发布于 2022-08-26 04:55:02

您在筛选索引中使用的列是?如果没有,请尽量从过滤器中使用的列中创建尽可能多的索引。

您可以尝试重新排列筛选器的顺序,保留删除最多行数的筛选器,然后是下一个最大的筛选器。这将确保下游过滤器不需要在大量记录上工作。如果无法将所有这些列作为索引,请在顶部保留最大的索引列筛选器,然后是其他列。

票数 0
EN

Stack Overflow用户

发布于 2022-08-26 10:23:09

对于您的查询,您需要(marker, teqthry, matr_start)上类似BTREE的索引。这与查询模式相匹配,查询模式在前两列上搜索相等,在第三列上搜索范围扫描。单间商店的人有一个类似BTREE的结构,称为跳过者,它被称为BTREE。

您已经有了这个索引,但是它是一个集群列键,它不具有与Skiplist相同的查询计划特征。

我不能访问单一商店系统或你的数据。而且,我不是专家,所以我不能尝试这个。但你可以试试这样的方法:

代码语言:javascript
复制
ALTER TABLE mobile_flow
 DROP KEY index_1
  ADD KEY index_1 (marker, teqthry, matr_start) USING BTREE;

如果我是你,如果这不起作用的话,我会向单身商店的支持寻求一些帮助。

票数 0
EN

Stack Overflow用户

发布于 2022-08-26 23:30:52

警告:以下是MySQL的建议;它可能适用于"memsql“,也可能不适用。

对于MySQL,具有多个选项的IN并不像=那样优化。

添加这两个“复合”(和“覆盖”)索引;优化器将选择哪个更好:

代码语言:javascript
复制
INDEX(teqthry, marker, matr_start)
INDEX(teqthry, matr_start, marker)

EXPLAIN SELECT ...检查它;如果它是‘覆盖’,就会说“使用索引”。

如果这是一个巨大的表,请参见还可以讨论

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

https://stackoverflow.com/questions/73495992

复制
相关文章

相似问题

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