Рубрика «Администрирование баз данных» - 49

AUTO_CLOSE и наказание калёным железом - 1Если бы SQL Server существовал во времена Инквизиции, то за включение некоторых опций на продакшен серверах нужно было бы наказывать калёным железом. Но если отбросить лирику, то далее на рассмотрим почему не нужно включать AUTO_CLOSE и к чему может привести использование этой опции.

Собственно, как и любая интересная истории из жизни, все начиналось с рутиной задачи.

На днях пришлось заглянуть в Error Log на тестовом сервере. На второй минуте ожидания, SSMS изрядно поплохело от обилия сообщений, которые хранил журнал, и я решил посмотреть сколько же весят логи с помощью xp_enumerrorlogs:

DECLARE @t TABLE (lod_id INT PRIMARY KEY, last_log SMALLDATETIME, size INT)
INSERT INTO @t
EXEC sys.xp_enumerrorlogs

SELECT lod_id, last_log, size_mb = size / 1048576.
FROM @t

lod_id   last_log              size_mb
-------- --------------------- ---------------
0        2016-01-05 08:46:00   567.05288505
1        2015-12-31 12:53:00   1370.39249420
2        2015-12-18 11:32:00   768.46394729
3        2015-12-02 13:54:00   220.20050621
4        2015-12-02 13:16:00   24.04152870
5        2015-11-16 13:37:00   80.07946205
6        2015-10-22 12:13:00   109.33527946

Читать полностью »

Мы рады поделиться с вами очередной статьей из серии статей о облачных сервисах Microsoft Azure. В этот раз Андрей Антюфеев — руководитель программ Microsoft из команды SQL Server и Azure SQL Database, продолжит свой рассказ о работе с индексами в облачной БД Azure SQL Database. — Владимир Юнев

Всем привет, эта заметка будет полезна всем, кто пользуется Azure SQL Database.

Эффективное управление индексами в Azure SQL Database с помощью Index Advisor - 1

В прошлой раз, мы обозревали первую версию Index Advisor. C тех пор помощник успел дорасти до GA, повысив стабильность, и обзавестись новым возможностями:

  • возможность автоматически применять рекомендации помощника
  • новые рекомендации (Drop Index)
  • визуализация нагрузки после создания индекса
  • другие улучшения

Забудьте об управлении индексами

Процесс создания новых индексов происходит в несколько этапов:
Читать полностью »

Немного теории

ACARS (Aircraft Communications Addressing and Reporting System) — цифровая система связи, применяемая в авиации для передачи коротких, относительно простых сообщений между воздушным судном и наземными станциями, либо через прямую радиосвязь, либо через спутниковые системы.
AIRCOM – Сервер (шлюз) обмена сообщениями между различными сетями. Производитель — компания SITA. Связывает бортовое оборудование ACARS через сети ARINC с системой планирования полетов LIDO OC (Jeppesen Jet Planner или др.), электронной почтой, SITAtex, телефонией, файловым обменом и другими необходимыми информационными системами, используемые в авиакомпании.

Принцип работы AIRCOM Server

Информационная система SITA AIRCOM Server реализована на MS SQL и используется для обеспечения воздушных судов авиакомпании данными о маршруте, ветру на эшелонах, погоде и для обмена сообщениями «экипаж — ЦУП — экипаж». AIRCOM Server настроен на бортовое оборудование ACARC и функционирует совместно с ним. AIRCOM Server является критически важной информационной системой для обеспечения полетов.

Для корректной работы AIRCOM необходимо, чтобы корректные данные о предстоящем (или текущем) полете были, и в БД AIRCOM, и в памяти FMS самолета:

— номер рейса;
— бортовой номер воздушного судна (ВС);
— аэродромы вылета и назначения;
— время вылета и пр.

Если информация в памяти FMS, в БД AIRCOM и в системе планирования полетов не будет совпадать, некоторые запросы пилотов не будут обрабатываться, и экипаж не получит, например, обновленные данные по ветрам на эшелонах по маршруту полета.

Данные о предстоящем (или текущем) полете в AIRCOM и в память FMS ВС должны попасть из информационной системы авиакомпании (Netline, Meridian, Operations или иной), в которой формируется и корректируется расписание полетов.

Это может быть выполнено двумя способами:

1. Ручная инициализация экипажем

Пилот вручную заполняет все данные по предстоящему рейсу, используя пульт ACARS и рабочий план полета (OFP), после чего выполняет инициализацию, нажав кнопку «INIT». При этом данные по рейсу отправляются в AIRCOM и записываются в его БД.

Минусы данного способа:

— пилот может ошибиться при вводе данных.
— необходимо подождать некоторое время (~ 15 минут) после включения питания бортовых систем ВС и только потом вводить данные по рейсу и выполнять инициализацию.

2. Автоматизированная инициализация

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

AIRCOM, получив INIT-запрос с ВС, использует предназначенный для этого типа сообщений шаблон (downlink template) и модель (Model), получает из сторонней системы текущие действующие данные о расписании полетов для данного ВС (номер рейса, аэродром вылета и назначения, дата и время вылета), записывает эти данные в свою БД и отправляет эту информацию через ACARS на самолет. Эти данные записываются в память бортовой системы и используются для последующих запросов с ВС.

Была сформирована задача — реализовать информационный обмен между информационной системой с расписанием полетов ВС и AIRCOM. В качестве информационной системы с расписанием полетов использовалась NetLine/Sched производства Lufthansa Systems GmbH.

ИС AIRCOM имеет штатную функцию — использование дополнительно сторонней БД и выполнять с ней информационный обмен с помощью двух хранимых процедур: одна — на запись, вторая — на чтение. Параметры подключение к этой БД указываются в файле настроек ИС AIRCOM — AircomSrv.ini. Дополнительно на сервере AIRCOM должна быть установлена и запущена (когда все будет настроено) дополнительная служба — AS Database Connector.

AS Database Connector поддерживает подключение только к базе данных типа «MS SQL Server» (другие, в том числе Oracle, якобы, будет поддерживать в каких-то последующих версиях). Database Connector можно подключить только к одной базе данных и использовать только одну пару хранимых процедур (на чтение и на запись) для получения и отправки данных.

Реализация

Читать полностью »

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

Java и время: часть первая - 1

Статья не претендует на глубину и/или академичность. Это попытка систематизировать опыт и обратить внимание разработчиков на не очень очевидные аспекты.

Читать полностью »

Вышел PostgreSQL 9.5: UPSERT, RLS и Big Data - 1

Сегодня PostgreSQL Global Development Group объявила о выходе PostgreSQL 9.5. Среди прочих нововведений можно отметить функцию UPSERT, безопасность на уровне строк (Row Level Security, RLS) и несколько функций работы с Big Data. По мнению разработчиков, новые функции делают PostgreSQL лучшим вариантом среди всех возможных для стартапов, больших корпораций, правительственных организаций.

Более подробно о новых функциях — под катом.
Читать полностью »

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

Графовые базы данных: святой Грааль для разработчиков? - 1


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

В предыдущих статьях (
Google Cloud Endpoints на Java: Руководство. ч. 1
Google Cloud Endpoints на Java: Руководство. ч. 2 (Frontend)
Google Cloud Endpoints на Java: Руководство. ч. 3 )
мы разбирали создание API на Google Cloud Endpoints и фронтенда к нему на AngularJS.

Однако руководство по созданию API было бы неполным без работы с базой данных.

В этой статье мы рассмотрим фреймворк Objectify для работы с встроенной в GAE базой данных App Engine Datastore.
Читать полностью »

Приглашаем на Tarantool meetup 28 января - 1

28 января 2016 года в московском офисе Mail.Ru Group пройдёт вторая встреча Tarantool meetup. Если кто-то ещё не знает: Tarantool — это NoSQL In-Memory СУБД с открытым исходным кодом, создающаяся для обеспечения максимально возможной производительности. На втором митапе мы рассмотрим главные преимущества и особенности Tarantool, расскажем о своём опыте использования этого продукта и планах на будущее. В первую очередь эта встреча будет интересна разработчикам, Unix-сисадминам и прочим специалистам, так или иначе работающим с базами данных. Программу встречи смотрите под катом.
Читать полностью »

Как сэкономить миллион долларов с помощью Tarantool - 1

Для чего используются базы данных, ведь есть старые добрые файлы? Чем они хуже базы данных или чем база данных лучше файлов? БД — более структурированное хранилище. Она позволяет делать транзакции, запросы и так далее. Самый простой случай: есть сервер с базой данных и несколько приложений, которые делают запросы к серверу. База данных отвечает, меняет что-то внутри себя, и всё хорошо ровно до того момента, пока нагрузка на неё не вырастает настолько, что база данных перестаёт справляться.

Если допустить, что это только нагрузка на чтение, то проблема решается репликацией. Вы можете ставить к базе данных столько реплик, сколько нужно, и все чтения пускать на реплику, а все записи — на мастер. Если же на базу данных идёт нагрузка на запись, то репликация эту проблему не решает, ведь запись должна осуществляться на все реплики. Таким образом, сколько бы вы их ни ставили, вы не уменьшите нагрузку на запись из расчёта на одну машину. Тут на помощь приходит шардинг.

Если база не держит нагрузку на запись, то шарды можно добавлять до бесконечности. Шард устроен сложнее, чем реплика, потому что нужно как-то распределить данные по таблицам или внутри таблицы, по хэшу, по range — есть множество разных вариантов. Таким образом, добавляя реплики и шарды, вы можете делить любую нагрузку на базу данных. Казалось бы, больше желать нечего, о чём дальше говорить?
Читать полностью »

История про msdb размером в 42 Гб - 1 Недавно выдалась минутка посмотреть почему старый тестовый сервер безбожно тормозил… К нему я не имел никакого отношения, но меня одолевал спортивный интерес разобраться, что с ним не так.

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

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

D:SQL_2012SYSTEMMSDBData.mdf
D:SQL_2012SYSTEMMSDBLog.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 и как побороть проблемы с производительностью сервера.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js