大结果在任何地方都很慢,但在本地

Posted

技术标签:

【中文标题】大结果在任何地方都很慢,但在本地【英文标题】:Large result is slow anywhere but local 【发布时间】:2019-09-06 12:29:08 【问题描述】:

我在 Clickhouse 上运行了一个相当大的查询。问题是使用 cmd 行在 localhost 上运行时,大约需要 0.7 秒才能完成。这始终是快速的。问题是从 C# / HTTP / Postman 查询时。这里返回数据大约需要 10 次。 (大小约为 3-4mb)所以我认为它不是大小问题。

我曾尝试监控网络延迟,但这里没有什么值得注意的。 在主机上它就像一个魅力,但在外面却没有:(....怎么办。

我预计延迟为 100 毫秒,但结果为 7 秒:/

【问题讨论】:

您的查询结果集中有多少行和多少列? clickhouse-client 使用原生 clickhouse 协议 你在 C# 中使用原生 clickhouse 协议驱动吗? github.com/killwort/ClickHouse-Net ? 您是否检查了 C# CH 客户端的查询执行经过的时间? 确认错误在C#客户端和内部Http CH服务器中。我制作了一个使用本地 CH cmd 行并在此处返回结果的 .net 核心 Web 服务。这是超级快:)。 Net Ado 实现的开发者还表示,可以重写 .net 以使用 io.pipelines 来解决上述问题 【参考方案1】:

使用 curl https://clickhouse.yandex/docs/en/interfaces/http/ 检查时间 https://***.com/a/22625150

比较本地和远程

CH HTTP 通常提供与 TCP 几乎相同的性能,对于小型结果集(如 10 行),HTTP 可能更快

【讨论】:

正如我写的那样,它适用于大型结果(20k)行。我只是对其进行压力测试,所以在实际应用中我不知道 20k 行是否会返回。只是想知道为什么它没有扩展【参考方案2】:
Again. The problem is not the HTTP.
Example:

time clickhouse-client -q "select number, arrayMap(x->sipHash64(number,x), range(10)) from numbers(10000)" >native.out
real    0m0.034s

time curl -S -o http.out 'http://localhost:8123/?query=select%20number%2C%20arrayMap(x-%3EsipHash64(number%2Cx)%2C%20range(10))%20from%20numbers(10000)'
real    0m0.017s

ls -l http.out native.out
2108707 Oct  1 16:17 http.out
2108707 Oct  1 16:17 native.out

10 000 rows - 2Mb

HTTP is faster 0.017s VS 0.034s

加拿大 -> 德国 (open***)

time curl -S -o http.out 'http://user:xxx@cl.host.x:8123/?query=select%20number%2C%20arrayMap(x-%3EsipHash64(number%2Cx)%2C%20range(10))%20from%20numbers(10000)'

real    0m1.619s

ping cl.host.x
PING cl.host.x (10.253.52.6): 56 data bytes
64 bytes from 10.253.52.6: icmp_seq=0 ttl=61 time=131.710 ms
64 bytes from 10.253.52.6: icmp_seq=1 ttl=61 time=133.711 ms

【讨论】:

以上是关于大结果在任何地方都很慢,但在本地的主要内容,如果未能解决你的问题,请参考以下文章

Mac OSX 中的文本大小比使用 Qt 的 Windows 小。我想在任何地方都有相同的尺寸

扫雷邻居计数

JabbR 代码库是不是记录在任何地方?

定义类时自动注册(但无需在任何地方导入)

NestJS 不会在任何地方打印日志消息

Python list += iterable 的行为是不是记录在任何地方?