1. 程式人生 > >[Oracle運維工程師手記] 如何從trace 檔案,判斷是否執行了並行

[Oracle運維工程師手記] 如何從trace 檔案,判斷是否執行了並行

[Oracle運維工程師手記系列]如何從trace 檔案,判斷是否執行了並行

客戶說,明明指定了並行的hint,OEM 卻報說沒有並行,並且提供了畫面。

客戶的SQL文長這樣:

INSERT/*+ parallel(4) */ INTO TAB001_WORK SELECT/*+ FULL(USR002) */
USR002.IM_PRO_CD, USR002.IM_NO, USR002.PS_DATE, USR002.YY_MM,

到底如何呢,口說無憑,還是來作一次並行trace吧。

SQL> alter session set tracefile_identifier='test1';
SQL> alter session set events 'trace[px_messaging] disk highest';
SQL> alter session set events 'trace[px_control] disk highest';
SQL> alter session set events 'trace[px_scheduler] disk high';
SQL> alter session set events 'trace[sql_compiler.*] disk medium';
SQL> 執行 出現問題的 SQL 文
SQL> exit;

這樣,會一次性地得到幾個trace 檔案。

MBL12_ora_92961_test1.trc
MBL11_p000_33866_test1.trc
MBL11_p001_32473_test1.trc
MBL11_p002_32741_test1.trc
......

第一個檔案: 是 QC 檔案。其他的應當是它生成的 Parallel 檔案。

應當主要從QC 檔案著手進行分析:

**************************
Automatic degree of parallelism (ADOP)
**************************
kkfdtParallel: parallel is possible (no statement type restrictions)
kkfdIsAutoDopSupported:Yes, ctxoct:2, boostrap SQL?:FALSE, remote?:FALSE, stmt?:FALSE.
Automatic degree of parallelism is enabled for this statement in hint mode.
kkopqSetForceParallelProperties: Hint:yes
Query: compute:no  forced:yes forceDop:4
DDLDML : compute:no  forced:yes forceDop:4
kkopqSetDopReason: Reason why we chose this DOP is: hint. <<<<< 此處是說明通過hint ,認識到要執行 parallel 處理。
hint forces parallelism with dop=4

下面,內容是這樣的:

2018-04-24 09:36:23.759351*:PX_Messaging:[email protected]:kxfpclinfo():
load balancing disabled due to single PQ running (non-QA mode)on local inst 2 (total # inst: 2).
(default: 0) inst target is 40
number of active slaves on the instance: 0,
number of active slaves but available to use: 0 <<<<< 一開始的時候,沒有可用的資源

接下來,可以看到,正嘗試著去獲得slave 程序:

2018-04-24 09:36:23.760357*:PX_Messaging:[email protected]:kxfpg1srv(): trying to get slave P000 on instance 1 for q=0x80d9eac90
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): slave P000 is remote (inst=1) 2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): - acquired dp=(nil)
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1sg(): Got It. 1 so far.
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): trying to get slave P001 on instance 1 for q=0x80d9eac90
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): slave P001 is remote (inst=1) 2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): - acquired dp=(nil)
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1sg(): Got It. 2 so far.
jStart=0 jEnd=60 jIncr=1 isGV=0 i=1 instno=2 kxfpilthno=2
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): trying to get slave P000 on instance 2 for q=0x80d9eac90
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): slave P000 is local
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): found dp=0x85a9c9c68 flg=18
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): local slave already started.. sid = 0, iid = 2
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1sg(): Got It. 3 so far.
2018-04-24 09:36:23.760927*:PX_Messaging:[email protected]:kxfpg1srv(): trying to get slave P001 on instance 2 for q=0x80d9eac90
2018-04-24 09:36:23.761444*:PX_Messaging:[email protected]:kxfpg1srv(): slave P001 is local
2018-04-24 09:36:23.761444*:PX_Messaging:[email protected]:kxfpg1srv(): found dp=0x85a9c9cf8 flg=18
2018-04-24 09:36:23.761444*:PX_Messaging:[email protected]:kxfpg1srv(): local slave already started.. sid = 1, iid = 2
2018-04-24 09:36:23.761444*:PX_Messaging:[email protected]:kxfpg1sg(): Got It. 4 so far.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  上面的資訊表明開始試著去獲取並行slave 程序,並漸次取得成功

再往下看,可以看到確實獲得了想要的那些個並行程序:

2018-04-24 09:36:23.774484*:PX_Messaging:[email protected]:kxfpg1sg():
got 4 servers (sync), errors=0x0 returning   <<<<<<<<<<<<<<<<<<<<<<<<<    從這裡也可以看得出來,確實取得了4個並行程序  
Acquired 8 slaves on 2 instances avg height=2 #set=2 qser=14923778 <<<<<<<<  估計因為有兩個 set 的緣故,故此得到了8個並行程序
P000 inst 1 spid 33866
P001 inst 1 spid 32473
P000 inst 2 spid 81205
P001 inst 2 spid 88210
P002 inst 1 spid 32741
P003 inst 1 spid 38214
P002 inst 2 spid 82324
P003 inst 2 spid 88129
2018-04-24 09:36:23.774484*:PX_Messaging:[email protected]:kxfpgsg():
Instance(servers):
inst=1 #slvs=4
inst=2 #slvs=4

接下來,可以看到 QC 正在和 各個Parallel程序 set 進行通訊:

      QC enabled kgl EXPRESS bit on slave for SQL:
----- Current SQL Statement for this session (sql_id=cay1xmzv2mtyz) -----
INSERT/*+ parallel(4) */ INTO TAB001_WORK SELECT/*+ FULL(USR002) */ USR002.IM_PRO_CD, USR002.IM_NO, USR002.PS_DATE, USR002.YY_MM, USR002.YEAR,

.....

       size:  40 aligned:  40 total:9104 rem:7008 to:   4
       Sending parse to slave set 1:  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< QC 和 set 1 進行通訊
         User sqllen sent from QC = 7317

......

2018-04-24 09:36:23.793626*:PX_Messaging:[email protected]:kxfpqrsnd():
Deliver to qref=0x85e94cd8 (points at 2.-1) msg=0x7bff77fd0 flg=0x1
 qref: qrser=14923778 qrseq=5 qrflg=0x1 fmh=0x2 state=00010
 msg:  mhser=14923778 mhseq=6 mhst=3 mhty=6 from=0x85e974c8
qref flow mode now 0x1
Receiver qref ending state=11010
after rsnd/qsnd for qref=0x85e974c8 state=10011 slm=0 bn=1 b0=0x7bff4dfb8 b1=(nil)
after buf swap qref=0x85e974c8 state=00000 slm=0 bn=1 b0=(nil) b1=0x7bff4dfb8
sender qref ending state=00000
kxfxcp1                                                        [      50/     0]
       Sending parse to nprocs:4 slave_set:2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< QC 和 set 2 進行通訊
2018-04-24 09:36:23.793843*:PX_Messaging:[email protected]:kxfprigeb():
Get buffer on q=0x80d9eac90 qref=0x85e9dbf0 server=1.2 flags0x0 qstat=10000
Got buffer on qref=0x85e9dbf0 qrser=14923778 qrseq=4 mh=0x7bff59fb8 fmh=a1 qstat=10011

......

       QC enabled kgl EXPRESS bit on slave for SQL:
----- Current SQL Statement for this session (sql_id=cay1xmzv2mtyz) -----
INSERT/*+ parallel(4) */ INTO TAB001_WORK SELECT/*+ FULL(USR002) */ USR002.IM_PRO_CD,

......

61394 行目:

       QC sends top nobj#:-1 ikc:0 #parts:1048576 flg:0
kxfxpnd                                                        [      60/     0]
       size:  40 aligned:  40 total:8984 rem:7128 to:   4
       kxfxpoeobjv:65535, kxfxpoPMax:1048576, kxfxponobj:-1
       QC sends top nobj#:-1 ikc:0 #parts:1048576 flg:0
kxfxpnd                                                        [      60/     0]
       size:  40 aligned:  40 total:9024 rem:7088 to:   4
       kxfxpoeobjv:65535, kxfxpoPMax:1048576, kxfxponobj:-1
       QC sends top nobj#:-1 ikc:0 #parts:1048576 flg:0
kxfxpnd                                                        [      60/     0]
       size:  40 aligned:  40 total:9064 rem:7048 to:   4
       kxfxpoeobjv:65535, kxfxpoPMax:1048576, kxfxponobj:-1
       QC sends top nobj#:-1 ikc:0 #parts:1048576 flg:0
kxfxpnd                                                        [      60/     0]
       size:  40 aligned:  40 total:9104 rem:7008 to:   4

到最後,可以看到QC與Slave程序的通訊結束了, Slave程序被釋放:

2018-04-24 09:36:26.599729*:PX_Messaging:[email protected]:kxfpIDNDeregister():
removing link for qc 0x80d9eac90 sess 423 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< QC 與 Slave 程序的通訊結束
removing link 0x87544b030 for qc 0x80d9eac90 on list 7

......

2018-04-24 09:36:26.608002*:PX_Messaging:[email protected]:kxfpGatherSlaveStats(begin):
q=0x80d9eac90 qser=14923778
2018-04-24 09:36:26.608002*:PX_Messaging:[email protected]:kxfpGatherSlaveStats(end):
2018-04-24 09:36:26.608002*:PX_Messaging:[email protected]:kxfpqsod_qc_sod(): all slaves released qser=14923778 <<<<<<<<<<<<<  所有的 Slave 程序工作結束,被回收


從上面就可以看到確實是完成了並行的工作。

但是,為什麼 OEM 報 沒有並行,而是單程序執行? 初步估計是OEM 顯示錯了。進一步的分析就要移交給 OEM 團隊通過 OEM 觀點進行分析了。

相關推薦

[Oracle工程師手記] 如何trace 檔案判斷是否執行並行

[Oracle運維工程師手記系列]如何從trace 檔案,判斷是否執行了並行客戶說,明明指定了並行的hint,OEM 卻報說沒有並行,並且提供了畫面。客戶的SQL文長這樣:INSERT/*+ parallel(4) */ INTO TAB001_WORK SELECT/*+ FULL(USR002) */US

苦逼到牛逼詳解Linux工程師的打怪升級之路

locking syn 主從復制 自動 緩沖器 agen 知識 ssa del 做運維也快四年多了,就像遊戲打怪升級,升級後知識體系和運維體系也相對變化挺大,學習了很多新的知識點。 運維工程師是從一個呆逼進化為苦逼再成長為牛逼的過程,前提在於你要能忍能幹能拼,還要具有敏銳

行業的角度分析-Linux工程師

Linux運維工程師是一個新穎崗位,現在非常吃香,目前從行業的角度分析,隨著國內軟體行業不斷髮展壯大,越來越多複雜系統應運而生,為了保證系統穩定執行,必須要有足夠多的Linux運維工程師。維護是軟體生命週期中非常重要一個階段,當前國內的運維工程師人才相對稀缺,故在未來幾年,運維工程師肯定會成

工程師的工資如何每月三千做到每月三萬?

這是一個運維工程師在知乎上的提問: “一個好的運維是怎麼從每月兩三千幹到每月兩到三萬(年薪)的?一般需要多長時間?五年的運維(或者說工作了五年的運維)能達到什麼程度?有哪些坑?運維這個行業真的好嗎?” 以下是其中最精彩的回答: 經歷了很多,但是單個人的經歷不僅不值得分享,有時候還會害人。我身邊有不少

Linux工程師的一天是如何度過的

數據庫備份 登錄系統 服務器 工程師 操作系統 下面先簡單介紹一下個人這幾年從事運維工作以來得出的感悟與體會1.操作系統狀況檢查與告警登錄系統或者通過監控報警平臺查看系統運轉的負載磁盤空間狀態,內存使用狀態,有無報錯日記, 查看報警記錄等。2.操作系統故障處理 根據檢查與監控的情況,對

如何快速成為一名Linux工程師

linux 安全 如今的互聯網,絕大多數的網站、服務、遊戲均是跑在Linux上面的,雖說Linux發行版眾多,只要玩熟了一種發行版,了解了Linux精髓、基本架構、設計原理,其他都是觸類旁通的,千萬不要在選擇哪一發行版而浪費很多時間,不值當的,這就如同我是上清華好,還是上北大好呢?統稱為[清北謎題]了

Linux工程師必備(命令)

linux 運維 工程師 如何過濾出以下目錄的中的所有一級目錄[[email protected]/* */ ~]# lltotal 16-rw-r--r-- 1 root root 0 Jul 5 11:43 111-rw-r--r-- 1 root root 0 Ju

推薦給IT工程師必須學習的4本Linux書籍

linux 我們的人生如遊戲,每個人都扮演著不同的角色,有普通玩家、NPC、普通野怪,終極Boss,都有不同的級別之分,我們在技術方面又何嘗不是呢,我們大部分人都是普通野怪,遍地都是,很容易被別人虐,沒有什麽特殊的技能,而Boss確實很少的,尤其像一些大的遊戲都只有一個終極Boss,那是強大無比的存在,在我

IT工程師們為什麽選擇使用Linux系統

linuxlinux自誕生之日起,便受到了全世界優秀黑客程序員們的百般寵愛與關註。曾經,linux似乎離我們非常遙遠;而現在,越來越多的人聽說了linux,會去討論linux發行版,會去關註linux內核。而程序員們更是熱衷於使用linux,在linux開發。那麽,究竟linux為什麽吸引著這麽多程序員們的熱

19道小米網工程師筆試真題

小米 運維題目1:有一百個圖片文件,它們的地址都是http://down.xiaomi.com/img/1.pnghttp://down.xiaomi.com/img/2.png…一直到http://down.xiaomi.com/img/100.png批量下載這100個圖片文件,並找出其中大於500KB的文

【轉載】職業向!我是怎麽入得行業?工程師入門必備技能以及打怪升級篇

能說 還要 作用 經歷 人工智能 details 最大堆 orm lock 前言:轉載 陳浩一個從事安全運維向的前輩文章。寫的很好。人非常nice,遇到了問題,qq上很快就回復了我。 大道三千 入門最難,凡事入了行,也就什麽都好說了,好的自然不斷努力奮鬥修行,不好的自然很快

工程師網址導航

nta theme 化運維 linkedin jin git 做了 asi 大名 Linux/Unix系統教程 鳥哥私房菜 Linux系統教程,從入門到高級,全面覆蓋,學習Linux必備 howtoforge 一個內核級的教程,這個教程相當不錯 lartc 一個關

工程師之遷移discuz論壇

相關 acc blog 如果 tps oba con http 遷移 1,通過後臺管理備份好站點數據和導出整個數據庫。(具體情況具體具體做) 2,上傳好站點數據的備份,還原站點,然後再倒入整個數據庫 3,如果數據庫的名字和數據庫用戶,和數據庫密碼與原來的有不同則需要修改站點

工程師必須掌握的基礎技能有哪些?

運維工程師必須掌握的基礎技能有哪些?作者:Tanky Woo鏈接:https://www.zhihu.com/question/23665108/answer/25299881來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。1. Linux基礎包括對Linux整體的理解/使用和基

經驗之談:Linux工程師所需技能

運維經驗 linux 以自己有限的經驗說說作為一名合格的Linux運維工程師需要掌握的東西:1、選擇版本現在發行版本已經讓人有點眼花繚亂了。但是架構和底層的東西都是一樣的,只是各自會有一些自己特有的工具。LINUX:CentOS、Red Hat、Oracle Linux、Debian、Ubuntu、S

如何借助Anycast技術拯救工程師的睡眠?

anycast bgp linkedin cloudflare ddos 半夜十二點,小王正在酣睡。突然一陣清脆的手機鈴聲響起,把小王從睡夢中拉扯回現實。“餵,誰啊?”“王工,我是監控中心的,公司的xxx服務器掛了,你趕緊看一下吧。”小王揉了揉眼睛,起身打開筆記本電腦,開始了一宿的不眠夜。

linux工程師

linux運維linux運維工程師目錄1.第一章linux基礎入門2.第二章linux系統管理3.第三章linux服務及安全管理4.第四章linux集群架構5.第五章企業級自動化運維監控及實戰6.企業級web緩存及tomcat實戰,Git分布式版本控制7.企業級MySQL DBA, Nosql實戰技能全解和優

Linux工程師筆試題第十三套

硬件 消息隊列 多說 提示 per 負載均衡 但是 轉發 -s 這套題的出處是http://blog.51cto.com/nolinux/1670406 ,看到了周末閑著沒事就做一做,答案都是我結合自己的工作得到的,不一定百分百準確,現在拿出來跟各位分享一番。1、請寫出

工程師總結

良好的 使用 問題解決 網站架構 集群 自動化運維 一個 事件 好的 運維工程師對一個公司來說是非常重要的崗位,它本身所覆蓋的運維職責就很重要,所以,運維對其它關聯工種必須非常了解熟悉:網絡、系統、系統開發、存儲,安全,DB等。作為一個運維工程師我認為是集合網絡、系統、開發

詳解linux工程師高級篇(大數據安全方向)

向導 未使用 上傳 itl 條件 ear 實測 port 擁有 詳解linux運維工程師高級篇(大數據安全方向) hadoop安全目錄:kerberos(已發布)elasticsearchknoxoozierangerapache sentry簡介: 從運維青銅