[20191220]格式化執行計劃.txt

lfree發表於2019-12-20

[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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章