【发布时间】:2020-08-22 00:22:19
【问题描述】:
The database 仅包含 2 个表:
- 钱包(100 万行)
- 事务(1500 万行)
CockroachDB 19.2.6 在 3 台 Ubuntu 机器上运行
- 每个 2vCPU
- 每个 8GB 内存
- Docker 集群容器
对
SQL Server 2019 在一台机器上运行 Windows Server 2019
- 4vCPU
- 16GB 内存
这是请求
select * from transaction t
join wallet s on t.sender_id=s.id
join wallet r on t.receiver_id=r.id
limit 10;
- SQL Server 只需 35 毫秒即可返回前 10 个结果
- CockroachDB 需要 3.5-5 分钟。
1) 我知道CockroachDB 的基础设施不够公平,但是.. 差异实在太大了。我错过了什么吗?还是 CockroachDB 对于这个特定的 SQL 请求非常慢?
2) 当我执行这个请求时,所有 3 个蟑螂节点的 CPU 都上升到了 100%。正常吗?
更新:这里是请求“解释”。我不知道如何阅读它..
> explain select * from transaction t
-> join wallet s on t.sender_id=s.id
-> join wallet r on t.receiver_id=r.id
-> limit 10;
tree | field | description
+---------------------+--------------------+----------------------+
| distributed | true
| vectorized | false
limit | |
│ | count | 10
└── hash-join | |
│ | type | inner
│ | equality | (receiver_id) = (id)
│ | right cols are key |
├── hash-join | |
│ │ | type | inner
│ │ | equality | (sender_id) = (id)
│ │ | right cols are key |
│ ├── scan | |
│ │ | table | transaction@primary
│ │ | spans | ALL
│ └── scan | |
│ | table | wallet@primary
│ | spans | ALL
└── scan | |
| table | wallet@primary
| spans | ALL
【问题讨论】:
-
您的架构/索引会显着影响这一点。您要加入的列是否被索引覆盖?您可以使用他们的 EXPLAIN 文档来帮助查看选择了哪些索引,以帮助确定速度慢的原因cockroachlabs.com/docs/v19.2/explain.html
-
当然,它们被索引覆盖,另外,它们都是外键:gist.github.com/duongphuhiep/ee14af3f783f5abedce274beebd903e5 我使用了解释,但由于理解有限,我不确定如何阅读和调试来判断说明好不好
标签: sql-server performance-testing cockroachdb