Clickhouse 性能瓶颈排查 IO过高
前几天公司clickhouse 有个查询很慢。经理一直追问为什么慢 是cpu 不够 还是IO 占用太高,还是其他的原因。于是有了以下的排查 执行该条,在不考虑优化sql 的情况下 进行性能排查

1、首先便是万能的 top第三行CPU信息统计数据:
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
```
Cpu(s):
0.3% us: 用户空间占用CPU百分比
0.2% sy: 内核(系统)空间占用CPU百分比
0.0% ni: 用户进程空间内改变过优先级的进程占用CPU百分比
99.7% id: 空闲CPU百分比
0.0% wa: 等待输入输出的CPU时间百分比
0.0%hi: 硬件CPU中断占用百分比
0.0%si: 软中断占用百分比
0.0%st: 虚拟机(虚拟化技术)占用百分比
KiB Mem : 13142010+total, 54558996 free, 49383624 used, 27477484 buff/cache
1004768k total: 物理内存总量
463092k used: 使用的物理内存总量
541676k free: 空闲内存总量
64316k buffers: 用作内核缓存的内存量
KiB Swap: 67108860 total, 64400272 free, 2708588 used. 80281728 avail Mem
694268k total: 交换区总量
0 k used: 使用的交换区总量
694268k free: 空闲交换区总量
224884k cached:缓冲的交换区总量
```
未执行sql 
执行sql 时

对比上面的,可以看出clickhouse 这个进程虽然cpu占用是200%,占比几乎用到 2core,但是服务器总cpu使用率只有 4.4(服务器48core)。内存空闲也比较高。
然后还有一个就是wa 比较高,wa 对应的是 等待输入输出的CPU时间百分比。
于是猜测是io 较高(其实早就猜到io 高)于是有了重头戏 pidstat iostat
2、pidstat
先清楚下clickhouse的缓存。
# clickhouse缓存是linux 的 page cache中 sync
echo 3 >/proc/sys/vm/drop_caches # 命令的含义:展示I/O统计,每秒更新一次
pidstat -d 1
未执行sql时
11时24分33秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时24分34秒 990 9048 26025.93 0.00 0.00 java
11时24分34秒 990 442735 10540.74 0.00 0.00 du 11时24分34秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时24分35秒 990 9048 446176.00 0.00 0.00 java 11时24分35秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时24分36秒 990 9048 22112.00 0.00 0.00 java 11时24分36秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时24分37秒 990 9048 14436.00 0.00 0.00 java 11时24分37秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时24分38秒 990 9048 20964.00 0.00 0.00 java 11时24分38秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时24分39秒 990 9048 19136.00 0.00 0.00 java
11时24分39秒 0 247761 0.00 8.00 0.00 presto-server ``` 在执行sql 的时候 执行了pidstat,命令显示结果如下
```
11时21分47秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时21分48秒 990 9048 12381.48 0.00 0.00 java
11时21分48秒 983 124101 0.00 3.70 0.00 java
11时21分48秒 963 348889 153166.67 3.70 0.00 clickhouse-serv 11时21分48秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时21分49秒 990 9048 22996.00 0.00 0.00 java
11时21分49秒 962 78518 356.00 0.00 0.00 zabbix_agentd
11时21分49秒 963 348889 93948.00 0.00 0.00 clickhouse-serv 11时21分49秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时21分50秒 0 1323 0.00 16.00 0.00 jbd2/sdb-8
11时21分50秒 0 4251 0.00 12.00 0.00 java
11时21分50秒 990 9048 17576.00 0.00 0.00 java
11时21分50秒 963 348889 150992.00 4.00 0.00 clickhouse-serv 11时21分50秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时21分51秒 990 9048 24484.00 0.00 0.00 java
11时21分51秒 963 348889 151164.00 0.00 0.00 clickhouse-serv 11时21分51秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
11时21分52秒 990 9048 16096.00 0.00 0.00 java
11时21分52秒 1000 148747 0.00 8.00 0.00 mysqld
11时21分52秒 963 348889 175228.00 0.00 0.00 clickhouse-serv
很明显clickhouse 读磁盘io最大到了 175228.kB/s 换算成 171M/s。但这边的clickhouse 数据目录我是分到7块磁盘,7块磁盘的读速度 171M/s 并不是很高,单块磁盘表现好可以又120M/s。但此时性能的瓶颈差不多可以确定为IO
3、iostat
先清楚缓存
使用命令“iostat -x 1“确定哪个磁盘设备IO负载高:
iostat -x 1

我这边挂在的时 data1 2 3 4 5 6 7
df -l ev/sda1 1038336 145704 892632 15% /boot
/dev/sdf 2306651404 460825460 1728631192 22% /data5
/dev/sdh 2306651404 1097399924 1092056728 51% /data7
/dev/sdb 2306651404 1086978144 1102478508 50% /data1
/dev/sde 2306651404 796331792 1393124860 37% /data4
/dev/sdd 2306651404 899894556 1289562096 42% /data3
/dev/sdg 2306651404 628524548 1560932104 29% /data6
/dev/sdc 2306651404 1796066508 393390144 83% /data2
未执行sql时
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 5.00 8.00 13.00 56.00 10.62 0.01 0.69 1.80 0.00 0.69 0.90
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.37 46.75 46.75 0.00 6.38 5.10
sdd 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.51 64.00 64.00 0.00 8.62 6.90
sde 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.17 21.75 21.75 0.00 5.38 4.30
sdf 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.08 9.62 9.62 0.00 2.00 1.60
sdh 0.00 0.00 64.00 0.00 1812.00 0.00 56.62 0.14 2.12 2.12 0.00 1.28 8.20
sdg 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.12 15.00 15.00 0.00 2.00 1.60
sdi 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.13 16.75 16.75 0.00 2.25 1.80
sdj 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdk 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdl 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.16 19.88 19.88 0.00 2.62 2.10
sdn 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdm 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdp 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdq 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdr 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.20 25.62 25.62 0.00 6.12 4.90
sds 0.00 0.00 1.00 0.00 24.00 0.00 48.00 0.02 16.00 16.00 0.00 16.00 1.60
sdt 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 5.00 8.00 13.00 56.00 10.62 0.01 0.69 1.80 0.00 0.69 0.90
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle
0.52 0.00 0.29 0.06 0.00 99.12 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.19 23.50 23.50 0.00 3.00 2.40
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdf 0.00 0.00 1.00 0.00 128.00 0.00 256.00 0.00 0.00 0.00 0.00 0.00 0.00
sdh 0.00 0.00 13.00 0.00 2432.00 0.00 374.15 0.12 9.31 9.31 0.00 3.46 4.50
sdg 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdi 0.00 0.00 1.00 0.00 128.00 0.00 256.00 0.00 0.00 0.00 0.00 0.00 0.00
sdj 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.14 17.12 17.12 0.00 2.25 1.80
sdk 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.15 19.00 19.00 0.00 2.50 2.00
sdl 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdn 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.17 21.38 21.38 0.00 2.88 2.30
sdo 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.33 40.75 40.75 0.00 5.88 4.70
sdm 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.14 18.00 18.00 0.00 2.38 1.90
sdp 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.11 13.75 13.75 0.00 1.88 1.50
sdq 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.09 11.25 11.25 0.00 1.62 1.30
sdr 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sds 0.00 0.00 9.00 0.00 1828.00 0.00 406.22 0.20 22.78 22.78 0.00 2.67 2.40
sdt 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.01 1.50 1.50 0.00 0.38 0.30
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
执行sql时:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 448.00 2.00 15168.00 8.00 67.45 0.85 1.88 1.89 0.00 1.82 81.90
sdb 0.00 0.00 1481.00 0.00 190052.00 0.00 256.65 42.70 23.77 23.77 0.00 0.68 100.30
sdc 0.00 0.00 1.00 0.00 128.00 0.00 256.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.07 8.75 8.75 0.00 4.12 3.30
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdf 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdh 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdg 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.16 19.75 19.75 0.00 5.12 4.10
sdi 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdj 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.37 46.38 46.38 0.00 7.62 6.10
sdk 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.19 24.00 24.00 0.00 3.12 2.50
sdl 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdn 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdo 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.13 16.12 16.12 0.00 5.50 4.40
sdm 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.01 1.50 1.50 0.00 0.25 0.20
sdp 0.00 0.00 10.00 0.00 2096.00 0.00 419.20 0.21 21.10 21.10 0.00 5.00 5.00
sdq 0.00 0.00 3869.00 0.00 15476.00 0.00 8.00 2.98 0.77 0.77 0.00 0.20 77.50
sdr 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.27 33.25 33.25 0.00 6.88 5.50
sds 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.20 24.50 24.50 0.00 3.12 2.50
sdt 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 448.00 2.00 15156.00 8.00 67.40 0.85 1.89 1.90 0.00 1.82 81.80
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle
9.43 0.00 2.47 29.14 0.00 58.96 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 699.00 0.00 9424.00 0.00 26.96 0.50 0.72 0.72 0.00 0.59 40.90
sdb 0.00 4.00 1415.00 4.00 182672.00 32.00 257.51 49.25 37.00 37.11 0.00 0.71 100.30
sdc 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.02 2.50 2.50 0.00 0.50 0.40
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.17 21.12 21.12 0.00 2.88 2.30
sdf 0.00 0.00 19.00 0.00 4116.00 0.00 433.26 0.32 16.84 16.84 0.00 3.11 5.90
sdh 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.34 42.00 42.00 0.00 5.88 4.70
sdg 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdi 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.41 50.62 50.62 0.00 6.88 5.50
sdj 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdk 0.00 0.00 1.00 0.00 128.00 0.00 256.00 0.00 0.00 0.00 0.00 0.00 0.00
sdl 0.00 0.00 8.00 0.00 2048.00 0.00 512.00 0.31 38.88 38.88 0.00 5.25 4.20
sdn 0.00 0.00 6.00 0.00 1508.00 0.00 502.67 0.25 42.00 42.00 0.00 7.67 4.60
sdo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdm 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdp 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdq 0.00 0.00 3989.00 0.00 17968.00 0.00 9.01 1.58 0.40 0.40 0.00 0.19 77.40
sdr 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
很明显 sdb 对于的磁盘 使用率达到了 100% 读的速度为 155756kB/s 对于 152M/s
/dev/sdb 2306651404 1086978144 1102478508 50% /data1
data1 就是我们的一块数据盘。
这下就时很明显,改sql 查询慢的瓶颈就是IO
Clickhouse 性能瓶颈排查 IO过高的更多相关文章
- 云服务器 ECS Linux IO 占用高问题排查方法
https://help.aliyun.com/knowledge_detail/41224.html?spm=5176.7841174.2.19.uqC1as#使用 iostat 从系统纬度查看磁盘 ...
- Linux系统 磁盘IO过高排查总结
最近做的一个电商网站因为磁盘 I/O 过高导致访问速度奇慢,问题存在两个月有余未得到解决办法.此次排查原因的经验可以作下次问题的参考. 1.会看懂 top 系统命令出来的各项参数.此次是无意中发现 u ...
- MySQL占用IO过高解决方案【转】
1.日志产生的性能影响: 由于日志的记录带来的直接性能损耗就是数据库系统中最为昂贵的IO资源.MySQL的日志包括错误日志(ErrorLog),更新日志(UpdateLog),二进制日志(Binlog ...
- linux 磁盘io利用率高,分析的正确姿势
一.背景简介 作为一个DBA难免不了会遇到性能问题,那么我们遇到性能问题该如何进行排查呢?例如我们在高并发的业务下,出现业务响应慢,处理时间长我们又该如何入手进行排查,本片文章将分析io高的情况下如何 ...
- SQLSERVER排查CPU占用高的情况
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- 找出linux服务器IO占用高的程序
一台服务器比较性能无外乎内存.cpu使用率.IO使用率,把这3样优化好了,你服务器的负载就要小很多,当然网络情况不在我的考虑范围,毕竟网络这个情况是很不稳定,就算你服务器上把网络优化得再好,idc不 ...
- Linux查看CPU、内存、IO占用高的进程
查看CPU占用高的top15进程 | | 查看内存占用高的top15进程 | | 查看IO占用高的top15进程 ./ind_high_io_process.py 3 4 5.其中3表示间隔3秒获取一 ...
- 一次磁盘IO过高分析过程
1.查看监控,发现整点时间有写IO过高情况
- IO负载高来源定位pt-ioprofile
1.使用top -d 1 查看%wa是否有等待IO完成的cpu时间,简单理解就是指cpu等待磁盘写入完成的时间:IO等待所占用的cpu时间的百分比,高过30%时IO压力高: 2.使用iostat -d ...
随机推荐
- 第4课,python 条件语句if用法
主题: 智能对话程序的设计 前言: 在编程中存在三大逻辑结构:顺序结构,分支结构(用条件语句if构成),循环结构.其中循环结构能完成,重复次数多,庞大的工作: 分支结构优势不在完成的多,但占有重要位置 ...
- count_if 功能模板
count_if 功能模板 template <class InputIterator, class UnaryPredicate> typename iterator_traits< ...
- Golang ---基准测试
什么是基准测试 基准测试,是一种测试代码性能的方法,比如你有多种不同的方案,都可以解决问题,那么到底是那种方案性能更好呢?这时候基准测试就派上用场了. 基准测试主要是通过测试CPU和内存的效率问题,来 ...
- java之mybatis之一对多关联映射
1.在一对多的关联映射中,表结构如下 2.实体类结构 User.java public class User implements Serializable{ private int id; priv ...
- DNS原理及劫持问题
对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑.手机.电视这些设备到底是如何被“连接”起来的.本文通过“我”,一个普通的网络请求的视角,给大家介绍下“我”的工作流程是如何的. 人们动动手指,点 ...
- activiti用户手册
http://www.mossle.com/docs/activiti/index.html
- SQL server 2008数据库的备份与还原(亲测,效果良好)注意采用单用户模式呀
.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库:Dsidea ...
- webpack集成vue单文件模式的很多坑(研究了1个星期)
1.一开始不知道局部安装webpack后,如何调用webpack. 后来看说明文档(webpack中文网)才知道,有个npx可以启动本地安装的webpack. 我估计:全局安装webpack,全局的w ...
- js中cssText批量修改元素样式
平常编写代码,更改一个元素样式的时候,自己都是用 obj.style.width = "200px"; obj.style.position = "absolute&qu ...
- C++ primer学习笔记_6_函数---函数定义、参数传递
1. 习题参考: 6.14 举一个形参应该是引用类型的例子,再举一个形参不能是引用类型的例子. 答: 形参使用引用类型的情况:(1)避免拷贝传递大对象的时候,这里的string对象s:(2)当需要从函 ...