.NET базы данных вызывает медленные вызовы при использовании COM Interop, быстро через VB6 - PullRequest
1 голос
/ 30 сентября 2010

После поиска в течение нескольких дней ( здесь и здесь ) я считаю, что обнаружил проблему, и похоже, что эта . Однако я сравнил два плана выполнения, чтобы сравнить его, но они кажутся идентичными, за исключением времени выполнения. (Сервер базы данных - SQL SERVER 2000)

Запрос, выполненный в VB6:

EventClass: SQL: BatchCompleted

  • ЦП: 31
  • Читает: 419
  • пишет: 0
  • Продолжительность: 390

EventClass: выход из системы аудита (не знаю, полезно ли это)

  • CPU: 47
  • Читает: 1295
  • пишет: 0
  • Продолжительность: 920

Запрос, выполненный с помощью .NET (Interop / COM VB6):

EventClass: SQL: BatchCompleted

  • CPU: 16
  • Читает: 419
  • пишет: 0
  • Продолжительность: 1906

EventClass: выход из системы аудита (не знаю, полезен ли он)

  • CPU: 31
  • Читает: 1295
  • пишет: 0
  • Продолжительность: 4813

Теперь план выполнения записывается с помощью запроса с VB6 AND .NET (сравнение файлов с UltraEdit) между SQL: BatchStarting и SQL: BatchCompleted EventClass:

Table Scan(OBJECT:([Resgu].[dbo].[stsIns] AS [si]), WHERE:([si].[IdEqIns]=NULL AND [si].[StsstsIns]>=0))

Clustered Index Scan(OBJECT:([Resgu].[dbo].[Uge].[pkUge] AS [u]), WHERE:([u].[StsUge]>=Convert([@1])))

Clustered Index Scan(OBJECT:([Resgu].[dbo].[Btt].[pkBtt] AS [b]), WHERE:([b].[StsBtt]>=Convert([@1])))

Compute Scalar(DEFINE:([Expr1001]=Convert([p].[IdEmp])+' - '+[p].[EmpName]+' - '+[p].[PreEmpName]))
  |--Clustered Index Scan(OBJECT:([Resgu].[dbo].[Employee].[pkEmployee] AS [p]), WHERE:([p].[StsEmployee]>=0))

Compute Scalar(DEFINE:([Expr1002]=Convert([t].[IdStruct])+' - '+[t].[LblTurn]+' - '+[s].[LblStruct]))
  |--Nested Loops(Inner Join, OUTER REFERENCES:([s].[IdStruct]))
       |--Clustered Index Scan(OBJECT:([Resgu].[dbo].[Struct].[pkStruct] AS [s]), WHERE:([s].[StsStruct]>=0))
       |--Clustered Index Seek(OBJECT:([Resgu].[dbo].[Turn].[pkTurn] AS [t]), SEEK:([t].[IdStruct]=[s].[IdStruct]),  WHERE:([t].[StsTurn]>=0) ORDERED FORWARD)

Compute Scalar(DEFINE:([Expr1002]=Convert([t].[IdStruct])+' - '+[t].[LblTurn]+' - '+[s].[LblStruct]))
  |--Nested Loops(Inner Join, OUTER REFERENCES:([s].[IdStruct]))
       |--Clustered Index Scan(OBJECT:([Resgu].[dbo].[Struct].[pkStruct] AS [s]), WHERE:([s].[StsStruct]>=0))
       |--Clustered Index Seek(OBJECT:([Resgu].[dbo].[Turn].[pkTurn] AS [t]), SEEK:([t].[IdStruct]=[s].[IdStruct]),  WHERE:([t].[StsTurn]>=0) ORDERED FORWARD)

Compute Scalar(DEFINE:([Expr1001]=Convert([s].[IdSite])+' - '+[s].[LblSite]))
  |--Clustered Index Scan(OBJECT:([Resgu].[dbo].[Site].[pkSite] AS [s]), WHERE:([s].[StsSite]>=0))

Clustered Index Scan(OBJECT:([Resgu].[dbo].[MarketType].[pkMarketType] AS [tm]), WHERE:([tm].[StsMarketType]>=Convert([@1])))

Clustered Index Scan(OBJECT:([Resgu].[dbo].[Flow].[pkFlow] AS [f]), WHERE:([f].[CatFlow]<Convert([@2]) AND [f].[StsFlow]>=Convert([@1])))

Table Scan(OBJECT:([Resgu].[dbo].[TypeInst] AS [ti]), WHERE:([ti].[StsTypeInst]>=Convert([@1])))

Clustered Index Scan(OBJECT:([Resgu].[dbo].[WeaSation].[pkWeaSation] AS [sm]), WHERE:([sm].[StsWeaSation]>=Convert([@1])))

Я не специалист по Sql Profiling, поэтому мне не хватает чего-нибудь проверить, но что?

С уважением,

Florian

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

Идентичные планы выполнения, но разные сроки.Параметры подключения для обоих подключений идентичны?Есть ли разница в загрузке сервера?

0 голосов
/ 08 октября 2010

Остерегайтесь кеширования и сниффинга параметров.У меня были некоторые странные проблемы с производительностью с некоторыми хранимыми процедурами, и я смог сузить их до плохой оптимизации.http://blogs.msdn.com/b/khen1234/archive/2005/06/02/424228.aspx

...