informix用pqs跟踪活动会话的执行效率

onstat -g pqs?[]? ? ? ? Print statistics for an active query

该命令可以查询当前运行的查询使用了哪些迭代器、迭代器使用了多久,每个迭代器需要返回多少行数据。执行计划的sqexplain.out文件会提供执行计划的大致路径,但是pqs的输出会显示查询操作的执行时间和执行计划。
addr:operator的内存地址,用这个地址来跟踪哪个SCAN operator属于哪个JOIN的operator;
ses-id:session_id;
opname:operator的名称;
phase:operator的使用阶段,例如next,open,close;
rows:被该operator处理的行数,未处理的行数不显示(和执行计划的显示是有差异的);
time:处理该operator的总共时间(和执行计划的显示是有差异的),单位毫秒,例如1:20.10表1分钟20秒10毫秒;
in1:join中的第一个操作(outer),在发生join的迭代器的时候才会产生;
in2:joing中的第二个操作(inner),在发生join的迭代器的时候才会产生;
此处需要再找机会核对哪个左边的驱动表,哪个是右边的循环表???
stmt-type:SQL的操作类型update、delete、select等;


为了便于批量跟踪和监控某段时间数据库中运行SQL的执行情况,写此批处理脚本用于跟踪:

cat /dev/null > px.txt
for i in {1..5}; do                   #循环多少次根据实际情况调整
onstat -g act|grep sqlexec|awk '{print "onstat -u|grep "$3}'|sh  > .tmp;              #只需要关注act输出中的sqlexec线程即可
cat .tmp |awk ?'{print "onstat -g ses "$3 ";onstat -g pqs "$3 ""}'|sh   >> px.txt;
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> px.txt;
sleep 2                       #相对的时间间隔也需要根据实际情况调整
done

 

 

你可能感兴趣的:(informix技术)