當前位置:首頁 » 編程語言 » sqlid父游標子游標
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlid父游標子游標

發布時間: 2022-08-07 23:20:40

sql 知道父節點,查詢所有的子節點,運用游標,遞歸,存儲過程

呃,因為我不清楚你的表裡,這個BPROD char(15) 老爸 裡面記錄的值是不是和BMWHS 對應的,所以只能說個大概。
select sys_connect_by_path(username,'>') "Path"
from tmbm
start with id=1
connect by prior id=parentid;

其中,id是你要遍歷的起始點,比如你想從 廠號=XX 的這個父節點開始尋找他所有的子節點,這里就換成 start with BMWHS=XX

然後,connect by prior id=parentid,這里id=parentid,簡單解釋就是尋找其他記錄里,parentid和我的id相同的記錄,也就是找子節點。
應該是換成你的BMWHS=BPROD(我不知道你的BPROD BCHLD 和哪個屬性是對應的,是BMWHS嗎?)
如果是的話就是下面這樣(username是你要返回的值,假設你還是要返回 BSEQ 序號)

select sys_connect_by_path(BSEQ,'>') "Path"
from tmbm
start with BMWHS=XX

connect by prior BMWHS=BPROD;

❷ sql 知道父節點,查詢所有的子節點,運用游標,遞歸,存儲過程

呃,因為我不清楚你的表裡,這個BPROD
char(15)
老爸
裡面記錄的值是不是和BMWHS
對應的,所以只能說個大概。
select
sys_connect_by_path(username,'>')
"Path"
from
tmbm
start
with
id=1
connect
by
prior
id=parentid;
其中,id是你要遍歷的起始點,比如你想從
廠號=XX
的這個父節點開始尋找他所有的子節點,這里就換成
start
with
BMWHS=XX
然後,connect
by
prior
id=parentid,這里id=parentid,簡單解釋就是尋找其他記錄里,parentid和我的id相同的記錄,也就是找子節點。
應該是換成你的BMWHS=BPROD(我不知道你的BPROD
BCHLD
和哪個屬性是對應的,是BMWHS嗎?)
如果是的話就是下面這樣(username是你要返回的值,假設你還是要返回
BSEQ
序號)
select
sys_connect_by_path(BSEQ,'>')
"Path"
from
tmbm
start
with
BMWHS=XX
connect
by
prior
BMWHS=BPROD;

❸ 請問一下,你的 win7旗艦版安裝SQL Server2008錯誤:試圖執行未經授權的操作。這個問題是怎樣解決的!謝謝

oracle
10g的DBMS_XPLAN包中display_cursor函數不同於display函數,display_cursor用於顯示SQL語句的真實的執行計劃,在大多數情況下,
顯示真實的執行計劃有助於更好的分析SQL語句的全過程,尤其是運行此SQL語句實時的I/O開銷。通過對比預估的I/O與真實的I/O開銷來判斷
SQL語句所存在問題,如缺少統計信息,SQL語句執行的次數,根據實際中間結果集的大小來選擇合適的連接方式等。本文僅僅講述
display_cursor函數的使用。
一、display_cursor函數用法
1、display_cursor函數語法
DBMS_XPLAN.DISPLAY_CURSOR(
sql_id
IN
VARCHAR2
DEFAULT
NULL,
cursor_child_no
IN
NUMBER
DEFAULT
NULL,
format
IN
VARCHAR2
DEFAULT
'TYPICAL');
2、display_cursor函數參數描述
sql_id
指定位於庫緩存執行計劃中SQL語句的父游標。默認值為null。當使用默認值時當前會話的最後一條SQL語句的執行計劃將被返回
可以通過查詢V$SQL
或V$SQLAREA的SQL_ID列來獲得SQL語句的SQL_ID。
cursor_child_no
指定父游標下子游標的序號。即指定被返回執行計劃的SQL語句的子游標。默認值為0。如果為null,則sql_id所指父游標下所有子游標
的執行計劃都將被返回。
format
控制SQL語句執行計劃的輸出部分,即哪些可以顯示哪些不顯示。使用與display函數的format參數與修飾符在這里同樣適用。
除此之外當在開啟statistics_level=all時或使用gather_plan_statistics提示可以獲得執行計劃中實時的統計信息
有關詳細的format格式描述請參考:dbms_xplan之display函數的使用
中format參數的描述
下面給出啟用統計信息時format新增的修飾符
iostats
控制I/O統計的顯示
last
默認,顯示所有執行計算過的統計。如果指定該值,則只顯示最後一次執行的統計信息
memstats
控制pga相關統計的顯示
allstats
此為iostats
memstats的快捷方式,即allstats包含了iostats和memstats
run_stats_last
等同於iostats
last。只能用於oracle
10g
R1
run_stats_tot
等同於iostats。只能用於oracle
10g
R1
抓一個最近一小時最消耗IO的SQL:
SELECT
sql_id,
COUNT(*)
FROM
gv$active_session_history
ash,
gv$event_name
evt
WHERE
ash.sample_time
>
SYSDATE
-
1
/
24
AND
ash.session_state
=
'WAITING'
AND
ash.event_id
=
evt.event_id
AND
evt.wait_class
=
'User
I/O'
GROUP
BY
sql_id
ORDER
BY
COUNT(*)
DESC;
執行上面的SQL:
SQL>
SELECT
sql_id,
COUNT(*)
FROM
gv$active_session_history
ash,
gv$event_name
evt
2
3
WHERE
ash.sample_time
>
SYSDATE
-
1
/
24
4
AND
ash.session_state
=
'WAITING'
5
AND
ash.event_id
=
evt.event_id
6
AND
evt.wait_class
=
'User
I/O'
7
GROUP
BY
sql_id
8
ORDER
BY
COUNT(*)
DESC;
SQL_ID
COUNT(*)
-------------
----------
g7fu6qba82m6b
668
63r47zyphdk06
526
9f5m4wd88nc1h
514
593p47drw5fhk
232
br91w16jzy4fu
120
4fvwyjpnh6tp7
78
gm0nrbfuj8kzr
70
2184k363hw4xd
68
gc4dajs7g5myy
46
8vrk9sfuwfdgq
42
ccpnb4dwdmq21
40
查看SQL的執行計劃:
SELECT
*
FROM
TABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));
在SQLPLUS中執行:
SQL>
set
pagesize
2000
SQL>
SELECT
*
FROM
TABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
SQL_ID
g7fu6qba82m6b,
child
number
0
-------------------------------------
UPDATE
"CPDDS_PDATA"."CDM_LEDGER"
SET
"CSTM_NAME"
=
:a1,"CSTM_NO"
=
:a2,"PAPER_TYPE"
=
:a3,"PAPER_NO"
=
:a4,"CURR_TYPE"
=
:a5,"SVT_NO"
=
:a6,"BAL_DIR"
=
:a7,"BAL"
=
:a8,"AVAL_BAL"
=
:a9,"NORM_FRATIO"
=
:a10,"PK_BAL"
=
:a11,"DR_ACCU"
=
:a12,"CR_ACCU"
=
:a13,"LAST_TRAN_DATE"
=
:a14,"LAST_TRAN_TIME"
=
:a15,"PRT_LINE_NUM"
=
:a16,"NOREG_PK_REC_NUM"
=
:a17,"PK_NO"
=
:a18,"PWD"
=
:a19,"FLAG"
=
:a20,"FRZ_FLAG"
=
:a21,"CARD_HOLD_FLAG"
=
:a22,"PK_HOLD_FLAG"
=
:a23,"BGN_INT_DATE"
=
:a24,"OPEN_DATE"
=
:a25,"ACC_HOLD_FLAG"
=
:a26,"CLS_DATE"
=
:a27,"OPEN_TLR"
=
:a28,"CLS_TLR"
=
:a29,"CLS_INT"
=
:a30,"OPEN_INST"
=
:a31,"ADD_NUM"
=
:a32,"DAC"
=
:a33,"FRZ_TIMES1"
=
:a34,"FRZ_TIMES2"
=
:a35,"HOST_SEQNO"
=
:a36,"D_UPDATE_DATE"
=
:a37
WHERE
"ACC"
=
:b0
Plan
hash
value:
319441092
-----------------------------------------------------------------------------------
|
Id
|
Operation
|
Name
|
Rows
|
Bytes
|
Cost
(%CPU)|
Time
|
-----------------------------------------------------------------------------------
|
0
|
UPDATE
STATEMENT
|
|
|
|
3
(100)|
|
|
1
|
UPDATE
|
CDM_LEDGER
|
|
|
|
|
|*
2
|
INDEX
UNIQUE
SCAN|
I_CDM_LEDGER
|
1
|
269
|
2
(0)|
00:00:01
|
-----------------------------------------------------------------------------------
Predicate
Information
(identified
by
operation
id):
---------------------------------------------------
2
-
access("ACC"=:B0)
29
rows
selected.
總結
1、與display函數不同,display_cursor顯示的為真實的執行計劃
2、對於format參數,使用與display函數的各個值,同樣適用於display_cursor函數
3、當statistics_level為all或使用gather_plan_statistics提示可以獲得執行時的統計信息
4、根據真實與預估的統計信息可以初步判斷SQL效率低下的原因,如統計信息的准確性、主要的開銷位於那些步驟等

❹ sql解析過程中游標是什麼,什麼是父游標,什麼是子游標

父游標關聯sql文,子游標是具體的sql文計劃,綁定變數等游標詳細信息。。。。你的採納是我前進的動力,還有不懂的地方,請繼續「追問」。

❺ 簡單討論在11G,10G中怎麼穩定SQL執行計劃

oracle10g的DBMS_XPLAN包中display_cursor函數不同於display函數,display_cursor用於顯示SQL語句的真實的執行計劃,在大多數情況下,顯示真實的執行計劃有助於更好的分析SQL語句的全過程,尤其是運行此SQL語句實時的I/O開銷。通過對比預估的I/O與真實的I/O開銷來判斷SQL語句所存在問題,如缺少統計信息,SQL語句執行的次數,根據實際中間結果集的大小來選擇合適的連接方式等。本文僅僅講述display_cursor函數的使用。一、display_cursor函數用法1、display_cursor函數語法DBMS_XPLAN.DISPLAY_CURSOR(sql_idINVARCHAR2DEFAULTNULL,cursor_child_noINNUMBERDEFAULTNULL,formatINVARCHAR2DEFAULT'TYPICAL');2、display_cursor函數參數描述sql_id指定位於庫緩存執行計劃中SQL語句的父游標。默認值為null。當使用默認值時當前會話的最後一條SQL語句的執行計劃將被返回可以通過查詢V$SQL或V$SQLAREA的SQL_ID列來獲得SQL語句的SQL_ID。cursor_child_no指定父游標下子游標的序號。即指定被返回執行計劃的SQL語句的子游標。默認值為0。如果為null,則sql_id所指父游標下所有子游標的執行計劃都將被返回。format控制SQL語句執行計劃的輸出部分,即哪些可以顯示哪些不顯示。使用與display函數的format參數與修飾符在這里同樣適用。除此之外當在開啟statistics_level=all時或使用gather_plan_statistics提示可以獲得執行計劃中實時的統計信息有關詳細的format格式描述請參考:dbms_xplan之display函數的使用中format參數的描述下面給出啟用統計信息時format新增的修飾符iostats控制I/O統計的顯示last默認,顯示所有執行計算過的統計。如果指定該值,則只顯示最後一次執行的統計信息memstats控制pga相關統計的顯示allstats此為iostatsmemstats的快捷方式,即allstats包含了iostats和memstatsrun_stats_last等同於iostatslast。只能用於oracle10gR1run_stats_tot等同於iostats。只能用於oracle10gR1抓一個最近一小時最消耗IO的SQL:SELECTsql_id,COUNT(*)FROMgv$active_session_historyash,gv$event_nameevtWHEREash.sample_time>SYSDATE-1/24ANDash.session_state='WAITING'ANDash.event_id=evt.event_idANDevt.wait_class='UserI/O'GROUPBYsql_idORDERBYCOUNT(*)DESC;執行上面的SQL:SQL>SELECTsql_id,COUNT(*)FROMgv$active_session_historyash,gv$event_nameevt23WHEREash.sample_time>SYSDATE-1/244ANDash.session_state='WAITING'5ANDash.event_id=evt.event_id6ANDevt.wait_class='UserI/O'7GROUPBYsql_id8ORDERBYCOUNT(*)DESC;SQL_IDCOUNT(*)-----------------------查看SQL的執行計劃:SELECT*FROMTABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));在SQLPLUS中執行:SQL>setpagesize2000SQL>SELECT*FROMTABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------------------------SQL_IDg7fu6qba82m6b,childnumber0-------------------------------------UPDATE"CPDDS_PDATA"."CDM_LEDGER"SET"CSTM_NAME"=:a1,"CSTM_NO"=:a2,"PAPER_TYPE"=:a3,"PAPER_NO"=:a4,"CURR_TYPE"=:a5,"SVT_NO"=:a6,"BAL_DIR"=:a7,"BAL"=:a8,"AVAL_BAL"=:a9,"NORM_FRATIO"=:a10,"PK_BAL"=:a11,"DR_ACCU"=:a12,"CR_ACCU"=:a13,"LAST_TRAN_DATE"=:a14,"LAST_TRAN_TIME"=:a15,"PRT_LINE_NUM"=:a16,"NOREG_PK_REC_NUM"=:a17,"PK_NO"=:a18,"PWD"=:a19,"FLAG"=:a20,"FRZ_FLAG"=:a21,"CARD_HOLD_FLAG"=:a22,"PK_HOLD_FLAG"=:a23,"BGN_INT_DATE"=:a24,"OPEN_DATE"=:a25,"ACC_HOLD_FLAG"=:a26,"CLS_DATE"=:a27,"OPEN_TLR"=:a28,"CLS_TLR"=:a29,"CLS_INT"=:a30,"OPEN_INST"=:a31,"ADD_NUM"=:a32,"DAC"=:a33,"FRZ_TIMES1"=:a34,"FRZ_TIMES2"=:a35,"HOST_SEQNO"=:a36,"D_UPDATE_DATE"=:a37WHERE"ACC"=:b0Planhashvalue:319441092-----------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-----------------------------------------------------------------------------------|0|UPDATESTATEMENT||||3(100)|||1|UPDATE|CDM_LEDGER||||||*2|INDEXUNIQUESCAN|I_CDM_LEDGER|1|269|2(0)|00:00:01|-----------------------------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------2-access("ACC"=:B0)29rowsselected.總結1、與display函數不同,display_cursor顯示的為真實的執行計劃2、對於format參數,使用與display函數的各個值,同樣適用於display_cursor函數3、當statistics_level為all或使用gather_plan_statistics提示可以獲得執行時的統計信息4、根據真實與預估的統計信息可以初步判斷SQL效率低下的原因,如統計信息的准確性、主要的開銷位於那些步驟等

❻ 如果存在大批量有問題的sql如何排查

先分析主表,在再分析子表

❼ 獲取SQL執行計劃的常見幾種方法

1. 預估執行計劃 - Explain Plan
Explain plan以SQL語句作為輸入,得到這條SQL語句的執行計劃,並將執行計劃輸出存儲到計劃表中。
首先,在你要執行的SQL語句前加explain plan for,此時將生成的執行計劃存儲到計劃表中,語句如下:
explain plan for SQL語句
然後,在計劃表中查詢剛剛生成的執行計劃,語句如下:
select * from table(dbms_xplan.display);
注意:Explain plan只生成執行計劃,並不會真正執行SQL語句,因此產生的執行計劃有可能不準,因為:
1)當前的環境可能和執行計劃生成時的環境不同;
2)不會考慮綁定變數的數據類型;
3)不進行變數窺視。
2. 查詢內存中緩存的執行計劃 (dbms_xplan.display_cursor)
如果你想獲取正在執行的或剛執行結束的SQL語句真實的執行計劃(即獲取library cache中的執行計劃),可以到動態性能視圖里查詢。方法如下:
1)獲取SQL語句的游標
游標分為父游標和子游標,父游標由sql_id(或聯合address和hash_value)欄位表示,子游標由child_number欄位表示。
如果SQL語句正在運行,可以從v$session中獲得它的游標信息,如:
select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....
如果知道SQL語句包含某些關鍵字,可以從v$sql視圖中獲得它的游標信息,如:
select sql_id, child_number, sql_text from v$sql where sql_text like '%關鍵字%『
2)獲取庫緩存中的執行計劃
為了獲取緩存庫中的執行計劃,可以直接查詢動態性能視圖v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是以sql_id和子游標為參數,執行如下語句:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
3)獲取前一次的執行計劃:
set serveroutput off
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
3. 查詢歷史執行計劃(dbms_xplan.display_awr)
AWR會定時把動態性能視圖中的執行計劃保存到dba_hist_sql_plan視圖中,如果你想要查看歷史執行計劃,可以採用如下方法查詢:
select * from table(dbms_xplan.display_awr('sql_id');
4. 在用sqlplus做SQL開發是(Autotrace)
set autotrace是sqlplus工具的一個功能,只能在通過sqlplus連接的session中使用,它非常適合在開發時測試SQL語句的性能,有以下幾種參數可供選擇:
SET AUTOTRACE OFF ---------------- 不顯示執行計劃和統計信息,這是預設模式
SET AUTOTRACE ON EXPLAIN ------ 只顯示優化器執行計劃
SET AUTOTRACE ON STATISTICS -- 只顯示統計信息
SET AUTOTRACE ON ----------------- 執行計劃和統計信息同時顯示
SET AUTOTRACE TRACEONLY ------ 不真正執行,只顯示預期的執行計劃,同explain plan

5. 生成Trace文件查詢詳細的執行計劃 (SQL_Trace, 10046)
SQL_TRACE作為初始化參數可以在實例級別啟用,也可以只在會話級別啟用,在實例級別啟用SQL_TRACE會導致所有進程的活動被跟蹤,包括後台進程及所有用戶進程,這通常會導致比較嚴重的性能問題,所以在一般情況下,我們使用sql_trace跟蹤當前進程,方法如下:
SQL>alter session set sql_trace=true;
...被跟蹤的SQL語句...
SQL>alter session set sql_trace=false;
如果要跟蹤其它進程,可以通過Oracle提供的系統包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION來實現,例如:
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true) --開始跟蹤
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false) --結束跟蹤
生成trace文件後,再用tkprof 工具將sql trace 生成的跟蹤文件轉換成易讀的格式,語法如下:
tkprof inputfile outputfile
10046事件是SQL_TRACE的一個升級版,它也是追蹤會話,生成Trace文件,只是它裡面的內容更詳細,