大结果在任何地方都很慢,但在本地
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
【讨论】:
以上是关于大结果在任何地方都很慢,但在本地的主要内容,如果未能解决你的问题,请参考以下文章