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

来源:这里教程网 时间:2026-03-03 14:43:43 作者:

[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 }' --//很少用.我自己还是使用我的方法处理类似问题.

相关推荐