正如我以爲我在SSIS中獲得了不錯的成績。極慢的SSIS查詢
在SSIS包,我想用我的版本皮納爾Dave的XML計劃緩存查詢發現這裏:http://blog.sqlauthority.com/2009/03/17/sql-server-practical-sql-server-xml-part-one-query-plan-cache-and-cost-of-operations-in-the-cache/
我的版本只是增加了一個SELECT TOP 50的ORDER BY estimatedcost 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文本文件。
該包似乎做得很好,直到它執行查詢,然後它只是掛起幾個小時。
服務器統計: 服務器2008(64位) SQL服務器2008R2(64位) 24 GB RAM(16到SQL,8至OS) E5620 @ 2.4GHz的(2個進程)
編輯:
我試過的東西:
- 將輸出寫入全局臨時表(和常規表),然後查詢該表的輸出。
- 在SSIS包中,創建並執行一個存儲過程,並將查詢輸出到臨時表(和常規表),然後查詢該表以獲取輸出。
有可能SSIS包沒有足夠的內存來分配緩衝區,因此它必須從表中非常緩慢地接受數據。我建議你將數據加載到垃圾目的地,這將排除CSV目標,問題 –
另外,當你在SSMS中運行這個時,你是否等待所有50條記錄到達? –
@ Nick.McDermaid:我試圖通過將輸出寫入全局臨時表和常規表來加快速度,但沒有任何明顯的速度變化。是的,我正在等待所有50條記錄到達。我會用這個信息更新我的帖子。 – DBADon