本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用解釋計劃改善 Babelfish 查詢效能
從第 2.1.0 版開始,Babelfish 包含兩個函數,以透明地使用 PostgreSQL 最佳化工具為 TDS 連接埠上的 T-SQL 查詢產生預估的和實際的查詢計劃。這些函數類似於將 SET STATISTICS PROFILE 或 SET SHOWPLAN_ALL 搭配 SQL Server 資料庫使用,以識別及改善慢速執行的查詢。
注意
目前不支援從函數、控制流程與游標取得查詢計劃。
在此表中,您可以找到 SQL Server、Babelfish 及 PostgreSQL 之間查詢計劃解釋函數的比較。
SQL Server |
Babelfish |
PostgreSQL |
---|---|---|
SHOWPLAN_ALL |
BABELFISH_SHOWPLAN_ALL |
EXPLAIN |
STATISTICS PROFILE |
BABELFISH_STATISTICS PROFILE |
解釋分析 |
使用 SQL Server 最佳化工具 |
使用 PostgreSQL 最佳化工具 |
使用 PostgreSQL 最佳化工具 |
SQL Server 輸入與輸出格式 |
SQL Server 輸入與 PostgreSQL 輸出格式 |
PostgreSQL 輸入和輸出格式 |
為工作階段設定 |
為工作階段設定 |
套用至特定陳述式 |
支援以下項目:
|
支援以下項目:
|
支援以下項目:
|
按照下列方式使用 Babelfish 函數:
SET BABELFISH_SHOWPLAN_ALL [ON|OFF] – 設定 ON 以產生預估的查詢執行計劃。此函數會實作 PostgreSQL
EXPLAIN
命令的行為。使用此命令可取得給定查詢的解釋計劃。SET BABELFISH_STATISTICS PROFILE [ON|OFF] – 設定為 ON 以取得實際查詢執行計劃。這個函數實作 PostgreSQL 其
EXPLAIN ANALYZE
命令的行為。
如需有關在 PostgreSQL EXPLAIN
和 EXPLAIN ANALYZE
的詳細資訊,請參閱 PostgreSQL 文件中的 EXPLAIN
注意
從 2.2.0 版開始,您可以將 escape_hatch_showplan_all
參數設為 ignore,以避免在 SQL Server 語法中將 BABELFISH_ 字首用於 SHOWPLAN_ALL
和 STATISTICS PROFILE
SET 命令。
例如,以下命令順序會開啟查詢計劃,然後傳回 SELECT 陳述式的預估查詢執行計劃,而不執行查詢。此範例透過使用 sqlcmd
命令列工具查詢 TDS 連接埠,以使用 SQL Server 範例 northwind
資料庫:
1>
SET BABELFISH_SHOWPLAN_ALL ON2>
GO1>
SELECT t.territoryid, e.employeeid FROM2>
dbo.employeeterritories e, dbo.territories t3>
WHERE e.territoryid=e.territoryid ORDER BY t.territoryid;4>
GOQUERY PLAN ------------------------------------------------------------------------------------ Query Text: SELECT t.territoryid, e.employeeid FROM dbo.employeeterritories e, dbo.territories t WHERE e.territoryid=e.territoryid ORDER BY t.territoryid Sort (cost=6231.74..6399.22 rows=66992 width=10) Sort Key: t.territoryid NULLS FIRST -> Nested Loop (cost=0.00..861.76 rows=66992 width=10) -> Seq Scan on employeeterritories e (cost=0.00..22.70 rows=1264 width=4) Filter: ((territoryid)::"varchar" IS NOT NULL) -> Materialize (cost=0.00..1.79 rows=53 width=6) -> Seq Scan on territories t (cost=0.00..1.53 rows=53 width=6)
完成檢閱和調整查詢後,您可以關閉該函數,如下所示:
1>
SET BABELFISH_SHOWPLAN_ALL OFF
將 BABELFISH_STATISTICS PROFILE 設定為 ON 的情況下,每個執行的查詢會傳回其一般結果集,接著傳回一個顯示實際查詢執行計劃的附加結果集。Babelfish 會產生查詢計劃,以在呼叫 SELECT 陳述式時提供最快的結果集。
1>
SET BABELFISH_STATISTICS PROFILE ON1>
2>
GO1>
SELECT e.employeeid, t.territoryid FROM2>
dbo.employeeterritories e, dbo.territories t3>
WHERE t.territoryid=e.territoryid ORDER BY t.territoryid;4>
GO
傳回結果集和查詢計劃 (此範例僅顯示查詢計劃)。
QUERY PLAN
---------------------------------------------------------------------------
Query Text: SELECT e.employeeid, t.territoryid FROM
dbo.employeeterritories e, dbo.territories t
WHERE t.territoryid=e.territoryid ORDER BY t.territoryid
Sort (cost=42.44..43.28 rows=337 width=10)
Sort Key: t.territoryid NULLS FIRST
-> Hash Join (cost=2.19..28.29 rows=337 width=10)
Hash Cond: ((e.territoryid)::"varchar" = (t.territoryid)::"varchar")
-> Seq Scan on employeeterritories e (cost=0.00..22.70 rows=1270 width=36)
-> Hash (cost=1.53..1.53 rows=53 width=6)
-> Seq Scan on territories t (cost=0.00..1.53 rows=53 width=6)
若要進一步了解如何分析您的查詢及 PostgreSQL 最佳化工具傳回的結果,請參閱 explain.depesz.com
可控制 Babelfish 解釋選項的參數
您可以使用下表中顯示的參數控制查詢計劃顯示的資訊類型。
參數 | 描述 |
---|---|
babelfishpg_tsql.explain_buffers |
此布林值會開啟 (和關閉) 最佳化工具的緩衝區量資訊。(預設值:關閉) (允許值:關閉、開啟) |
babelfishpg_tsql.explain_costs |
此布林值會開啟 (和關閉) 最佳化工具的預估啟動和總成本資訊。(預設值:開啟) (允許值:關閉、開啟) |
babelfishpg_tsql.explain_format |
指定 |
babelfishpg_tsql.explain_settings |
此布林值會開啟 (或關閉) 在 EXPLAIN 計劃輸出中包含組態參數的相關資訊。(預設值:關閉) (允許值:關閉、開啟) |
babelfishpg_tsql.explain_summary |
此布林值會開啟 (或關閉) 摘要資訊,例如查詢計劃後的總時間。(預設值:開啟) (允許值:關閉、開啟) |
babelfishpg_tsql.explain_timing |
此布林值會開啟 (或關閉) 實際啟動時間及在輸出的每個節點中花費的時間。(預設值:開啟) (允許值:關閉、開啟) |
babelfishpg_tsql.explain_verbose |
此布林值會開啟 (或關閉) 解釋計劃最詳細的版本。(預設值:關閉) (允許值:關閉、開啟) |
babelfishpg_tsql.explain_wal |
此布林值會開啟 (或關閉) WAL 記錄資訊的產生使其成為解釋計劃的一部分。(預設值:關閉) (允許值:關閉、開啟) |
您可以透過使用 PostgreSQL 用戶端或 SQL Server 用户端,來檢查系統上任何 Babelfish 相關參數的值。請執行下列命令,以取得目前的參數值:
1>
execute sp_babelfish_configure '%explain%';2>
GO
在以下輸出中,您可以看到此特定 Babelfish 資料庫叢集上的所有設定均為其預設值。並非所有的輸出都會出現在此範例中。
name setting short_desc ---------------------------------- -------- -------------------------------------------------------- babelfishpg_tsql.explain_buffers off Include information on buffer usage babelfishpg_tsql.explain_costs on Include information on estimated startup and total cost babelfishpg_tsql.explain_format text Specify the output format, which can be TEXT, XML, JSON, or YAML babelfishpg_tsql.explain_settings off Include information on configuration parameters babelfishpg_tsql.explain_summary on Include summary information (e.g.,totaled timing information) after the query plan babelfishpg_tsql.explain_timing on Include actual startup time and time spent in each node in the output babelfishpg_tsql.explain_verbose off Display additional information regarding the plan babelfishpg_tsql.explain_wal off Include information on WAL record generation (8 rows affected)
您可以使用 sp_babelfish_configure
變更這些參數的設定,如下列範例所示。
1>
execute sp_babelfish_configure 'explain_verbose', 'on';2>
GO
如果您想要讓設定永久存在於整個叢集層級上,請包括關鍵字 server,如下列範例所示。
1>
execute sp_babelfish_configure 'explain_verbose', 'on', 'server';2>
GO