powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
72 сообщений из 72, показаны все 3 страниц
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755418
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Публикую материалы доклада с SQL Server User Group и пример как оптимизировать доступ к данным ASP.NET приложения с помощью Linq и Entity Framework. http://gandjustas.blogspot.ru/2014/09/asp.net-linq-ef-sql-server-performance.html

Мой блог http://gandjustas.blogspot.ru/ . Много интересного про архитектуру приложений, SharePoint и управление проектами.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755512
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas, а если обычный разработчик напишет в хранимой процедуре два запроса (как и с помощью Linq), а не один?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755590
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustas, а если обычный разработчик напишет в хранимой процедуре два запроса (как и с помощью Linq), а не один?

Будет тот же эффект. Процедура оптимизируется один раз при первом вызове с учетом фактических параметров. Обойти на уровне SQL можно тремя способами:
1) вызывать процедуру WITH RECOMPILE - самый плохой способ
2) Сделать две процедуры с разными запросами и одну, которая их вызывает, но это дублирование кода будет аццкое
3) клеить строки динамически и использовать sp_executesql - это гемор, ошибки и потенциальные SQL инъекции.

Клеить строки идеальный вариант с точки зрения результата, но без автоматизации типа Linq, крайне сложный.
С Linq (почти) все просто.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755598
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasКлеить строки идеальный вариант с точки зрения результата, но без автоматизации типа Linq, крайне сложный .Ну прям-таки крайне сложный. Не преувеличивайте
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755602
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas3) клеить строки динамически и использовать sp_executesql - это гемор, ошибки и потенциальные SQL инъекции.Всегда так делали. Никакого гемора, никаких инъекций. С точки зрения плана выполнения, результат ничем не отличается от запуска через LINQ.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
-- ...............

if @p is not null
    set @sql = @sql + ' and t.ShippedDate = @p'
else
    set @sql = @sql + ' and t.ShippedDate is null'

exec sp_executesql @sql, '@p datetime', @p
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755614
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

1) для сортировок надо уже имена полей клеить
2) имена полей надо эскйпить, чтобы избежать инъекций
3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755617
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustasКлеить строки идеальный вариант с точки зрения результата, но без автоматизации типа Linq, крайне сложный .Ну прям-таки крайне сложный. Не преувеличивайте
По сравнению с linq сложнее раз в 10, особенно когда запросы не такие простые, как в примере.

Надо ведь еще проекцию не забыть клеить, и джоины могут зависеть от условий.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755620
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasАлексей К,

1) для сортировок надо уже имена полей клеить
2) имена полей надо эскйпить, чтобы избежать инъекций
3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад.
Забыл еще:
4) проекции тоже надо клеить
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755625
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAпропущено...
Ну прям-таки крайне сложный. Не преувеличивайте
По сравнению с linq сложнее раз в 10, особенно когда запросы не такие простые, как в примере.

Надо ведь еще проекцию не забыть клеить, и джоины могут зависеть от условий.Что-то не припомню случаев, когда надо было клеить проекции, сортировки и были сложности с джоинами.

А как будет выглыдить C# код, когда запросы не такие простые? Может следовало пример посложнее придумать?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755633
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и главное: статья называется "Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server с помощью LINQ", - а под названием какой-то простенький надуманный пример.
Хоть бы агенду какую расписал, или слайды к докладу запостил. На какой минуте там про высоконагруженные приложения-то? Примеры из реальной практики есть?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755641
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кgandjustas3) клеить строки динамически и использовать sp_executesql - это гемор, ошибки и потенциальные SQL инъекции.Всегда так делали. Никакого гемора, никаких инъекций. С точки зрения плана выполнения, результат ничем не отличается от запуска через LINQ.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
-- ...............

if @p is not null
    set @sql = @sql + ' and t.ShippedDate = @p'
else
    set @sql = @sql + ' and t.ShippedDate is null'

exec sp_executesql @sql, '@p datetime', @p


В топку классическое императивное мышление.
Код: sql
1.
2.
3.
4.
.......
where 
.......
and (@p is null or t.ShippedDate = @p)
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755661
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas Процедура оптимизируется один раз при первом вызове с учетом фактических параметров.
У процедуры, в плане построения плана, над простым запросом, только одно преимущество, план ее выполнения с большей вероятностью будет находиться в кеше планов.
Более того, у процедуры может быть стопицот планов, в зависимости от параметров, фрагментации индексов и того, с какой ноги встала сегодня жена Барака Обамы.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755673
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей Кпропущено...
Всегда так делали. Никакого гемора, никаких инъекций. С точки зрения плана выполнения, результат ничем не отличается от запуска через LINQ.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
-- ...............

if @p is not null
    set @sql = @sql + ' and t.ShippedDate = @p'
else
    set @sql = @sql + ' and t.ShippedDate is null'

exec sp_executesql @sql, '@p datetime', @p


В топку классическое императивное мышление.
Код: sql
1.
2.
3.
4.
.......
where 
.......
and (@p is null or t.ShippedDate = @p)

В топку Index Seek ?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38755680
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasАлексей К,

1) для сортировок надо уже имена полей клеитьНе проблема.
gandjustas2) имена полей надо эскйпить, чтобы избежать инъекцийЗачем? Имена полей не приходят в качестве параметра.
gandjustas3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад.Ад начинается, когда нужно выделить фрагмент SQL для повторного использования. В MSSQL это решается в том числе через Scalar UDF, которые работают, мягко говоря, не быстро.

Вот тут, да - LINQ приходить на помощь: "Композиция дерева выражений и подставляемые выражения" . Но я помню, тебе не нравится такой подход, ты предпочитаешь в этом случае копипастить.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756217
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЧто-то не припомню случаев, когда надо было клеить проекции, сортировки и были сложности с джоинами.
Значит все запросы у тебя простые были. Я делал систему с row-level security, вот там пришлось много генерить запросов, причем из-за кеширования ACL иногда генерировался запрос с кучей джоинов, а иногда без них, на дну и ту же выборку.

skyANAА как будет выглыдить C# код, когда запросы не такие простые? Может следовало пример посложнее придумать?
Тоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами.

Но об этом не писал. ИМХО очевидно всем .NET программистам должно быть.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756220
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВgandjustas Процедура оптимизируется один раз при первом вызове с учетом фактических параметров.
У процедуры, в плане построения плана, над простым запросом, только одно преимущество, план ее выполнения с большей вероятностью будет находиться в кеше планов.
Более того, у процедуры может быть стопицот планов, в зависимости от параметров, фрагментации индексов и того, с какой ноги встала сегодня жена Барака Обамы.
Чушь полнейшая.
1) У процедуры ровно одни план, который оптимизируется при первом вызове с учетом конкретных параметров. Можно делать вызов with recompile, тогда план будет генерироваться при каждом вызове и не будет кешироваться.
2) Все adhoc запросы в .NET выполняются с использованием sp_executesql, которая гарантирует сохранение плана запроса в кеше.

Изучайте как работает SQL Server прежде чем писать такое.
В видео, кстати, упоминаю этот миф.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756226
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAЧто-то не припомню случаев, когда надо было клеить проекции, сортировки и были сложности с джоинами.
Значит все запросы у тебя простые были. Я делал систему с row-level security, вот там пришлось много генерить запросов, причем из-за кеширования ACL иногда генерировался запрос с кучей джоинов, а иногда без них, на дну и ту же выборку.

skyANAА как будет выглыдить C# код, когда запросы не такие простые? Может следовало пример посложнее придумать?
Тоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами.

Но об этом не писал. ИМХО очевидно всем .NET программистам должно быть.Давай пример. А то не понятно, что у тебя в хранимке становится крайне сложным, а в linq при этом крайне просто.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756233
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВот тут, да - LINQ приходить на помощь: "Композиция дерева выражений и подставляемые выражения" . Но я помню, тебе не нравится такой подход, ты предпочитаешь в этом случае копипастить.
Ты о чем? Как раз в Linq можно ничего не копипастить, используя комбинаторы.

А если нужно подставлять деревья выражений в деревья выражений, то я это еще 4 года назад придумал - http://gandjustas.blogspot.ru/2010/06/expression-tree.html
Сейчас в EF это можно прозрачно для пользователя сделать
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756234
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasТоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами.В MSSQL есть View и Inline UDF.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756245
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasА если нужно подставлять деревья выражений в деревья выражений, то я это еще 4 года назад придумал - http://gandjustas.blogspot.ru/2010/06/expression-tree.html
Сейчас в EF это можно прозрачно для пользователя сделатьКроме тебя это ещё придумали в BLToolkit (LINQ2DB) и в LinqKit. :-)

gandjustasСейчас в EF это можно прозрачно для пользователя сделатьКак? Кроме обёртки над LINQ-провайдером способов не вижу.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756279
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas1) У процедуры ровно одни план, который оптимизируется при первом вызове с учетом конкретных параметров.

Код: sql
1.
2.
3.
4.
5.
SELECT * 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE cacheobjtype='Compiled Plan' 
ORDER BY text DESC;
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756395
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КgandjustasТоже самое будет. Потому что в linq нет надобности выписывать запрос полностью. В посте указана функция, которая принимает IQueryable и возвращает IQueryable (такие функции называются комбинаторами ), во входящем IQueryable может быть запос любой сложности, который в свою очередь собирается такими же простыми (можно сказать примитивными) комбинаторами.В MSSQL есть View и Inline UDF.

И? композиции то нет, ты же не можешь написать так:
Код: sql
1.
select * from MakeProjection(FilterByX(FilterByY(y))

.
А в Linq ты это напишешь еще красивее:
Код: c#
1.
2.
3.
4.
ctx.Table
   .FilterByY(y)
   .FilterByX(x)
   .MakeProjection()
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756404
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КgandjustasА если нужно подставлять деревья выражений в деревья выражений, то я это еще 4 года назад придумал - http://gandjustas.blogspot.ru/2010/06/expression-tree.html
Сейчас в EF это можно прозрачно для пользователя сделатьКроме тебя это ещё придумали в BLToolkit (LINQ2DB) и в LinqKit. :-)
Только он появился спустя год кажись ;)


Алексей ККак? Кроме обёртки над LINQ-провайдером способов не вижу.
Кроме обертки и нет способов, но у меня обертка генерируется в AOP и подсовываться вместо IDbSet. То есть в коде приложения вообще никаких изменений.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756421
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВgandjustas1) У процедуры ровно одни план, который оптимизируется при первом вызове с учетом конкретных параметров.

Код: sql
1.
2.
3.
4.
5.
SELECT * 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE cacheobjtype='Compiled Plan' 
ORDER BY text DESC;




запустил скрипт из поста

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DBCC FREEPROCCACHE
GO
 
EXEC    [dbo].[GetTransactionsByShipDate] NULL
GO
 
declare @shipdate datetime = getdate()
EXEC    [dbo].[GetTransactionsByShipDate] @shipdate
GO
 
DBCC FREEPROCCACHE
GO
 
declare @shipdate datetime = getdate()
EXEC    [dbo].[GetTransactionsByShipDate] @shipdate
GO
 
EXEC    [dbo].[GetTransactionsByShipDate] NULL
GO



Потом сделал запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT * 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE cacheobjtype='Compiled Plan' 
		and objtype='Proc' 
		and dbid = DB_ID('ConsoleApplication9.Production')
ORDER BY text DESC;



bucketidrefcountsusecountssize_in_bytesmemory_object_addresscacheobjtypeobjtypeplan_handlepool_idparent_plan_handledbidobjectidnumberencryptedtext3072322573440x00000004743FA060Compiled PlanProc0x05000800D1D9C83490A2647F04000000010000000000000000000000000000000000000000000000000000001NULL888557819310CREATE PROCEDURE [dbo].[GetTransactionsByShipDate]

Упс, один план, используемый два раза.

Сделал много запусков с разными параметрами без сброса кеша - все равно один план.

Короче приходи ко мне на тренинг по оптимизации, научу, ориентировочно 16 октября.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756450
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasЗначит все запросы у тебя простые были.Эхх, да, наверное не довелось...

Ни когда для ЮКОСа, Норникеля, ВНИИСТа софт писали.
Ни когда системы онлайн бронирования в реальном времени.
Ни сейчас.

Сейчас вообще тухляк, в основном к MongoDB запросы.

И на HighLoad++ никто с докладами про LINQ с проекциями не выступает. Печаль.

Пример-то будет, приближённый к реальности?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756455
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это ни очём не говорит. разве у вас были активные изменения в используемых этой ХП таблицах?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756504
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneэто ни очём не говорит. разве у вас были активные изменения в используемых этой ХП таблицах?

Что значит "активные изменения" ?

Делаю так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
insert into Transactions select ProductId,OrderLineId,TransactionDate,ShippedDate from Transactions
GO

EXEC	[dbo].[GetTransactionsByShipDate] NULL
GO

declare @shipdate datetime = getdate()
EXEC	[dbo].[GetTransactionsByShipDate] @shipdate
GO

SELECT * 
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE cacheobjtype='Compiled Plan' 
		and objtype='Proc' 
		and dbid = DB_ID('ConsoleApplication9.Production')
ORDER BY text DESC;



И все равно один план получается.

Хватит фантазировать, читайте BOL. Там четко расписано что и когда компилируется. И нет у ХП в SQL Server больше одного плана вообще никогда.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756518
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПример-то будет, приближённый к реальности?
Тебе реально приложение показать? Увы, NDA.
Или тебе помочь применить знания к твоей реальности?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756521
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAПример-то будет, приближённый к реальности ?
Тебе реально приложение показать? Увы, NDA.
Или тебе помочь применить знания к твоей реальности?Выделил жирным, так понятнее?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756525
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у вас один planguide в вашем запросе, потому что вы своих не создавали для него. о чём вам и указали, что planguides может быть много. идите саим читайте BOL
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756526
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять этот упоротый теоретик отжигает на форуме?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756550
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneу вас один planguide в вашем запросе, потому что вы своих не создавали для него. о чём вам и указали, что planguides может быть много. идите саим читайте BOL
Что за бред? Хоть сто плангайдов создайте, а план у процедуры будет один.

Покажите пример с двумя планами в кеше для одной и той же процедуры. Любым способом.

Спорим на 10к рублей, что не получится?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756556
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а причём тут кэш? мы говорим, что их много может быть и можно всегда заюзать тот, который нужен:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
--Create a procedure on which to define the plan guide.
IF OBJECT_ID(N'Sales.GetSalesOrderByCountry', N'P') IS NOT NULL
    DROP PROCEDURE Sales.GetSalesOrderByCountry;
GO
CREATE PROCEDURE Sales.GetSalesOrderByCountry 
    (@Country nvarchar(60))
AS
BEGIN
    SELECT *
    FROM Sales.SalesOrderHeader AS h 
    INNER JOIN Sales.Customer AS c ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country;
END
GO
--Create the plan guide.
EXEC sp_create_plan_guide N'Guide3',
    N'SELECT *
    FROM Sales.SalesOrderHeader AS h 
    INNER JOIN Sales.Customer AS c ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country',
    N'OBJECT',
    N'Sales.GetSalesOrderByCountry',
    NULL,
    N'OPTION (OPTIMIZE FOR (@Country = N''US''))';
GO
--Disable the plan guide.
EXEC sp_control_plan_guide N'DISABLE', N'Guide3';
GO
--Enable the plan guide.
EXEC sp_control_plan_guide N'ENABLE', N'Guide3';
GO
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756560
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustasпропущено...

Тебе реально приложение показать? Увы, NDA.
Или тебе помочь применить знания к твоей реальности?Выделил жирным, так понятнее?

Честно говоря нет. Что ты имеешь ввиду "приближенный к реальности"?

Лично я писал такую процедуру (с точностью до имен полей и таблиц) в 2007 году и после того как разобрался с кешем планов - переписывал на Linq.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756566
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneа причём тут кэш? мы говорим, что их много может быть и можно всегда заюзать тот, который нужен:

Специально для тебя цитирую с чего начался разговор, в который ты влез:

ЕвгенийВ Более того, у процедуры может быть стопицот планов, в зависимости от параметров, фрагментации индексов и того, с какой ноги встала сегодня жена Барака Обамы.

Про плангайды - ты не в тему влез, более того, несмотря на много плангайдов план у процедуры все равно будет один.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756575
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAпропущено...
Выделил жирным, так понятнее?

Честно говоря нет. Что ты имеешь ввиду "приближенный к реальности"?

Лично я писал такую процедуру (с точностью до имен полей и таблиц) в 2007 году и после того как разобрался с кешем планов - переписывал на Linq.Ну вот и вставь сюда объявление и кусок той процедуры, где у тебя случилась крайняя сложность.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756580
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustasпропущено...


Честно говоря нет. Что ты имеешь ввиду "приближенный к реальности"?

Лично я писал такую процедуру (с точностью до имен полей и таблиц) в 2007 году и после того как разобрался с кешем планов - переписывал на Linq.Ну вот и вставь сюда объявление и кусок той процедуры, где у тебя случилась крайняя сложность.

1) Было давно, кода не осталось.
2) Большая часть работы под NDA и нельзя на форумах выкладывать.
3) Что это изменит? Суть проблемы и решения не поменяется.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756589
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAпропущено...
Ну вот и вставь сюда объявление и кусок той процедуры, где у тебя случилась крайняя сложность.

1) Было давно, кода не осталось.
2) Большая часть работы под NDA и нельзя на форумах выкладывать.
3) Что это изменит? Суть проблемы и решения не поменяется.Понятно, слив.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756594
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustasпропущено...


1) Было давно, кода не осталось.
2) Большая часть работы под NDA и нельзя на форумах выкладывать.
3) Что это изменит? Суть проблемы и решения не поменяется.Понятно, слив.
Если тебе от этого легче, можешь так считать.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756608
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAпропущено...
Понятно, слив.
Если тебе от этого легче, можешь так считать.Да мне от этого также. Как я не встречал тех сложностей, о которых ты тут фантазируешь, так и не встречу похоже
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756620
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasАлексей ККак? Кроме обёртки над LINQ-провайдером способов не вижу.
Кроме обертки и нет способов, но у меня обертка генерируется в AOP и подсовываться вместо IDbSet. То есть в коде приложения вообще никаких изменений.У меня тоже.

gandjustasАлексей Кпропущено...
В MSSQL есть View и Inline UDF.

И? композиции то нет, ты же не можешь написать так:
Код: sql
1.
select * from MakeProjection(FilterByX(FilterByY(y))

.
А в Linq ты это напишешь еще красивее:
Код: c#
1.
2.
3.
4.
ctx.Table
   .FilterByY(y)
   .FilterByX(x)
   .MakeProjection()

В SQL это не так красиво, но результат тот же:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
    A + B C
from
(
    select *
    from 
    (
        select *
        from T
        where A = @a
    ) src
    where B = @b
) src
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756668
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ? композиции то нет, ты же не можешь написать так:
Код: sql
1.
select * from MakeProjection(FilterByX(FilterByY(y))

.
А в Linq ты это напишешь еще красивее:
Код: c#
1.
2.
3.
4.
ctx.Table
   .FilterByY(y)
   .FilterByX(x)
   .MakeProjection()

В SQL это не так красиво, но результат тот же:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
    A + B C
from
(
    select *
    from 
    (
        select *
        from T
        where A = @a
    ) src
    where B = @b
) src

[/quot]

И все равно не то, потому что повторной используемости кусков запросов нет. Тебе все равно надо весь запрос в одном месте выписать. А linq позволяет собирать его по кускам собирать, причем в зависимости от условий.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756669
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustasпропущено...

Если тебе от этого легче, можешь так считать.Да мне от этого также. Как я не встречал тех сложностей, о которых ты тут фантазируешь, так и не встречу похоже

Да у тебя и монга надежно работает. Я не сомневаюсь что у тебя сложностей с планами никогда не было и не будет.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756690
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasИ все равно не то, потому что повторной используемости кусков запросов нет.Есть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create view V as select A, B from T where .....
go

select A+B C from V where ....
go

select A-B D from V where ....
go

Тут даже наследование через * можно организовать. :-)
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756691
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAпропущено...
Да мне от этого также. Как я не встречал тех сложностей, о которых ты тут фантазируешь, так и не встречу похоже

Да у тебя и монга надежно работает. Я не сомневаюсь что у тебя сложностей с планами никогда не было и не будет.А какие могут быть сложности с планами?

Смотришь план, делаешь выводы, проводишь необходимую оптимизацию, смотришь новый план. Всё вроде просто. Вот только просто не значит тривиально.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756692
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasА linq позволяет собирать его по кускам собирать, причем в зависимости от условий .sp_executesql, как было предложено выше.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756697
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во времена ЮКОСа не было LINQ, обходились вьюхами обычными и материализованными, хранимками и функциями, денормализацией, индексами и прочими "олдскульными" вещами.
Когда писали системы онлайн бронирования, то LINQ (IQueryable) тупо не использовался, потому как под каждый сервис стороннего поставщика писать IQueryProvider - это не самое лучшее решение.
Ну и обходились по привычке "олдскульными" вещами.

А сейчас, сам понимаешь, MongoDB.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756749
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА сейчас, сам понимаешь, MongoDB.

Медленный он, только для специфичных весчей.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756787
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAА сейчас, сам понимаешь, MongoDB.

Медленный он, только для специфичных весчей.Гы. И где же он медленный?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756804
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAГы. И где же он медленный?

На запросы отчёты, например, финансовые делать из монги, лучше пойти и убиться.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756806
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAГы. И где же он медленный?

На запросы отчёты, например, финансовые делать из монги, лучше пойти и убиться.Ахаха. Финансовые отчёты из монги. Ты мне напомнил ту авторшу статьи, тынц на перевод которой Стасян тут постил.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756816
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАхаха. Финансовые отчёты из монги. Ты мне напомнил ту авторшу статьи, тынц на перевод которой Стасян тут постил.

Если не секрет для чего юзаете монгу?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756819
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, не секрет. Данные CMS там хранятся.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756824
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt, не секрет. Данные CMS там хранятся.
Типа "Деньги до зарплаты, под 12% в неделю?" :)
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756828
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВskyANAhVostt, не секрет. Данные CMS там хранятся.
Типа "Деньги до зарплаты, под 12% в неделю?" :)Чего?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756829
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt, не секрет. Данные CMS там хранятся.

че-нить ещё юзаете или только монгу?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756835
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAhVostt, не секрет. Данные CMS там хранятся.

че-нить ещё юзаете или только монгу?Ну в CMS ещё используется Couchbase в качестве кэша, WebDav. Темы и файлы пользовательские лежат на дисках.

А так основное хранилище - это MS SQL Server. elasticsearch перед моим отпуском начали прикручивать. Xamarin юзаем
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756842
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу в CMS ещё используется Couchbase в качестве кэша, WebDav. Темы и файлы пользовательские лежат на дисках.

А так основное хранилище - это MS SQL Server. elasticsearch перед моим отпуском начали прикручивать. Xamarin юзаем

фух, а я уж думал вы от реляционки совсем отказались. а данные CMS, которые имеются в виду, это чисто неструктуированные данные пользователей?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756843
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAXamarin юзаем

тоже
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756854
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...


че-нить ещё юзаете или только монгу?Ну в CMS ещё используется Couchbase в качестве кэша, WebDav. Темы и файлы пользовательские лежат на дисках.

А так основное хранилище - это MS SQL Server. elasticsearch перед моим отпуском начали прикручивать. Xamarin юзаем
И что за CMS такая навороченная?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756857
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИ что за CMS такая навороченная?

это не CMS в обычном понимании вряд ли её можно скачать и себе поставить
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756862
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕвгенийВИ что за CMS такая навороченная?

это не CMS в обычном понимании вряд ли её можно скачать и себе поставить
Описание то есть?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38756868
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВОписание то есть?

"skyANA" --> URL
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757029
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВhVosttпропущено...


это не CMS в обычном понимании вряд ли её можно скачать и себе поставить
Описание то есть? Version 5.0 Overview
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757032
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttа данные CMS, которые имеются в виду, это чисто неструктуированные данные пользователей?Это структура страниц (Page) и настройки для каждой страницы и каждого отдельного компонента, структура шаблонов страниц (Page Template), их версии,
то как они расположены на сайте (Site Structure), "бекапы" сайта, что делаются при смене темы, ну и данные о транзакциях.
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757235
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел видео от нашего ганджубаса. Эпический бред для студентов. Особенно порадовало, как он разжевывает, что не нужно тащить все поля в проекции в dto класс
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757246
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :)
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757261
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcodearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :)
Есть же функция ускоренного просмотра!
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757270
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВskyANAcodearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :)
Есть же функция ускоренного просмотра!Вы тоже посмотрели видео?
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757287
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA Вы тоже посмотрели видео?
Чукча не читатель, чукча писатель!
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38757304
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcodearticles.ru, видео занимает час времени и это не весь доклад. Как ты осилил-то? :)
Ты прав, признаюсь - я слукавил осилил до того момента, когда он начал отжигать про dto. И то с небольшими скипами. Потом, как сказали выше, ускоренно домотал до конца. В сумме на этот мусор потратил минут 10 личной жизни. Уже жалею.

Лучше через хороший УВН пожарил бы на 140 объекте, чем просрал это время на какую-то ересь
...
Рейтинг: 0 / 0
Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
    #38759519
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasАлексей К,

1) для сортировок надо уже имена полей клеить
2) имена полей надо эскйпить, чтобы избежать инъекций
3) если от условия зависит не только предикат, но и джоин - вот тут начинается ад.

нет никакого ада. дело вкуса
...
Рейтинг: 0 / 0
72 сообщений из 72, показаны все 3 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Оптимизация высоконагруженных ASP.NET приложений, работающих с SQL Server с помощью LINQ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]