Gandjustas' blog

Фильтр по тегу: sql


Оптимизация высоконагруженных 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 просмотры: 2238, комментарии: 2



Выступаю на Russian SQL Server User Group в Москве 10 сентября

Я всегда много писал о SharePoint, но это далеко не единственная область, в которой я разбираюсь.

Сергей Олонцев, MVP по SQL Server, организует встречи SQL Server User Group в Москве. Ближайшая встреча будет 10 сентября и я буду выступать на ней с докладом: Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server, с помощью LINQ.

Краткое описание доклада:
Вы разрабатываете веб-приложения и используете хранимые процедуры? Вы пишите SELECT … WITH(NOLOCK)? Вы считаете, что ORMы снижают быстродействие приложений? Тогда этот доклад для вас!
В докладе будут развенчаны популярные мифы о применении библиотек Object-Relational Mapping (ORM) в ASP.NET при работе с Microsoft SQL Server. Также будут рассмотрены конкретные методики увеличения быстродействия работы с данными в веб-приложениях.
Встреча пройдет в Microsoft Technology Center, м. Белорусская, ул. Лесная д. 9 10 сентября с 17:00 до 19:00.

Ссылка на регистрацию: http://www.eventbrite.com/e/russian-sql-server-user-group-10-2014-tickets-12806290961

 
читать дальше...
добавлено: 09 ноя 15 просмотры: 1161, комментарии: 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 просмотры: 1248, комментарии: 0



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

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

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

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

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



Тренинг по мониторингу и исправлению проблем SharePoint

SharePoint это очень большая система, наверное, самый крупный продукт Microsoft. И если что-то работает не так, как должно работать, то выяснить причину такого поведения бывает крайне сложно.

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

Поэтому я решил провести тренинг по использованию средств мониторинга и траблшутинга (исправления проблем) SharePoint. Этот тренинг будет полезен как администраторам, обслуживающим фермы, так и разработчикам, для отладки решений.

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

Программа тренинга:
  1. Типичные проблемы развертывания SharePoint
  2. Сбор данных о конфигурации и установленных решениях на ферме
  3. Работа с Health Analyzer
  4. Анализ логов SharePoint
  5. Анализ трафика
  6. Анализ скорости работы интерфейса в Developer Dashboard
  7. Выявление узких мест с помощью счетчиков производительности
  8. Анализ фермы с помощью WSS_Logging
Тренинг пройдет 30 июня, для максимального результата вам понадобится доступ к реальной ферме, на которой вы сможете работать.

Стоимость тренинга, в зависимости от того, когда вы купите билет:
  • С ...
читать дальше...
добавлено: 24 июн 15 просмотры: 1125, комментарии: 0



Тренинг “Развертывание ферм SharePoint”

Если вам доводилось работать с SharePoint как разработчику, администратору или архитектору, то вы определенно сталкивались с проблемой развёртывания новых ферм. В SharePoint 2013 уже невозможно просто запустить мастер настройки чтобы получить работающую ферму. А развертывание фермы по всем по всем best practices уже требует джедайских навыков.

Посетив мой тренинг по развертыванию фермы SharePoint вы научитесь быстро и надежно развертывать как тестовые\разработческие среды, так и продуктивные.

Когда появился SharePoint 2013 мне потребовалось около 3 дней на развертывание всего функционала, я прошелся практически по всем граблям, которые присутствовали в релиз-версии. После этого я много раз занимался развертыванием продуктивных ферм и научился ставить SharePoint за несколько часов. За прошлый год только на установках SharePoint я заработал значительную сумму денег и привлек таким образом несколько клиентов. Хотите знать как - секрет ниже.

Ключевой компонент успеха - проект autospinstaller (http://autospinstaller.codeplex.com/), он позволяет задавать нужную конфигурацию фермы и проводить развертывание в повторяемом виде. Но кроме самого SharePoint еще требуется настройка DNS, развертывание workflow manager и Office Web Apps, а также тюнинг SQL Server. Для этого, к сожалению, готовых инструментов нет. Но на тренинге вы получите необходимые знания, для того, чтобы обойти возможные грабли.

Тренинг пройдет 29 января 2015 года и займет всего полдня. На тренинге вы будете своими ...

читать дальше...
добавлено: 16 май 15 просмотры: 1546, комментарии: 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 просмотры: 1537, комментарии: 0