Моя проблема началась с Entity Framework
запроса, выполняемого очень медленно (~ 2 минуты).Поэтому я начал исследовать
Между тем, похоже, проблема также в стандартном SqlConnection
У меня довольно простой запрос
SELECT 1 AS [C1], [Extent1].[OldReleaseID] AS [OldReleaseID], [Extent1].[ProductName] AS [ProductName], [Extent1].[Price] AS [Price], [Extent1].[DiscountAmount] AS [DiscountAmount], [Extent1].[DiscountRate] AS [DiscountRate], [Extent1].[AbsorbVat] AS [AbsorbVat], [Extent1].[SerialCode] AS [SerialCode], [Extent1].[BrandName] AS [BrandName] FROM [dbo].[LocalSaleProductExts]() AS [Extent1]
Когда я запускаю его в SSMS
он выполняется за 0-1 секунду и возвращает около 30 тыс. строк
Тот же самый точный запрос выполняется в .net ExecuteReader
около 100 секунд!
Онлайн-исследование указывает в основном на 2 решения: ARITHABORT исниффинг параметров, так что для ударов я добавил все это в SSMS
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE
SET ARITHABORT OFF
Еще 0-1 секунд.
И в своем коде я добавил SET ARITHABORT ON
.Вот мой простой код
Using sc = New SqlClient.SqlConnection("data source=MYHOST;initial catalog=MYDB;persist security info=True;user id=MYUSER;password=MYPASS;MultipleActiveResultSets=True;")
Dim txt = "SELECT 1 AS [C1], [Extent1].[OldReleaseID] AS [OldReleaseID], [Extent1].[ProductName] AS [ProductName], [Extent1].[Price] AS [Price], [Extent1].[DiscountAmount] AS [DiscountAmount], [Extent1].[DiscountRate] AS [DiscountRate], [Extent1].[AbsorbVat] AS [AbsorbVat], [Extent1].[SerialCode] AS [SerialCode], [Extent1].[BrandName] AS [BrandName] FROM [dbo].[LocalSaleProductExts]() AS [Extent1] OPTION (RECOMPILE)"
sc.Execute("SET ARITHABORT ON")
sc.TryOpen()
Dim ret As List(Of Common.DbDataRecord)
Using cmd = sc.CreateCommand(txt)
Using dr = cmd.ExecuteReader
ret = dr.Cast(Of Common.DbDataRecord).ToList
dr.Close()
End Using
End Using
Dim a = ret
End Using
Обнаружение параметров. Я считаю, что здесь не имеет значения, поскольку я не отправляю никаких параметров
Также это не проблема блокировки, так как я тестирую их нав то же время (насколько это возможно по-человечески ...), поэтому, если это проблема синхронизации, оба должны быть медленными
Так что еще может быть проблемой?
Большое спасибо