Oracle查看有多个执行计划的SQL语句

发表于:2016-3-18 11:18

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

 作者:潇湘隐者    来源:51Testing软件测试网采编

  在SQL优化过程,有时候需要查看哪些SQL具有多个执行计划(Multiple Executions Plans for the same SQL statement),因为同一个SQL有多个执行计划一般意味着代码有问题或某些其它原因,例如,SQL语句使用绑定变量,但是绑定变量的类型或长度可能不一致会导致同一SQL出现不同执行计划。
  --查看数据库里面有多个执行计划的SQL语句的SQL_ID
  SELECT SQL_ID, COUNT(1) AS PLAN_NUM
  FROM V$SQL
  GROUP BY SQL_ID
  HAVING COUNT(1) >=2
  ORDER BY 2 DESC ;
  --根据具体的SQL_ID查看对应的SQL语句
  SELECT * FROM V$SQL
  WHERE SQL_ID=:SQL_ID;
  可以通过下面SQL语句查询对应SQL的所有执行计划或部分执行计划,分析出现多个执行计划的原因
  --查询SQL所有执行计划
  SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',null))
  --查询SQL的CHILD NUMBER为0的执行计划
  SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',0))
  --查询SQL的CHILD NUMBER为1的执行计划
  SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',1))
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号