Pull to refresh
7
0
Анатолий Котелевец @akotelevets

.Net developer; DB Developer; DBA

Send message

RabbitMQ — SQL Server

Reading time 11 min
Views 22K
Неделю или две назад я увидел сообщение на форуме RabbitMQ Users, о том, как наладить отправку сообщений из SQL Server в RabbitMQ. Поскольку мы плотно с этим работаем в Derivco, я оставил там некоторые предложения, а также сказал, что пишу в блоге о том, как это можно сделать. Часть моего сообщения была не совсем верной — по крайней мере, до этого момента (сорри, Бро, был очень занят).

Потрясающая штука, этот ваш SQL Server. С его помощью очень легко поместить информацию в базу данных. Получить данные из базы с помощью запроса столь же просто. А вот получить только что обновленные или вставленные данные уже немного сложнее. Подумайте о событиях в реальном времени; совершена покупка — кого-то нужно уведомить об этом в тот же момент, как только это произошло. Возможно, кто-то скажет, что такие данные должны выталкиваться не из базы данных, а откуда-то еще. Безусловно, так оно и есть, но довольно часто у нас попросту нет выбора.
Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Comments 12

Проект хранилища на MS SQL Server, интеграция с 1С 7.7 и автоматизация разработки в SSDT

Reading time 22 min
Views 8.8K
Время течет и скоро от этой разработки почти ничего не останется, а у меня все никак не находилось времени ее описать.



Речь пойдет о компании федерального уровня с большим числом филиалов и подфилиалов. Но, как обычно, все началось давным-давно с одного маленького магазина. С течением лет шло достаточно быстрое и стихийное развитие, появлялись филиалы, подразделения и прочие офисы, а ИТ-инфраструктуре не уделялось в те времена должного внимания, и это тоже частое явление. Конечно же, везде использовалась 1С77, без задела на какие-либо репликации и масштабирование, поэтому, сами понимаете, в конце пришли к тому, что был порожден спрут-франкенштейн с примотанными изолентой щупальцами — в каждом филиале автономный мутант, который с центральной базой обменивался в «наколеночном» режиме лишь несколькими справочниками, без которых ну вообще никак было нельзя, а остальное автономно. Какое-то время довольствовались копиями (десятки их!) филиальных баз в центральном офисе, но данные в них отставали на несколько дней.

Реальность же требует получать информацию более оперативно и гибко, а еще надо что-то с этим делать. Пересесть с одной учетной системы на другую при таких масштабах — то еще болото. Поэтому было решено сделать хранилище данных (ДХ), в которое стекалась бы информация из разных баз, чтобы впоследствии из этого ХД могли получать данные другие сервисы и аналитическая система в виде кубов, SSRS отчетов и протча.

Забегая вперед скажу, что переход на новую учетную систему почти уже случился и бОльшая часть проекта, описываемого здесь, будет выпилена в ближайшее время за ненадобностью. Жаль, конечно, но ничего не поделаешь.

Далее следует длинная статья, но прежде чем начнете читать, позвольте заметить, что ни в коем случае не выдаю это решение за эталон, однако может кто-то найдет для себя в ней что-то полезное.
Читать дальше →
Total votes 11: ↑9 and ↓2 +7
Comments 6

Почему большие БД работают не как хочется, или про несбыточные мечты SQL-запросов

Reading time 11 min
Views 25K

image


В команде эксплуатации подумали, что наш опыт с Microsoft SQL в нагруженной среде больше нельзя скрывать, и потому родилась эта статья. В ней я расскажу о нюансах работы с этой СУБД из практики.


Microsoft SQL Server давно нашел свое место в семействе продуктов Яндекс.Денег и успешно решает задачу сбора разрозненной информации обо всех операциях из множества отдельных сервисов. Без такой сборки воедино нельзя было бы отследить платеж, собрать статистику или решить проблему.


Все сказанное далее будет полезно администраторам крупных БД – тем, кто заботится о быстрой и точной работе аналитики Microsoft SQL Server 2012-2014.


Если информация окажется вам полезной и интересной — обязательно дайте знать в комментариях, чтобы автор не расслаблялся.

Итак, чем занимается MS SQL в Яндекс.Деньгах
Total votes 21: ↑21 and ↓0 +21
Comments 24

MassTransit. Сервисная шина для обмена сообщениями на основе сервера очередей RabbitMQ (MSMQ) для .Net

Reading time 8 min
Views 45K
MassTransit
Впервые я услышал о библиотеке MassTransit (MT) около года назад от экс-коллеги, зашедшего в наш офис для обмена опытом. Компания, в которую он устроился, использовала MT для уменьшения связности между модулями разрабатываемого ими сервиса и, поскольку высокая связность начала превращаться в проблему и для нас, чужой опыт оказался нам очень кстати. Помимо уменьшения связности путем перехода на событийную модель взаимодействия между модулями, MT пригодился нам и для распределения ресурсоемких задач между несколькими процессами.

Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 9

Проектирование импульсного источника питания с активным ККМ. Эпизод I

Reading time 28 min
Views 183K

Предисловие


В своей предыдущей статье я говорил, что продолжу рассказ о работе с датчиками тока на эффекте Холла. С того момента прошло не мало времени, выход продолжения затянулся, да и писать «скучную теорию» я не любитель, поэтому ждал практической задачи.

Еще одной причиной отсутствия статей была моя работа в одной «современной успешной IT-hardware-компании», сейчас наконец-то я ее покинул и окончательно пересел на фриланс, так что время для статьи появилось))

Недавно ко мне обратился мой старый наставник и просто очень хороший человек. Естественно я не мог отказать в помощи, а оказалось все достаточно просто — меня попросили сделать блок питания для КВ трансивера FT-450, который будет более стабильный в работе, особенно при пониженном входном напряжении, чем уже имеющийся Mean Well. Прошу заметить, я не говорю о том, что Mean Well плохая фирма, просто в данном случае нагрузка достаточно специфическая, а так продукция у них вполне себе хорошая.

Диагноз примерно такой:


— Заявлен выходной ток в 40А, на деле при потреблением в 30-35А (на передаче) блок уходит в защиту;
— Наблюдается сильный нагрев при длительной нагрузке;
— Совсем становится плохо, когда использует его на даче, где напряжение в сети 160-180В;
— Напряжение максимальное 13,2-13,4В, а хотелось бы 13,8-14В с возможностью подкрутить +-20%.

Особенностью данной статьи будет то, что проект продвигается вместе с ней. Я за него только засел и поэтому смогу рассказать обо всех этапах разработки: от ТЗ до готового прототипа. В таком формате статей с наскоку на гике я не нашел, обычно люди пишут уже проделав всю работу и забыв половину мелочей, которые часто несут в себе главный интерес. Так же эту статью я хочу написать доступным для новичков языком, поэтому местным гуру стоит чуточку проще относиться к «неакадемичности» моего слога.
Читать дальше →
Total votes 52: ↑52 and ↓0 +52
Comments 289

Сделай сам веб-сервис с асинхронными очередями и параллельным исполнением

Reading time 5 min
Views 28K

rq Каждый должен делать свою работу качественно и в срок. Допустим, вам нужно сделать веб-сервис классификации картинок на базе обученной нейронной сети с помощью библиотеки caffe. В наши дни качество — это асинхронные неблокирующие вызовы, возможность параллельного исполнения нескольких заданий при наличии свободных процессорных ядер, мониторинг очередей заданий… Библиотека RQ позволяет реализовать все это в сжатые сроки без изучения тонны документации.


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

Читать дальше →
Total votes 25: ↑22 and ↓3 +19
Comments 20

SQL и XPath против РосРеестра

Reading time 3 min
Views 25K
Уже несколько лет РосРеестр выдаёт данные в формате XML, а с недавних пор – только в XML. И это замечательно! Ведь это удобный, человек-читаемый и машино-читаемый формат, для работы с которым существует огромное количество инструментов. Но Кадастровым Инженерам почему то, подавай данные в таких древних форматах как .tab и .shp – ведь только с этими форматами они умеют работать в своих ГИС. Для решения этой проблемы подключилась куча корыстных и бескорыстных людей – и в результате КИ получили кучу конвертеров в свои любимые программы. Но есть маленькая проблема – РосРеестр имеет привычку менять xml-схемы, молча и без предупреждения. В результате работа КИ парализуется, ведь они не способны работать с XML!
Читать дальше →
Total votes 33: ↑32 and ↓1 +31
Comments 11

Delayed Durability или история о том как получилось ускорить выполнение автотестов с 11 до 2,5 минут

Reading time 10 min
Views 13K


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

Стек технологий был изначально выбран мелкомягкий, а в качестве хранилища данных использовался SQL Server 2014 Express. Одним из первых тасков, которые мне поручили — это поисследовать возможность ускорения автотестов.
Подробнее
Total votes 16: ↑16 and ↓0 +16
Comments 10

24 Hours of PASS 2016

Reading time 6 min
Views 6.5K
Март выдался на удивление богатым на события. Не успел выйти SQL Server 2016 RC0, как уже доступен для загрузки RC1. Нововведений в последнем не сильно много, поэтому интересного обзора увы не получится.

Тем не менее, чтобы с пользой скоротать время, в ожидании релиза SQL Server 2016, предлагаю ознакомиться с докладами 24 Hours of PASS, которая прошла 16-17 марта.

Для тех, кто слышит про 24 Hours of PASS впервые… это ежегодная онлайн-конференция, посвященная SQL Server и длящаяся 24 часа. Докладчики из разных частей света сменяют друг друга и рассказывают много интересного про SQL Server. Существует несколько версий 24HOP. Русскоязычная версия данного мероприятия уже не первый год проводится усилиями Андрея Коршикова.

Чтобы не томить в ожидании, список видео-докладов, которые доступны под катом:

  • SQL Server Transaction log. Внутреннее устройство и решение проблем (Андрей Завадский)
  • XML, XQuery и трюки с производительностью (Сергей Сыроватченко)
  • Azure ML. Определение наиболее эффективного классификационного алгоритма для выбранного источника данных (Константин Хомяков)
  • SQL Server In-Memory OLTP: Нестандартные сценарии использования (Дмитрий Короткевич)
  • SQL Server Extended Properties как простейший способ документирования баз данных (Вячеслав Миругин)
  • SQL Server 2016 Reporting Services. Быстрый старт (Андрей Коршиков)
  • Поддержка больших БД на MS SQL Server (Кирилл Панов)
  • SQL Server 2016. Temporal Tables (Алексей Князев)
  • 1+1=10. Использование битовых масок в базах данных (Елена Смоляк)
  • SSAS Tabular 2016 (Евгений Полоничко)
  • Внутри оптимизатора запросов: Query Store (в 2-х частях) (Дмитрий Пилюгин)
  • PowerBI: Визуализация данных в реальном времени (Сергей Лунякин)
  • Анализ производительности Windows приложений на примере SQL Server с использованием стандартного функционала операционной системы (Михаил Комаров)
Подробнее
Total votes 9: ↑8 and ↓1 +7
Comments 2

История про хитрожо… индуса, encrypted procedures, DAC и «режим Бога»

Reading time 7 min
Views 43K
На той неделе пришлось разбираться в логике работы одного бесплатного тула. Почти детективная история вышла с ее автором, который впоследствии оказался индусом канадского происхождения проживающим в Южной Америке.

Конечно же, практическая ценность была не в биографии автора, а в запросах, которые отправлялись приложением на сервер.

Установил. Запустил. Стал в стоечку и начал собирать профайлером все, чем приложение должно было «порадовать» сервер. Смею разочаровать – ничего радостного сервер в ближайшие два часа не увидел. В основном встречались разного рода перлы в запросах, которые явно не претендовали на комплименты:

SELECT
    LogTruncations = (
        SELECT TOP 1 SUM(cntr_value)
        FROM ##tbl_cnt
        WHERE counter_name = 'Log Truncations'
    ),
    LogShrinks = (
        SELECT TOP 1 SUM(cntr_value)
        FROM ##tbl_cnt
        WHERE counter_name = 'Log Shrinks'
    ),
    LogGrowths = (
        SELECT TOP 1 SUM(cntr_value)
        FROM ##tbl_cnt
        WHERE counter_name = 'Log Growths'
    ),
    ...

Поскольку их можно написать на порядок проще и сократить логические чтения из таблицы:

SELECT
    LogTruncations = SUM(CASE WHEN counter_name = 'Log Truncations' THEN cntr_value END),
    LogShrinks = SUM(CASE WHEN counter_name = 'Log Shrinks' THEN cntr_value END),
    LogGrowths = SUM(CASE WHEN counter_name = 'Log Growths' THEN cntr_value END),
    ...
FROM ##tbl_cnt

На этом можно было бы и закончить… Но практически под конец я увидел, что приложение вызывает пользовательские хранимые процедуры из tempdb. Поймал себя на мысли: «Когда приложение успело их создать… и главное зачем?»
Подробнее
Total votes 44: ↑32 and ↓12 +20
Comments 16

Я знал, как валидировать email-адрес. Пока не прочитал RFC

Reading time 5 min
Views 128K
От переводчика: прочитав статью, начал было отвечать в комментариях, но решил, что текст, на которую я собирался ссылаться, достоин отдельной публикации. Встречайте!
Если вы знаете, как валидировать email-адрес, поднимите руку. Те из вас, кто поднял руку — опустите её немедленно, пока вас кто-нибудь не увидел: это достаточно глупо — сидеть в одиночестве за клавиатурой с поднятой рукой; я говорил в переносном смысле.

До вчерашнего дня я бы тоже поднял руку (в переносном смысле). Мне нужно было проверить валидность email-адреса на сервере. Я это уже делал несколько сот тысяч раз (не шучу — я считал) при помощи классного регулярного выражения из моей личной библиотеки.

В этот раз меня почему-то потянуло ещё раз осмыслить мои предположения. Я никогда не читал (и даже не пролистывал) RFC по email-адресам. Я попросту основывал мою реализацию на основе того, что я подразумевал под корректным email-адресом. Ну, вы в курсе, что обычно говорят о том, кто подразумевает. [прим. перев. Автор имеет в виду игру слов: «when you assume, you make an ass out of you and me» — «когда вы (что-то) подразумеваете, вы делаете /./удака из себя и из меня»]

И обнаружил кое-что занимательное: почти все регулярные выражения, представлены в интернете как «проверяющие корректность email-адреса», излишне строги.
Читать дальше →
Total votes 80: ↑66 and ↓14 +52
Comments 99

Что быстрее: 0 или NULL?

Reading time 4 min
Views 31K
Есть три агрегатные функции, которые чаще всего используются на практике: COUNT, SUM и AVG.

И если первая уже обсуждалась ранее, то с остальными есть интересные нюансы с производительностью. Но давайте обо всем по порядку…

При использовании агрегатных функций на плане выполнения, в зависимости от входного потока, может встречаться два оператора: Stream Aggregate и Hash Match.

Для выполнения первого может требоваться предварительно отсортированный входной набор значений и при этом Stream Aggregate не блокирует выполнение последующих за ним операторов.

В свою очередь, Hash Match является блокирующим оператором (за редким исключением) и не требует сортировки входного потока. Для работы Hash Match используется хеш-таблица, которая создается в памяти и в случае неправильной оценки ожидаемого количества строк, оператор может сливать результаты в tempdb.
Подробнее
Total votes 27: ↑23 and ↓4 +19
Comments 9

История про msdb размером в 42 Гб

Reading time 5 min
Views 55K
Недавно выдалась минутка посмотреть почему старый тестовый сервер безбожно тормозил… К нему я не имел никакого отношения, но меня одолевал спортивный интерес разобраться, что с ним не так.

Первым делом открыл Resource Monitor и взглянул на общую нагрузку. Процесс sqlserv.exe нагружал ЦП под 100% и формировал большую дисковую очередь, которая была за 300… при том, что значение выше единицы уже считается проблемным.

При анализе дисковой активности заметил непрерывные IO операции в msdb:

D:\SQL_2012\SYSTEM\MSDBData.mdf
D:\SQL_2012\SYSTEM\MSDBLog.ldf

Посмотрел на размер msdb:

SELECT name, size = size * 8. / 1024, space_used = FILEPROPERTY(name, 'SpaceUsed') * 8. / 1024
FROM sys.database_files

и включил режим «рука-лицо»:

name         size           space_used
------------ -------------- ---------------
MSDBData     42626.000000   42410.374395
MSDBLog      459.125000     6.859375

Файл данных занимал 42 Гб… Взяв небольшую паузу я начал разбираться в чем причина такого нездорового объема msdb и как побороть проблемы с производительностью сервера.
Подробнее
Total votes 49: ↑48 and ↓1 +47
Comments 28

Обзор шины SPI и разработка драйвера ведомого SPI устройства для embedded Linux (Часть первая, обзорная)

Reading time 13 min
Views 168K
В этой статье я хочу провести краткий обзор шины SPI (интерфейса, широко распространённого во встраиваемой технике, используемого для подключения различных устройств) и попытаюсь описать процесс создания драйвера протокольного уровня SPI устройства для Linux. Данный документ не претендует на роль полного руководства, а скорее преследует цель указать нужное направление. Так как статья не вошла в размер одного топика, мне пришлось разбить её на две части.

0. Вместо введения


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

Для кого эта статья?
В первую очередь, для новичков, каковым являюсь и я. На форумах по embedded Linux очень часто можно встретить вопрос: «А как на этой плате работать с SPI?». Именно на него я и попытаюсь дать ответ. В качестве примера, я приведу код написанный для работы с моим тестовым SPI устройством.
Читать дальше →
Total votes 52: ↑51 and ↓1 +50
Comments 13

XML, XQuery и тройная печаль с производительностью

Reading time 6 min
Views 25K
Поездка в Днепропетровск на встречу Dnepr SQL User Group, хронический недосып последние пару дней, но приятный бонус по приезду в Харьков… Зимняя погодка, которая мотивирует на написание чего-то интересного…

Уже давно в планах было рассказать про «подводные камни» при работе с XML и XQuery, которые могут приводить к каверзным проблемам с производительностью.

Для тех кто часто использует SQL Server, XQuery и любит парсить значения из XML рекомендуется ознакомиться с нижеследующим материалом…
Подробнее
Total votes 12: ↑11 and ↓1 +10
Comments 0

TOP (10) бесплатных плагинов для SSMS

Reading time 3 min
Views 50K


До того, как начать работать с SQL Server я толком то и баз данных в лицо не видел… Помню, что мне установили SQL Server Management Studio 2005 и дали задание активно «крутить педали». По прошествии пары недель, как бы так сказать, моя производительность по написанию запросов была явно в районе плинтуса…

Более опытный коллега с недоумением на меня посмотрел и посоветовал поставить пару плагинов для SSMS… после этого работать стало явно веселее.

В данном посте я хочу поделиться моим топ списком бесплатных плагинов для SSMS, которыми чаще всего пользовался.
Подробнее
Total votes 24: ↑20 and ↓4 +16
Comments 12

Типичные взаимные блокировки в MS SQL и способы борьбы с ними

Reading time 11 min
Views 103K
Чаще всего deadlock описывают примерно следующим образом:
Процесс 1 блокирует ресурс А.
Процесс 2 блокирует ресурс Б.
Процесс 1 пытается получить доступ к ресурсу Б.
Процесс 2 пытается получить доступ к ресурсу А.
В итоге один из процессов должен быть прерван, чтобы другой мог продолжить выполнение.
Но это простейший вариант взаимной блокировки, в реальности приходится сталкиваться с более сложными случаями. В этой статье мы расскажем с какими взаимными блокировками в MS SQL нам приходилось встречаться и как мы с ними боремся.


Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Comments 18

Статистика ожиданий SQL Server'а или пожалуйста, скажите мне, где болит

Reading time 13 min
Views 115K
Сколько раз вы испытывали проблемы с производительностью SQL Server'а и решали, куда именно смотреть?

Одна из самых редко используемых методологий устранения проблем с производительностью SQL Server'а называется «Ожидания и очереди» (также известная как «статистика ожиданий»). Основная предпосылка методологии состоит в том, что SQL Server постоянно отслеживает, какие потоки выполнения должны ждать. Вы можете запросить у SQL Server'а эту информацию для того чтобы сократить перечень возможных причин проблем с производительностью. «Ожидания» — это то, что отслеживает SQL Server. «Очереди» — это ресурсы, доступ к которым ожидают потоки. Система обычно фиксирует огромное количество ожиданий, и все они означают ожидание доступа к различным ресурсам. Для примера, ожидание PAGEIOLATCH_EX означает, что поток ожидает чтения страницы данных с диска в буферный пул. Ожидание LCK_M_X означает, что поток ожидает возможности наложить эксклюзивную блокировку на что-то.

Отличная новость состоит в том, что SQL Server знает, в чем именно заключаются проблемы с производительностью, и все что вам нужно — это спросить у него… и потом правильно интерпретировать то, что он скажет, что может быть немного сложнее.
Читать дальше →
Total votes 28: ↑25 and ↓3 +22
Comments 13

Information

Rating
Does not participate
Location
Таганрог, Ростовская обл., Россия
Registered
Activity