GaussDB(DWS) gs_memwatcher.sh 内存监控脚本
脚本作用:监控内存的使用情况,包括实例的内存使用情况,语句级别的内存使用情况,memoryContext级别的内存使用情况
使用场景:报内存错误(memory is temporarily unavailable)之后,没有定位出来是哪个语句或者memoryContext使用的内存较高,或者想知道实例级别的内存使用情况,这个时候就需要部署该监控脚本,等待复现
脚本涉及到的视图:pv_total_memory_detail,pv_session_memory_detail,pg_stat_activity
部署命令:nohup sh gs_memwatcher.sh 5001 > memorywatch.log 2>&1 &
其中5001为实例号,每个dn或者cn都有一个唯一的实例号,都可以进行监控,该实例号可以通过cm_ctl query -Cv进行查询
脚本输出分析:
脚本共查询了四个sql
1)select * from pv_total_memory_detail,监控的是实例级别的内存使用情况,字段的含义详见产品文档
2)select * from pv_session_memory_detail order by totalsize desc limit 100 ,监控的是top 100的memoryContext的内存使用,其中包括了语句的线程id,memoryContext的名字,使用的大小totalsize
3)select split_part(pv_session_memory_detail.sessid,'.',2) pid,pg_size_pretty(sum(totalsize)) total_size,count(*) context_count from pv_session_memory_detail group by pid order by sum(totalsize) desc;
语句级别的内存使用情况,输出包括线程id(pid),语句内存(total_size),memoryContext的数量(context_count)
4)select sessid, contextname, level,parent, pg_size_pretty(totalsize) as total ,pg_size_pretty(freesize) as freesize, pg_size_pretty(usedsize) as usedsize, datname,query_id, query from pv_session_memory_detail a , pg_stat_activity b where split_part(a.sessid,'.',2) = b.pid order by totalsize desc limit 100;
监控的是语句的memoryContext的使用情况,包括memoryContext名字,query信息,threadid,内存使用大小(totalsize)等信息
根据监控脚本监控的sql,可以清楚的知道实例的内存使用情况,语句memoryContext的大小,语句总的内存使用情况等
- 点赞
- 收藏
- 关注作者
评论(0)