《王健-PG 排错-数据库管理、开发实践专场(23页).pdf》由会员分享,可在线阅读,更多相关《王健-PG 排错-数据库管理、开发实践专场(23页).pdf(23页珍藏版)》请在三个皮匠报告上搜索。
1、80%的问题CPU高IO高SQL慢解决问题-CPU相关命令 top mpstat pidstat perf解决问题-IO相关命令 iostat iotop pidstat解决问题-数据库相关视图解决问题-执行计划EXPLAIN SELECT*FROM users AS u1,messages AS m,users AS u2WHERE u1.id=m.sender_id AND m.receiver_id=u2.id;QUERY PLAN-Hash Join (cost=540.00.439429.44 rows=10003825 width=27)Hash Cond:(m.receiver_
2、id=u2.id)-Hash Join (cost=270.00.301606.84 rows=10003825 width=23)Hash Cond:(m.sender_id=u1.id)-Seq Scan on messages m (cost=0.00.163784.25 rows=10003825 width=19)-Hash (cost=145.00.145.00 rows=10000 width=4)-Seq Scan on users u1 (cost=0.00.145.00 rows=10000 width=4)-Hash (cost=145.00.145.00 rows=10
3、000 width=4)-Seq Scan on users u2 (cost=0.00.145.00 rows=10000 width=4)执行计划代价行数评估10%的问题网络类问题如何分析和定位1.了解TCP原理2.抓包、wireshark分析3.了解PG的前端协议【案例】网络延迟不同插入性能差异很大Ping延迟1ms,1000条插入耗时4s【案例】网络延迟不同插入性能差异很大Ping延迟0.1ms,1000条插入耗时500mstcpdump-i eth0 port 3433-s 0-w t.cap【案例】网络延迟不同插入性能差异很大B代表bind,d代表Describe,e代表execu
4、te【案例】网络延迟不同插入性能差异很大C代表command complete【案例】网络延迟不同插入性能差异很大【案例】网络延迟不同插入性能差异很大结论解法单行插入1条网络消耗时间就达到2ms,1000条insert语句,消耗在网络的rt时间就达到2s。使用insert into values(),(),()的方式批量进行发送,避免网络的多次交互。10%的问题数据库内核相关问题需要的技能1.能够阅读内核代码2.gdb,pstack,systemtap,perf等【案例】vacuum为何造成TPS抖动ClogControlLock的争抢是产生TPS抖动的原因【案例】vacuum为何造成TPS抖动调整clog buffer大小后,ClogControlLock的争抢明显降低【案例】内存异常增长1条insert语句,用了30多GB内存?【案例】内存异常增长gdb-p pid(gdb)p MemoryContextStats(TopMemoryContext)可以看出在ExecutorState过程下ExprContext占用了大量的内存【案例】内存异常增长查看执行计划,发现是hashagg-关闭HashAggregate后,查看执行计划【案例】内存异常增长-内存使用明显降低【案例】内存异常增长