So wie ich dachte, dass ich mit SSIS gut wurde.Extrem langsame SSIS-Abfrage
Innerhalb eines SSIS-Pakets, ich versuche, meine Version von Pinal Dave XML-Plan Cache Abfrage Sie hier zu verwenden: 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/
Meine Version kommt noch hinzu, eine SELECT TOP 50 mit einer ORDER BY estimatedcost DESC.
Meine Frage:
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;
In SSMS diese Abfrage wird im Sub 30 Sekunden Bereich, aber wenn ich es in dem SSIS-Paket ausführen dauert es 3-4 Stunden in Anspruch nehmen, wenn es vor der Wartung überhaupt abgeschlossen übertrumpft es.
Das SSIS-Paket wird nachts ausgeführt, wenn der Server nur wenig belastet wird, und exportiert dann die Ergebnisse in eine CSV-Textdatei.
Das Paket scheint in Ordnung zu sein, bis es zur Ausführung der Abfrage kommt und es dann einfach stundenlang hängt.
Server-Statistik: Server 2008 (64 Bit) SQL Server 2008R2 (64 bit) 24 GB RAM (16 bis SQL, 8 bis O) E5620 @ 2,4 GHz (2 Procs)
Edit:
Dinge, die ich versucht habe:
--Writing die Ausgabe zu einer globalen Temp-Tabelle (und eine reguläre Tabelle) und dann diese Tabelle für die Ausgabe abfragen.
- Innerhalb des SSIS-Pakets wird eine gespeicherte Prozedur mit der Abfrage erstellt und dann ausgeführt, die in eine temporäre Tabelle (und eine reguläre Tabelle) ausgegeben wird. Anschließend wird diese Tabelle für die Ausgabe abgefragt.
Es ist möglich, das SSIS-Paket nicht genügend Speicher, um Puffer zuzuordnen, so dass es die Daten sehr langsam aus der Tabelle akzeptieren muss. Ich schlage vor, Sie laden die Daten zu einem Papierkorb Ziel, und dies wird das CSV-Ziel als das Problem ausschließen –
Auch, wenn Sie dies in SSMS ausführen, warten Sie auf alle 50 Datensätze ankommen? –
@ Nick.McDermaid: Ich habe versucht, die Dinge zu beschleunigen, indem Sie die Ausgabe sowohl auf globale temporäre Tabellen als auch auf reguläre Tabellen ohne erkennbare Änderung der Geschwindigkeit schreiben. Ja, ich warte auf alle 50 Einträge.Ich werde meinen Beitrag mit diesen Informationen aktualisieren. – DBADon