从操作系统命令TOP到数据库的优化

发表于:2014-8-19 10:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:pxbibm    来源:51Testing软件测试网采编

  4.我们看到进程PID等于5182,我们下面的一个脚本,关联V$PROCESS试图和V$SESSION试图、V$SQLTEST试图,可以找出这个进程正在执行的SQL语句,这里只需要一个“发动”条件,就是进程(PID):
SQL>SELECT /*+ ORDERED */
sql_text
FROM v$sqltext a
WHERE (a.hash_value, a.address) IN
(SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),
DECODE(sql_hash_value, 0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.paddr =
(SELECT addr FROM v$process c WHERE c.spid = '&pid'))
ORDER BY piece ASC;
/
  提示输入变量值。
Enter value for pid: 5182
old   9:  (SELECT addr FROM v$process c WHERE c.spid = '&pid'))
new   9:  (SELECT addr FROM v$process c WHERE c.spid = '5182'))
SQL_TEXT
----------------------------------------------------------------
declare v1  number; begin for n in 1..100 loop for k in 1..100 l
oop select count(*) into v1 from t1; end loop; dbms_lock.sleep(1
); end loop; end;
  注:这里我们使用了3个动态性能试图,获取到了执行的SQL语句。我们的逻辑是:
  1)首先输入一个PID,这个PID即是process id,也就是在TOP命令中看到的PID.
  2)通过PID和v$process.spid相关,我们可以获得process的详细信息。
  3)通过v$process.addr和v$session.paddr相关联,可以获取session的相关详细信息。
  4)再结合v$sqltest,即可获得当前session正在执行的SQL语句。
  总结:
  1.首先我们通过操作系统命令TOP找到了PID.
  2.我们结合3个试图,就找打了当前正在疯狂消耗CPU的罪魁祸首,那么下面的工作就是如何优化这个SQL,我们可以进一步通过
  dbms_system包跟踪改进程,或者通过AWR获取该SQL的执行计划。来改变SQL的执行计划,达到优化的目的。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号