檢視並行程式的一些簡單資訊
在使用並行的時候,總能看到程式中出現一些ora_p這樣的程式。有時候檢視問題的時候只看到並行程式在執行,卻沒有思路去查詢倒底是哪些session在幹些什麼,下面簡單分析一下。怎麼去對映系統級的程式和資料庫級的並行程式。
從系統程式中可以看到一些並行session在執行。
SQL> !ps -ef|grep ora_p|grep TESTDB
testdbuser 17422 1 0 Aug29 ? 00:04:56 ora_pmon_TESTDB
testdbuser 17425 1 0 Aug29 ? 00:01:12 ora_psp0_TESTDB
testdbuser 20847 26200 0 20:54 pts/1 00:00:00 /bin/bash -c ps -ef|grep ora_p|grep TESTDB
testdbuser 32541 1 2 10:09 ? 00:18:23 ora_p000_TESTDB
testdbuser 32543 1 2 10:09 ? 00:17:41 ora_p001_TESTDB
testdbuser 32545 1 2 10:09 ? 00:18:51 ora_p002_TESTDB
testdbuser 32547 1 2 10:09 ? 00:15:55 ora_p003_TESTDB
testdbuser 32549 1 3 10:09 ? 00:19:22 ora_p004_TESTDB
testdbuser 32551 1 3 10:09 ? 00:24:52 ora_p005_TESTDB
testdbuser 32553 1 3 10:09 ? 00:21:43 ora_p006_TESTDB
testdbuser 32561 1 3 10:09 ? 00:24:52 ora_p007_TESTDB
testdbuser 32563 1 1 10:09 ? 00:08:30 ora_p008_TESTDB
testdbuser 32565 1 1 10:09 ? 00:07:20 ora_p009_TESTDB
如果檢視v$session,會發現program中有一些session是和並行相關的session。
SQL> select sid,username,program from v$session where sid in (select sid from v$px_session ) and username='TESTDB';
SID USERNAME PROGRAM
---------- ------------------------------ ------------------------------------------------
2738 testdb oracle@dbserver (P000)
666 testdb oracle@dbserver (P001)
1371 testdb oracle@dbserver (P002)
1590 testdb oracle@dbserver (P003)
2183 testdb oracle@dbserver (P004)
2671 testdb oracle@dbserver (P005)
3125 testdb oracle@dbserver (P006)
4084 testdb oracle@dbserver (P007)
3053 testdb sqlplus@dbserver (TNS V1-V3)
9 rows selected.
在並行中3053 是相當於這個並行處理的代言人,協調者,其他的session都是在後臺默默的工作著。各個並行程式對處理完的資料進行最後的合併都是由3053這個程式來最後完成,展現給使用者。
有時候定義了並行度,想對並行的情況進行一個簡單的監控,至少可以知道目前系統是否還有足夠的資源。並行資源的使用情況等。
可以參考v$px_session, v$px_process,v$session,v$process,v$px_sesstat,v$pq_sesstat來完成。
簡單舉個例子來分析一下。
如果目前我執行一個指令碼,設定的並行度為8,檢視一下執行的並行度情況
select pxsess.sid,sess.username,pxsess.serial#,pxsess.qcsid,pxsess.qcserial#,pxsess.degree,pxsess.server#,pxsess.req_degree from v$px_session pxsess,v$session sess where pxsess.sid=sess.sid and sess.username='TESTDB';
這個例子顯示了並行相關的session,列acsid就是對應的協調session,可以看到顯示的都是6620.,可以透過欄位degree,req_degree看到申請了8個程式,然後也得到了8個程式。server_set中可以看到
SID USERNAME SERIAL# QCSID QCSERIAL# DEGREE SERVER_SET REQ_DEGREE
---------- ------------------------------ ---------- ---------- ---------- ---------- ---------- ----------
4539 testdb 7255 6620 49463 8 1 8
4921 testdb 2967 6620 49463 8 2 8
5295 testdb 31077 6620 49463 8 3 8
5487 testdb 29109 6620 49463 8 4 8
5671 testdb 48021 6620 49463 8 5 8
5863 testdb 10191 6620 49463 8 6 8
6051 testdb 9337 6620 49463 8 7 8
6238 testdb 2979 6620 49463 8 8 8
6620 testdb 49463 6620
得到了基本的資訊來看看對應的程式資訊。
SQL> !ps -ef|grep ora_p|grep TESTDB
testdb 17422 1 0 Aug29 ? 00:04:56 ora_pmon_TESTDB
testdb 17425 1 0 Aug29 ? 00:01:12 ora_psp0_TESTDB
testdb 20847 26200 0 20:54 pts/1 00:00:00 /bin/bash -c ps -ef|grep ora_p|grep TESTDB
testdb 32541 1 2 10:09 ? 00:18:23 ora_p000_TESTDB
testdb 32543 1 2 10:09 ? 00:17:41 ora_p001_TESTDB
testdb 32545 1 2 10:09 ? 00:18:51 ora_p002_TESTDB
testdb 32547 1 2 10:09 ? 00:15:55 ora_p003_TESTDB
testdb 32549 1 3 10:09 ? 00:19:22 ora_p004_TESTDB
testdb 32551 1 3 10:09 ? 00:24:52 ora_p005_TESTDB
testdb 32553 1 3 10:09 ? 00:21:43 ora_p006_TESTDB
testdb 32561 1 3 10:09 ? 00:24:52 ora_p007_TESTDB
testdb 32563 1 1 10:09 ? 00:08:30 ora_p008_TESTDB
testdb 32565 1 1 10:09 ? 00:07:20 ora_p009_TESTDB
我們現在來做一個對映,看看在資料庫中的程式和系統程式的對映關係,可以看到分配的程式還是比較富裕的,有2個程式還是available的狀態,剩下的都在使用,都是in use.
SQL> select *from v$px_process;
SERV STATUS PID SPID SID SERIAL#
---- --------- ---------- ------------------------ ---------- ----------
P000 IN USE 224 32541 4539 7523
P001 IN USE 226 32543 4921 3235
P002 IN USE 228 32545 5295 31345
P003 IN USE 229 32547 5487 29377
P004 IN USE 230 32549 5671 48289
P005 IN USE 231 32551 5863 10459
P006 IN USE 232 32553 6051 9605
P007 IN USE 233 32561 6240 32193
P009 AVAILABLE 238 32565
P008 AVAILABLE 237 32563
10 rows selected.
比如說程式32541這個程式
testdb 32541 1 2 10:09 ? 00:18:23 ora_p000_TESTDB
在資料庫中的資訊如下,可見對映是完整的。
SERV STATUS PID SPID SID SERIAL#
---- --------- ---------- ------------------------ ---------- ----------
P000 IN USE 224 32541 4539 7523
然後如果想知道更多協調程式的資訊,可以使用v$session,v$process來關聯。我們看到協調程式的sid是6620
select paddr, sid,serial#,username,osuser ,machine,process,terminal,type,to_char(LOGON_TIME,'yyyy-mm-dd hh24:mi:ss')login_time from v$session
where sid=6620
PADDR SID SERIAL# USERNAME OSUSER MACHINE PROCESS TERMINAL TYPE LOGIN_TIME
---------------- ---------- ---------- ------------------------------ ------------------------------ ---------- ------------------------ ------------------------------ ---------- -------------------
00000002597CEB88 6620 49463 TESTDB testdb testdb 21568 pts/3 USER 2014-10-06 20:52:55
有了這些資訊,來和v$proess關聯就能夠看到對應的程式了。可以看到系統程式是21569.
ADDR SPID PID
---------------- ------------------------ ----------
00000002597CEB88 21569 115
SQL> !ps -ef|grep 21569
testdbuser 21569 21568 16 20:52 ? 00:06:33 oracleTESTDB (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
testdbuser 26835 26200 0 21:32 pts/1 00:00:00 /bin/bash -c ps -ef|grep 21569
testdbuser 26837 26835 0 21:32 pts/1 00:00:00 grep 21569
所以這些檢視還是很實用的,至少在看到很多的並行程式的時候,能夠有思路去查詢倒底是哪兒在執行這些,可能有問題的部分。
從系統程式中可以看到一些並行session在執行。
SQL> !ps -ef|grep ora_p|grep TESTDB
testdbuser 17422 1 0 Aug29 ? 00:04:56 ora_pmon_TESTDB
testdbuser 17425 1 0 Aug29 ? 00:01:12 ora_psp0_TESTDB
testdbuser 20847 26200 0 20:54 pts/1 00:00:00 /bin/bash -c ps -ef|grep ora_p|grep TESTDB
testdbuser 32541 1 2 10:09 ? 00:18:23 ora_p000_TESTDB
testdbuser 32543 1 2 10:09 ? 00:17:41 ora_p001_TESTDB
testdbuser 32545 1 2 10:09 ? 00:18:51 ora_p002_TESTDB
testdbuser 32547 1 2 10:09 ? 00:15:55 ora_p003_TESTDB
testdbuser 32549 1 3 10:09 ? 00:19:22 ora_p004_TESTDB
testdbuser 32551 1 3 10:09 ? 00:24:52 ora_p005_TESTDB
testdbuser 32553 1 3 10:09 ? 00:21:43 ora_p006_TESTDB
testdbuser 32561 1 3 10:09 ? 00:24:52 ora_p007_TESTDB
testdbuser 32563 1 1 10:09 ? 00:08:30 ora_p008_TESTDB
testdbuser 32565 1 1 10:09 ? 00:07:20 ora_p009_TESTDB
如果檢視v$session,會發現program中有一些session是和並行相關的session。
SQL> select sid,username,program from v$session where sid in (select sid from v$px_session ) and username='TESTDB';
SID USERNAME PROGRAM
---------- ------------------------------ ------------------------------------------------
2738 testdb oracle@dbserver (P000)
666 testdb oracle@dbserver (P001)
1371 testdb oracle@dbserver (P002)
1590 testdb oracle@dbserver (P003)
2183 testdb oracle@dbserver (P004)
2671 testdb oracle@dbserver (P005)
3125 testdb oracle@dbserver (P006)
4084 testdb oracle@dbserver (P007)
3053 testdb sqlplus@dbserver (TNS V1-V3)
9 rows selected.
在並行中3053 是相當於這個並行處理的代言人,協調者,其他的session都是在後臺默默的工作著。各個並行程式對處理完的資料進行最後的合併都是由3053這個程式來最後完成,展現給使用者。
有時候定義了並行度,想對並行的情況進行一個簡單的監控,至少可以知道目前系統是否還有足夠的資源。並行資源的使用情況等。
可以參考v$px_session, v$px_process,v$session,v$process,v$px_sesstat,v$pq_sesstat來完成。
簡單舉個例子來分析一下。
如果目前我執行一個指令碼,設定的並行度為8,檢視一下執行的並行度情況
select pxsess.sid,sess.username,pxsess.serial#,pxsess.qcsid,pxsess.qcserial#,pxsess.degree,pxsess.server#,pxsess.req_degree from v$px_session pxsess,v$session sess where pxsess.sid=sess.sid and sess.username='TESTDB';
這個例子顯示了並行相關的session,列acsid就是對應的協調session,可以看到顯示的都是6620.,可以透過欄位degree,req_degree看到申請了8個程式,然後也得到了8個程式。server_set中可以看到
SID USERNAME SERIAL# QCSID QCSERIAL# DEGREE SERVER_SET REQ_DEGREE
---------- ------------------------------ ---------- ---------- ---------- ---------- ---------- ----------
4539 testdb 7255 6620 49463 8 1 8
4921 testdb 2967 6620 49463 8 2 8
5295 testdb 31077 6620 49463 8 3 8
5487 testdb 29109 6620 49463 8 4 8
5671 testdb 48021 6620 49463 8 5 8
5863 testdb 10191 6620 49463 8 6 8
6051 testdb 9337 6620 49463 8 7 8
6238 testdb 2979 6620 49463 8 8 8
6620 testdb 49463 6620
得到了基本的資訊來看看對應的程式資訊。
SQL> !ps -ef|grep ora_p|grep TESTDB
testdb 17422 1 0 Aug29 ? 00:04:56 ora_pmon_TESTDB
testdb 17425 1 0 Aug29 ? 00:01:12 ora_psp0_TESTDB
testdb 20847 26200 0 20:54 pts/1 00:00:00 /bin/bash -c ps -ef|grep ora_p|grep TESTDB
testdb 32541 1 2 10:09 ? 00:18:23 ora_p000_TESTDB
testdb 32543 1 2 10:09 ? 00:17:41 ora_p001_TESTDB
testdb 32545 1 2 10:09 ? 00:18:51 ora_p002_TESTDB
testdb 32547 1 2 10:09 ? 00:15:55 ora_p003_TESTDB
testdb 32549 1 3 10:09 ? 00:19:22 ora_p004_TESTDB
testdb 32551 1 3 10:09 ? 00:24:52 ora_p005_TESTDB
testdb 32553 1 3 10:09 ? 00:21:43 ora_p006_TESTDB
testdb 32561 1 3 10:09 ? 00:24:52 ora_p007_TESTDB
testdb 32563 1 1 10:09 ? 00:08:30 ora_p008_TESTDB
testdb 32565 1 1 10:09 ? 00:07:20 ora_p009_TESTDB
我們現在來做一個對映,看看在資料庫中的程式和系統程式的對映關係,可以看到分配的程式還是比較富裕的,有2個程式還是available的狀態,剩下的都在使用,都是in use.
SQL> select *from v$px_process;
SERV STATUS PID SPID SID SERIAL#
---- --------- ---------- ------------------------ ---------- ----------
P000 IN USE 224 32541 4539 7523
P001 IN USE 226 32543 4921 3235
P002 IN USE 228 32545 5295 31345
P003 IN USE 229 32547 5487 29377
P004 IN USE 230 32549 5671 48289
P005 IN USE 231 32551 5863 10459
P006 IN USE 232 32553 6051 9605
P007 IN USE 233 32561 6240 32193
P009 AVAILABLE 238 32565
P008 AVAILABLE 237 32563
10 rows selected.
比如說程式32541這個程式
testdb 32541 1 2 10:09 ? 00:18:23 ora_p000_TESTDB
在資料庫中的資訊如下,可見對映是完整的。
SERV STATUS PID SPID SID SERIAL#
---- --------- ---------- ------------------------ ---------- ----------
P000 IN USE 224 32541 4539 7523
然後如果想知道更多協調程式的資訊,可以使用v$session,v$process來關聯。我們看到協調程式的sid是6620
select paddr, sid,serial#,username,osuser ,machine,process,terminal,type,to_char(LOGON_TIME,'yyyy-mm-dd hh24:mi:ss')login_time from v$session
where sid=6620
PADDR SID SERIAL# USERNAME OSUSER MACHINE PROCESS TERMINAL TYPE LOGIN_TIME
---------------- ---------- ---------- ------------------------------ ------------------------------ ---------- ------------------------ ------------------------------ ---------- -------------------
00000002597CEB88 6620 49463 TESTDB testdb testdb 21568 pts/3 USER 2014-10-06 20:52:55
ADDR SPID PID
---------------- ------------------------ ----------
00000002597CEB88 21569 115
testdbuser 21569 21568 16 20:52 ? 00:06:33 oracleTESTDB (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
testdbuser 26835 26200 0 21:32 pts/1 00:00:00 /bin/bash -c ps -ef|grep 21569
testdbuser 26837 26835 0 21:32 pts/1 00:00:00 grep 21569
所以這些檢視還是很實用的,至少在看到很多的並行程式的時候,能夠有思路去查詢倒底是哪兒在執行這些,可能有問題的部分。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347003/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 超簡單的視訊物件提取程式物件
- Oracle“並行執行”——監控檢視Oracle並行
- 執行計劃-2:檢視更多的資訊
- Springboot整合ElasticSearch進行簡單的測試及用Kibana進行檢視Spring BootElasticsearch
- 檢視Docker容器的資訊Docker
- 6 個簡單的方式來檢視 Linux 中的使用者名稱和其它資訊Linux
- 檢視mysql執行狀態的一些sqlMySql
- [20190125]簡單快速檢視那些sql語句正在執行.txtSQL
- Linux根據程式號,檢視相關資訊Linux
- 檢視weblogic版本資訊Web
- Linux 安全資訊檢視Linux
- 使用 Chrome 開發者工具檢視程式執行出錯時的上下文資訊Chrome
- 資料庫簡單的一些原理概念資料庫
- WebRTC:一個視訊聊天的簡單例子Web單例
- Android 最簡單的自定義檢視管理之一Android
- 圖片 EXIF 資訊檢視工具有很多,其中一些常見的包括:
- iPhone 新漏洞,可檢視並傳送iPhone照片(含視訊)iPhone
- parallel: 一個簡單的並行執行Go迴圈的庫Parallel並行Go
- 在 React 應用程式中實現簡單的頁面檢視跟蹤器React
- 檢視 Linux 系統資訊Linux
- git檢視config配置資訊Git
- ExifTool for Macexif資訊檢視工具Mac
- Git檢視指定commit資訊GitMIT
- kafka 檢視佇列資訊Kafka佇列
- 檢視oracle死鎖程式並結束死鎖Oracle
- 檢視Spark任務的詳細資訊Spark
- 使用 jstat 命令檢視 JVM 的GC資訊JSJVMGC
- 如何檢視tensorflow SavedModel格式模型的資訊模型
- Linux 檢視埠占用並Linux
- navicat premium 12檢視物件資訊REM物件
- 檢視無線網路卡資訊
- 檢視Linux系統版本資訊Linux
- Pytorch:單卡多程式並行訓練PyTorch並行
- Chrome如何檢視儲存的網站密碼,如此簡單!Chrome網站密碼
- Antted 視訊系統 v1.0.0 做簡單易用的視訊管理系統
- 檢視Linux硬體的一些命令Linux
- Logcat怎麼設定filter,檢視當前執行app的log資訊GCFilterAPP
- Tableau簡單的資料視覺化操作視覺化
- 跳槽並不簡單