檢視並行程式的一些簡單資訊
在使用並行的時候,總能看到程式中出現一些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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢視錶並行度並行
- 刷物化檢視並行並行
- Perl 6 簡單的並行並行
- nginx檢視實時日誌並設簡單的訪問驗證Nginx
- Oracle“並行執行”——監控檢視Oracle並行
- 轉儲指定的資料塊並檢視TRC資訊
- linux 發行版本資訊的檢視Linux
- 一個封裝簡單使用簡單的雷達檢視封裝
- 執行計劃-2:檢視更多的資訊
- 檢視並殺死殭屍程式
- 檢視某個程式使用到的並行程式數並行行程
- Oracle 檢視sql開幾個並行OracleSQL並行
- oracle parallel並行及px檢視viewOracleParallel並行View
- 簡單圖片檢視器小程式原始碼實現原始碼
- linux 檢視程式掛掉資訊Linux
- 檢視mysql執行狀態的一些sqlMySql
- Oracle10g 查詢統計資訊的一些檢視Oracle
- windows系統檢視80埠被佔用的程式並結束該程式執行Windows
- 檢視Docker容器的資訊Docker
- oracle-一些檢視效能相關的檢視Oracle
- 簡單設計並開發一個行動通訊程式
- 使用 Chrome 開發者工具檢視程式執行出錯時的上下文資訊Chrome
- 6 個簡單的方式來檢視 Linux 中的使用者名稱和其它資訊Linux
- Springboot整合ElasticSearch進行簡單的測試及用Kibana進行檢視Spring BootElasticsearch
- 檢視和診斷JVM執行緒資訊JVM執行緒
- 資訊檢視:科技行業專利紛爭行業
- 資訊檢視:音訊消費行為研究音訊
- 超簡單的視訊物件提取程式物件
- parallel: 一個簡單的並行執行Go迴圈的庫Parallel並行Go
- 【實驗】【檢視】使用v$bgprocess檢視獲得所有後臺程式資訊
- TOP中只檢視某個或某些程式的資訊
- Apache 的資訊檢視模組(轉)Apache
- 一些簡單的程式設計練習題程式設計
- 檢視長時間鎖定物件的程式,並kill掉物件
- centos檢視版本資訊CentOS
- Oracle ASM檢視資訊OracleASM
- 檢視並ORACLE的編碼方式Oracle
- 檢視oracle死鎖程式並結束死鎖Oracle