1. 首页
  2. IT资讯

[20191220]格式化执行计划.txt

[20191220]格式化执行计划.txt

–//昨天帮别人优化一个sql语句.对方给的执行计划类似如下:

SCOTT@book> set linesize 80
SCOTT@book> alter session set statistics_level = all;
Session altered.

SCOTT@book> select * from scott.emp ;
SCOTT@book> @ dpc '' ''
PLAN_TABLE_OUTPUT
——————————————————————————–
SQL_ID  9mhzzknczbj6p, child number 1
————————————-
select * from scott.emp

Plan hash value: 3956160932

——————————————————————————–
————————————

| Id  | Operation         | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time
   | A-Rows |   A-Time   | Buffers |

——————————————————————————–
————————————

|   0 | SELECT STATEMENT  |      |      1 |        |       |     3 (100)|
   |     14 |00:00:00.01 |       7 |

|   1 |  TABLE ACCESS FULL| EMP  |      1 |     14 |   532 |     3   (0)| 00:00:
01 |     14 |00:00:00.01 |       7 |

——————————————————————————–
————————————

Query Block Name / Object Alias (identified by operation id):
————————————————————-

   1 – SEL$1 / EMP@SEL$1

–//实际上的执行计划远比上面看到的复杂.为什么不自己简单设置一下环境.再上传结果.无语…实际上包括我的同事也是一样….
–//我自己使用vim,利用一个宏解决这个问题.我一般写宏先记录按键,然后执行,这样不容易出错.最好这些按键不要包含方向键使用hjkl代替.
<ESC>:j!<CR>jdd<ESC>

–//注:这里<ESC>表示<ESC>按键输入如下,启动宏记录:
qj
–//然后打入上面按键,最后按q结束.
–//打入:register j看到如下:

:register j
— Registers —
"j   ^[:j!^Mjdd^[

–//然后计算要重复的次数,很简单选中vim提示里面有选中的行数除以3就是重复此时.我这里是6次,直接输入6@j,看到效果如下:
——————————————————————————————————————–
| Id  | Operation         | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
——————————————————————————————————————–
|   0 | SELECT STATEMENT  |      |      1 |        |       |     3 (100)|   |     14 |00:00:00.01 |       7 |
|   1 |  TABLE ACCESS FULL| EMP  |      1 |     14 |   532 |     3   (0)| 00:00:01 |     14 |00:00:00.01 |       7 |
——————————————————————————————————————–
–//可以发现还是有点点瑕疵.不过基本ok了,自己再修改一下ok.

–//我后来看tanelpoder的blog,链接也提到类似问题:
http://blog.tanelpoder.com/2010/01/18/sometimes-things-are-easy-part-1-how-to-fix-wrapped-execution-plan-text/
–//他的解决方式是:
$ cat /tmp/x | awk '{ printf "%s", $0 ; if (NR % 3 == 0) print } END { print }'
–//很少用.我自己还是使用我的方法处理类似问题.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2669603/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:深沉的少年,转转请注明出处:http://www.cxybcw.com/182796.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code