onstat -g pqs?[
该命令可以查询当前运行的查询使用了哪些迭代器、迭代器使用了多久,每个迭代器需要返回多少行数据。执行计划的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