Gandjustas' blog

Фильтр по тегу: быстродействие


Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server с помощью LINQ

Доклад с таким длинным и непонятным названием я читал на SQL Server User Group 10 сентября в Москве. Ниже слайды запись доклада:

К сожалению, как обычно я не показал все что хотел, часть материала не попала на видео запись. Но я восполню этот недостаток.
Как вы думаете, можно ли на Linq делать запросы, которые работают быстрее рукопашных? Оказывается да, и очень просто.
Например надо сделать функцию, которая отбирает заказы по дате отгрузки. Если параметр указал, то выбрать заказы за эту дату. А если не указана дата, то выбрать все заказы, у которых дата отгрузки пустая. Обычный разработчик напишет такую процедуру:

CREATE PROCEDURE [dbo].[GetTransactionsByShipDate]
    @shipDate datetime
AS
    SELECT t.Id, t.ProductId, t.TransactionDate 
       from Transactions t
    where
        (@shipDate is not null 
          and t.ShippedDate = @shipDate) 
     or (@shipDate is null 
          and t.ShippedDate is null)

Эта процедура подвержена parameter sniffing problem. Проблема заключается в том, что план процедуры генерируется один раз при первом вызове с учетом фактических параметров при вызове. Если при первом вызове ShipDate был NULL (низкая селективность), то сгенерируется план с Index Scan. Если же первый вызов был с конкретным значением даты, то получится Index Seek, который будет неэффективно работать для значений с низкой селективностью.
Простой тест:
DBCC FREEPROCCACHE
GO

EXEC    [dbo].[GetTransactionsByShipDate] NULL
GO

declare @shipdate datetime = ge...
читать дальше...
добавлено: 15 июл 16 просмотры: 1737, комментарии: 2



Подборка материалов о серверной оптимизации ASP.NET

В процессе подготовки семинара по оптимизации, который пройдет 30 октября 2014 года (регистрация тут - http://gandjustas.timepad.ru/event/150915/), я собрал ранее опубликованные материалы по серверной оптимизации ASP.NET приложений.
Серия постов о кешировании на хабре:
Оптимизация работы с данными:
Какие темы вам еще будут интересны?
читать дальше...
добавлено: 13 июл 16 просмотры: 857, комментарии: 0



Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server с помощью LINQ

Доклад с таким длинным и непонятным названием я читал на SQL Server User Group 10 сентября в Москве. Ниже слайды запись доклада:

К сожалению, как обычно я не показал все что хотел, часть материала не попала на видео запись. Но я восполню этот недостаток.
Как вы думаете, можно ли на Linq делать запросы, которые работают быстрее рукопашных? Оказывается да, и очень просто.
Например надо сделать функцию, которая отбирает заказы по дате отгрузки. Если параметр указал, то выбрать заказы за эту дату. А если не указана дата, то выбрать все заказы, у которых дата отгрузки пустая. Обычный разработчик напишет такую процедуру:

CREATE PROCEDURE [dbo].[GetTransactionsByShipDate]
    @shipDate datetime
AS
    SELECT t.Id, t.ProductId, t.TransactionDate 
       from Transactions t
    where
        (@shipDate is not null 
          and t.ShippedDate = @shipDate) 
     or (@shipDate is null 
          and t.ShippedDate is null)

Эта процедура подвержена parameter sniffing problem. Проблема заключается в том, что план процедуры генерируется один раз при первом вызове с учетом фактических параметров при вызове. Если при первом вызове ShipDate был NULL (низкая селективность), то сгенерируется план с Index Scan. Если же первый вызов был с конкретным значением даты, то получится Index Seek, который будет неэффективно работать для значений с низкой селективностью.
Простой тест:
DBCC FREEPROCCACHE
GO

EXEC    [dbo].[GetTransactionsByShipDate] NULL
GO

declare @shipdate datetime = ge...
читать дальше...
добавлено: 29 окт 15 просмотры: 751, комментарии: 0



Семинар “Оптимизация ASP.NET приложений”

Быстродействие - это Фича. Для веб-приложений и сайтов это важнейшая фича. Быстрые сайты получают более высокие места в поисковой выдаче. Быстрые веб-приложения улучат восприятие пользователями. Масштабируемые приложения требуют меньше ресурсов и более эффективны с экономической точки зрения. Для любого веб-программиста умение делать быстрые и масштабируемые приложения является критически важным.

Но оптимизация веб-приложений — это не один навык, а целый комплекс, который включает клиентскую оптимизацию, оптимизацию работы с данными, оптимизацию архитектуры и инфраструктуры приложений, а также умение проводить нагрузочное тестирование и выявлять слабые места. Для ASP.NET это важно вдвойне, так как много фреймворков и компонент могут скрывать проблему, и докопаться до сути очень непросто. Но это того стоит!

В конце концов если вашим приложением пользуются хотя бы 1000 человек, каждый из которых делает по 10 запросов в день, то сократив время загрузки страницы на 1 секунду вы экономите суммарно почти месяц времени.

Программа семинара:
  1. Введение в оптимизацию ASP.NET приложений
    • Почему нужно заниматься оптимизацией
    • Архитектура ASP.NET приложений
    • Измерение производительности ASP.NET приложений
    • Инструменты для нагрузочного тестирования веб-приложений
    • Основные подходы оптимизации веб-приложений
  2. Оптимизация инфраструктуры
    • Настройка IIS
    • Оптимизация статического контента
  3. Кеширование динамического контента
    • HTTP-кеширование
    • Сервер...
читать дальше...
добавлено: 15 сен 15 просмотры: 937, комментарии: 0



Подборка материалов о серверной оптимизации ASP.NET

В процессе подготовки семинара по оптимизации, который пройдет 30 октября 2014 года (регистрация тут - http://gandjustas.timepad.ru/event/150915/), я собрал ранее опубликованные материалы по серверной оптимизации ASP.NET приложений.
Серия постов о кешировании на хабре:
Оптимизация работы с данными:
Какие темы вам еще будут интересны?
читать дальше...
добавлено: 17 авг 15 просмотры: 917, комментарии: 0



Создание учетной системы в SQL Server

На эту тему я выступал на SQL Server User Group 26 марта 2015 года. Ниже запись доклада:

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

В докладе я рассказывал как реализовать двойную бухгалтерскую запись в SQL Server и как получать баланс за любой диапазон дат за доли секунды на 100 миллионах проводок.

T-SQL скрипты, используемые в презентации, доступны по ссылке http://1drv.ms/1D9PCdN

В докладе не смог рассказать про использование Clustered Columnstore Index для решения задач учетной системы. В первую очередь потому, что они не позволяют ускорить вычисление баланса по всей системе, это работа для индексированных представлений. Но эксперименты показали, что использование CCI на таблице проводок удобно, в том случае если аналитические признаки являются отдельным колонками в таблице проводок и часто делаются запросы, которые выбирают записи по нескольким признакам.

Например если вы делаете складскую систему, то наиболее частые запросы будут – движения товаров за период по поставщикам\клиентам\товарам. Такие запросы прекрасно обрабатываются CCI индексами.

Кроме того объем занимаемых данных CCI индекса будет небольшим, за счет сжатия, в случае множества одинаковых значений в колонках, да еще и обрабатываться будет быстрее.

Если у вас есть интересные истории о создании учетных систем, особенно на других движках БД – делитесь в комментах.

читать дальше...
добавлено: 27 апр 15 просмотры: 1077, комментарии: 0