簡體   English   中英

極慢的 SSIS 查詢

[英]Extremely Slow SSIS Query

就像我認為我對 SSIS 越來越好一樣。

在一個 SSIS 包中,我試圖使用我的 Pinal Dave 的 XML Plan Cache Query 版本,在這里找到: http : //blog.sqlauthority.com/2009/03/17/sql-server-practical-sql-server-xml-第一部分查詢計划緩存和緩存中的操作成本/

我的版本只是添加了一個 SELECT TOP 50 和一個 ORDER BY 估計成本 DESC。

我的查詢:

WITH XMLNAMESPACES(DEFAULT  N'http://schemas.microsoft.com/sqlserver/2004/07/showplan'),
CachedPlans
(
ParentOperationID,
OperationID,
PhysicalOperator,
LogicalOperator,
EstimatedCost,
EstimatedIO,
EstimatedCPU,
EstimatedRows,
PlanHandle, 
QueryText,
QueryPlan,
CacheObjectType,
ObjectType)
AS
(
SELECT
RelOp.op.value(N'../../@NodeId', N'int') AS ParentOperationID,
RelOp.op.value(N'@NodeId', N'int') AS OperationID,
RelOp.op.value(N'@PhysicalOp', N'varchar(50)') AS PhysicalOperator,
RelOp.op.value(N'@LogicalOp', N'varchar(50)') AS LogicalOperator,
RelOp.op.value(N'@EstimatedTotalSubtreeCost ', N'float') AS EstimatedCost,
RelOp.op.value(N'@EstimateIO', N'float') AS EstimatedIO,
RelOp.op.value(N'@EstimateCPU', N'float') AS EstimatedCPU,
RelOp.op.value(N'@EstimateRows', N'float') AS EstimatedRows,
cp.plan_handle AS PlanHandle,
st.TEXT AS QueryText,
qp.query_plan AS QueryPlan,
cp.cacheobjtype AS CacheObjectType,
cp.objtype AS ObjectType
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp
CROSS APPLY qp.query_plan.nodes(N'//RelOp') RelOp (op)
)
SELECT TOP 50
PlanHandle,
ParentOperationID,
OperationID,
PhysicalOperator,
LogicalOperator,
QueryText,
CacheObjectType,
ObjectType,
EstimatedCost,
EstimatedIO,
EstimatedCPU,
EstimatedRows
FROM CachedPlans
WHERE CacheObjectType = N'Compiled Plan'
ORDER by estimatedcost desc;

在 SSMS 中,此查詢在不到 30 秒的范圍內運行,但是當我在 SSIS 包中執行它時,如果它在維護勝過它之前完成,則需要 3-4 小時才能完成。

SSIS 包在晚上服務器負載很少時執行,然后將結果導出到 CSV 文本文件。

該包似乎運行良好,直到它開始執行查詢,然后它就掛了幾個小時。

服務器統計:Server 2008(64 位)SQL Server 2008R2(64 位)24 GB RAM(16 到 SQL,8 到 OS)E5620 @2.4 GHz(2 進程)

編輯:
我嘗試過的事情:

--將輸出寫入全局臨時表(和常規表),然后查詢該表以獲取輸出。
-- 在 SSIS 包中,創建並執行帶有查詢的存儲過程,該查詢輸出到臨時表(和常規表),然后查詢該表以獲取輸出。

如果您非常確定該查詢不占用時間。

1)創建SP

 a) if exit drop the table  (Think a unique name)

 b) create TABLE (SAME unique name)

 c) INSERT the result into the table

2 創建 SSIS 包

  a) Call the sp in execute sql task

  b) Create data flow select all data from the table (created in sp) and dump in cSV using flat file destination .

或者

根據您的問題 Query 在 ssms 中執行得非常快,並且您正在對 ssis 中的結果集進行任何轉換。

嘗試 BCP 輸出命令

https://msdn.microsoft.com/en-IN/library/ms162802.aspx

作為另一種方式,您可以創建多個臨時表並處理每個連接並將數據轉儲到表中..最后保存整個數據集的臨時表您可以使用 SSIS sql 任務完成此任務

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM