新聞中心
使用 EXPLAIN 命令可以展示出當(dāng)前優(yōu)化器所生成的執(zhí)行計(jì)劃,但由于統(tǒng)計(jì)信息變化、用戶 session 變量設(shè)置變化等,會(huì)造成該 SQL 在計(jì)劃緩存中實(shí)際對(duì)應(yīng)的計(jì)劃可能與 EXPLAIN 的結(jié)果并不相同。為了確定該 SQL 在系統(tǒng)中實(shí)際使用的執(zhí)行計(jì)劃,需要進(jìn)一步分析計(jì)劃緩存中的物理執(zhí)行計(jì)劃。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)頁空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、安達(dá)網(wǎng)站維護(hù)、網(wǎng)站推廣。
用戶可以通過查詢 (g)v$plan_cache_plan_explain 視圖來展示某條 SQL 在計(jì)劃緩存中的執(zhí)行計(jì)劃。
如下例所示:
obclient>VIEW_DEFINITION='SELECT *
FROM oceanbase.gv$plan_cache_plan_explain
WHERE IP =host_ip() AND PORT = rpc_port()'參數(shù)解釋如下表:
|
字段名稱 |
類型 |
描述 |
|---|---|---|
TENANT_ID | bigint(20) | 租戶 ID |
IP | varchar(32) | IP 地址 |
PORT | bigint(20) | 端口號(hào) |
PLAN_ID | bigint(20) | 執(zhí)行計(jì)劃的 ID |
OPERATOR | varchar(128) | operator 的名稱 |
NAME | varchar(128) | 表的名稱 |
ROWS | bigint(20) | 預(yù)估的結(jié)果行數(shù) |
COST | bigint(20) | 預(yù)估的代價(jià) |
PROPERTY | varchar(256) | 對(duì)應(yīng) operator 的信息 |
第一步 查詢 SQL 在計(jì)劃緩存中的 plan_id
OceanBase 數(shù)據(jù)庫(kù)每個(gè)服務(wù)器的計(jì)劃緩存都是獨(dú)立的。用戶可以直接訪問 v$plan_cache_plan_stat 視圖查詢本服務(wù)器上的計(jì)劃緩存并提供 tenant_id 和需要查詢的 SQL 字符串(可以使用模糊匹配),查詢?cè)摋l SQL 在計(jì)劃緩存中對(duì)應(yīng)的 plan_id。
obclient>SELECT * FROM v$plan_cache_plan_stat WHERE tenant_id= 1001
AND STATEMENT LIKE 'INSERT INTO T1 VALUES%'\G
***************************1. row ***************************
tenant_id: 1001
svr_ip:100.81.152.44
svr_port:15212
plan_id: 7
sql_id:0
type: 1
statement: insert into t1 values(1)
plan_hash:1
last_active_time:2016-05-28 19:08:57.416670
avg_exe_usec:0
slowest_exe_time:1970-01-01 08:00:00.000000
slowest_exe_usec:0
slow_count:0
hit_count:0
mem_used:8192
1 rowin set (0.01 sec)
第二步 使用 plan_id 展示對(duì)應(yīng)執(zhí)行計(jì)劃
獲得 plan_id 后,用戶可以使用 tenant_id 和 plan_id 訪問 v$plan_cache_plan_explain 來展示該執(zhí)行計(jì)劃。
注意
這里展示的計(jì)劃為物理執(zhí)行計(jì)劃,在算子命名上會(huì)與 EXPLAIN 所展示的邏輯執(zhí)行計(jì)劃有所不同。
obclient>SELECT * FROM v$plan_cache_plan_explain
WHERE tenant_id = 1001 AND plan_id = 7;
+-----------+---------------+-------+---------+--------------------+------+------+------+
| TENANT_ID | IP | PORT | PLAN_ID | OPERATOR | NAME | ROWS | COST |
+-----------+---------------+-------+---------+--------------------+------+------+------+
| 1001 | 100.81.152.44 | 15212 | 7 | PHY_ROOT_TRANSMIT | NULL | 0 | 0 |
| 1001 | 100.81.152.44 | 15212 | 7 | PHY_INSERT | NULL | 0 | 0 |
| 1001 | 100.81.152.44 | 15212 | 7 | PHY_EXPR_VALUES | NULL | 0 | 0 |
+-----------+---------------+-------+---------+--------------------+------+------+------+
3 rows in set (0.01 sec)
注意
如果訪問
gv$plan_cache_plan_explain,必須給定 IP、port、tenant_id 和 plan_id 這四列的值。
如果訪問
v$plan_cache_plan_explain,必須給定 tenant_id 和 plan_id 的值,否則系統(tǒng)將返回空集。
網(wǎng)站標(biāo)題:創(chuàng)新互聯(lián)OceanBase教程:OceanBase實(shí)時(shí)執(zhí)行計(jì)劃展示
分享路徑:http://m.5511xx.com/article/codsddp.html


咨詢
建站咨詢
