TDVには実行計画を表示する方法がいくつかあります。
本記事では、その紹介とそれぞれの違いについてまとめています。
実行計画について
SQL実行計画は、全体的なレベルと各クエリーノードのレベルの両方から、TDVがSQLクエリーの実行をどのように計画しているかを示しています。実行計画を確認することで、クエリーをチューニングしパフォーマンスを向上させることができます。
なお、公式ドキュメントや本記事において、「実行計画」「実行プラン」「クエリープラン」などの表現が使われていますが、これらは同じものを指しています。
実行計画の表示方法
1. Studioのモデラーで表示
ビューに対する現在の実行計画が表示されます。
「統計の実行と表示」ボタンを押すと、このクエリーにより処理されるデータ量や処理時間の割合等も確認することができます。詳細については、公式ドキュメント「クエリーによって処理されたデータの量の表示」を参照ください。
2. Studioのマネージャで表示
過去のクエリーで使用されたクエリープランを確認することができます。
マネージャのリクエストページには、実行したクエリーの情報も残されています。表示したいクエリーを選び、「Show Query Plan」をクリックします。
3. Studioのスクラッチパッドで表示
SQLスクラッチパッドに記述したクエリーに対しても、実行計画を表示することができます。
この画面でも、「統計の実行と表示」ボタンを押すと、処理されるデータ量や処理時間の割合等も確認することができます。詳細については、公式ドキュメント「クエリーによって処理されたデータの量の表示」を参照ください。
4. JDBCクライアントで表示
JDBCクライアントからも実行計画を確認することができます。
EXPLAIN関数を使用し、SQLステートメントを渡すことで実行計画を取得することができます。
例①
EXPLAIN SELECT * FROM kb.v_simple_join where customerid IN (3,4,6)
結果
Explain
-------------------------------------------------------
[ 1] Explain
[ 2] + SELECT
[ 3] + JOIN
[ 4] + FETCH
[ 5] + FETCH
-------------------------------------------------------
[1]
/Explain
Server Version: TIBCO Data Virtualization 8.5.1.001 / Build d05fc6866c2021-12-20 09:40:49
Submitted SQL: explain SELECT * FROM kb.v_simple_join where customerid IN (3,4,6)
Resolved SQL: SELECT v_simple_join.orderid, v_simple_join.purchaseordernumber,
v_simple_join.customerid, v_simple_join.companyname, v_simple_join.contactfirstname,
v_simple_join.contactlastname, v_simple_join.shipaddress, v_simple_join.shipcity,
v_simple_join.shipstateorprovince, v_simple_join.shippostalcode, v_simple_join.shipcountry,
v_simple_join.shipphonenumber, v_simple_join.shipdate, v_simple_join.shippingmethodid,
v_simple_join.freightcharge, v_simple_join.employeeid, v_simple_join.orderdate,
v_simple_join.shipname
FROM (SELECT orders.orderid, orders.purchaseordernumber, orders.customerid,
customers.companyname, customers.contactfirstname, customers.contactlastname, orders.shipaddress,
orders.shipcity, orders.shipstateorprovince, orders.shippostalcode, orders.shipcountry,
orders.shipphonenumber, orders.shipdate, orders.shippingmethodid, orders.freightcharge,
orders.employeeid, orders.orderdate, orders.shipname
FROM /shared/KB/A001/ds_orders/tutorial/orders orders INNER JOIN
/shared/KB/A001/SQLServer/tdv/dbo/customers customers ON orders.customerid = c
ustomers.customerid) v_simple_join
WHERE v_simple_join.customerid IN (3, 4, 6)
-------------------------------------------------------
[2]
/Explain/SELECT
Name: SELECT
Estimated Rows Returned: Unknown (at least 0 rows)
Projection: orders.orderid, orders.purchaseordernumber, orders.customerid, customers.companyname,
customers.contactfirstname, customers.contactlastname, orders.shipaddress, orders.shipcity,
・・・以下省略・・・
また、show_runtimeオプションをつけると統計情報も取得することができます。
例②
EXPLAIN SELECT {option show_runtime="true"} * FROM kb.v_simple_join where customerid IN (3,4,6)
結果
Explain
-------------------------------------------------------
[ 1] Explain
[ 2] + SELECT (7, 0.5%)
[ 3] + JOIN (7, 42.9%)
[ 4] + FETCH (7, 13.7%)
[ 5] + FETCH (3, 43%)
-------------------------------------------------------
[1]
/Explain
Server Version: TIBCO Data Virtualization 8.5.1.001 / Build d05fc6866c2021-12-20 09:40:49
Rows Returned: 7
Elapsed Execution Time: 56.8 msecs (100%)
Query Initialization Time: 0 sec (0%)
Foreground Server Processing Time: 56.8 msecs (100%)
Foreground Data Source Read Time: 74.2 msecs (131%)
Background Server Processing Time: < 1 msec
Background Data Source Read Time: 0 sec
Speed Up due to Concurrency: 0%
Peak memory reserved: 3010336
Submitted SQL: explain SELECT {option show_runtime="true"} * FROM kb.v_simple_join where customerid
IN (3,4,6)
Resolved SQL: SELECT { OPTION SHOW_RUNTIME="true" }v_simple_join.orderid,
v_simple_join.purchaseordernumber, v_simple_join.customerid, v_simple_join.companyname,
v_simple_join.contactfirstname, v_simple_join.contactlastname, v_simple_join.shipaddress,
v_simple_join.shipcity, v_simple_join.shipstateorprovince, v_simple_join.shippostalcode,
v_simple_join.shipcountry, v_simple_join.shipphonenumber, v_simple_join.shipdate,
v_simple_join.shippingmethodid, v_simple_join.freightcharge, v_simple_join.employeeid,
v_simple_join.orderdate, v_simple_join.shipname
FROM (SELECT orders.orderid, orders.purchaseordernumber, orders.customerid,
customers.companyname, customers.contactfirstname, customers.contactlastname, orders.shipaddress,
orders.shipcity, orders.shipstateorprovince, orders.shippostalcode, orders.shipcountry,
orders.shipphonenumber, orders.shipdate, orders.shippingmethodid, orders.freightcharge,
orders.employeeid, orders.orderdate, orders.shipname
FROM /shared/KB/A001/ds_orders/tutorial/orders orders INNER JOIN
/shared/KB/A001/SQLServer/tdv/dbo/customers customers ON orders.customerid = c
ustomers.customerid) v_simple_join
WHERE v_simple_join.customerid IN (3, 4, 6)
-------------------------------------------------------
[2]
/Explain/SELECT (7, 0.5%)
Name: SELECT
Rows Returned: 7
Estimated Rows Returned: Unknown (at least 0 rows)
Total execute time which include children time and wait time.: 56.8 msecs
Foreground Node Processing Time: < 1 msec
Peak memory reserved: 3010336
Projection: orders.orderid, orders.purchaseordernumber, orders.customerid, customers.companyname,
customers.contactfirstname, customers.contactlastname, orders.shipaddress, orders.shipcity,
・・・以下省略・・・
参考情報
実行計画全般についての詳細は、公式ドキュメント「SQL実行プランの操作」を参照ください。