Pro SQL Server Internals. Глава 21. Оптимистические уровни изоляции.

Pro SQL Server Internals

Pro SQL Server Internals на русском. Вольный перевод книги Дмитрия Короткевича «Pro SQL Server Internals» (2014).

Приложение к книге с примерами можно скачать здесь.

Глава 21. Оптимистические уровни изоляции

Оптимистические уровни изоляции транзакций были введены в SQL Server 2005 как новый способ борьбы с проблемами блокировок и согласованности данных. В отличие от пессимистических уровней изоляции, при использовании оптимистических уровней изоляции запросы не могут считать данные, которые были изменены другими транзакциями, но еще не были зафиксированы (читаются «старые» данные). При этом не происходит конфликта совмещаемых (S) и монопольных (X) блокировок. Читать далее

Pro SQL Server Internals. Глава 17. Типы блокировок.

Pro SQL Server Internals

Pro SQL Server Internals на русском. Вольный перевод книги Дмитрия Короткевича «Pro SQL Server Internals» (2014).

Приложение к книге с примерами можно скачать здесь.

Глава 17. Типы блокировок

В SQL Server существует более 20 типов блокировок. Для начала мы рассмотрим основные из них, чтобы понять когда и для чего SQL Server использует их.

Когда происходит добавление, обновление или удаление строк, то SQL Server устанавливает монопольную блокировку (X) на строку и удерживает ее до окончания транзакции. Как можно понять из названия, монопольная (exclusive) — означает, что только одна сессия может установить эту блокировку в один момент времени. Эта блокировка защищает объект (например, строку) от изменения другими сессиями. Важный момент — монопольные блокировки (X) не снимаются до окончания транзакции независимо от уровня изоляции. Чем дольше длится транзакция, тем дольше сохраняются монопольные блокировки (X).

Блокировки на уровне строк улучшают согласованность данных, но в то же время эти блокировки плохо сказываются на всей системе в целом. Давайте подумаем, в каких случаях может потребоваться монопольный доступ к таблице? Например, когда мы хотим изменить метаданные таблицы или создать новый индекс. Если у нас установлены блокировки только на уровне строк, тогда каждая сессия будет сканировать таблицу в поисках установленных блокировок для каждой строки, а также устанавливать свои блокировки, чтобы предотвратить изменения уже просканированных строк. Как вы уже поняли, это было бы неэффективно с точки зрения операций ввода-вывода и памяти, особенно на больших таблицах. Для этого в SQL Server введено такое понятие, как блокировка с намерением (I*). SQL Server использует их, чтобы показать, что есть блокировки на более низком уровне. Рассмотрим их.

Читать далее

Двоичное дерево, двоичное дерево поиска, двоичная куча, B-дерево.

tree

В большинстве реляционных СУБД в качестве структуры данных для индексов (та или иная их реализация) используются именно деревья. И не просто деревья, а сбалансированные деревья поиска. И чтобы знать почему та или иная операция с базой данных не работает так, как мы предполагаем, а значительно дольше, следует понимать как работают индексы. Не случайно в сборнике задач «1С:Профессионал по технологическим вопросам» (раздел 7) встречаются вопросы про двоичные и B-деревья. В этой статье как раз о них.

Сами по себе деревья бесполезны, если мы не можем выполнять с ними определенные операции. К таким операциям обычно относят: поиск элемента, поиск минимального (максимального) элемента, вставка, удаление. В разрезе этих операций мы и рассмотрим каждое из 4 деревьев отдельно. Каждое дерево имеет свои особенности, связанные как правило с организацией хранения данных, но при этом они все связаны между собой:

  • Двоичное дерево поиска и двоичная куча — это частный случай обычного двоичного дерева;
  • B-дерево — это разновидность дерева поиска. Как правило не является двоичным деревом.

Читать далее

События TLOCK, TTIMEOUT, TDEADLOCK технологического журнала

Статья актуальна для платформы 8.3.7.

Для отслеживания событий менеджера управляемых блокировок необходимо в технологическом журнале настроить фильтр по трем событиям: TLOCK, TTIMEOUT  и TDEADLOCK. Пример файла технологического журнала:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\TECH_LOGS" history="8">
  <event>
      <eq property="Name" value="TLOCK"/>
      <eq property="p:processName" value="basename"/>
  </event>
  <event>
      <eq property="Name" value="TTIMEOUT"/>
      <eq property="p:processName" value="basename"/>
  </event>
  <event>
      <eq property="Name" value="TDEADLOCK"/>
      <eq property="p:processName" value="basename"/>
  </event>
   <property name="all"/>
</log>
</config>

В файле для каждого свойства уже указан отбор по информационной базе — свойство «p:processName».

Читать далее

Как посмотреть какие данные заблокированы в СУБД SQL Server

Статья актуальна для MS SQL Server 2012.

Смотрим блокировки

Иногда требуется посмотреть какие объекты и данные заблокированы и какие блокировки на этих объектах стоят (речь идет только о транзакционных блокировках). В SQL Server для этих целей существует динамическое представление sys.dm_tran_locks. Оно возвращает сведения об активных в данный момент в SQL Server ресурсах диспетчера блокировок.

Читать далее

Моделирование взаимоблокировок в 1С

Что и как будем моделировать

Статья актуальна для версии платформы 8.3.6.2332. СУБД использовалась MS SQL 2012, сервер 1С установлен на ОС Windows Server 2012.

Моделировать будем два случая взаимоблокировок, которые могут возникнуть:

  • Захват ресурсов в разном порядке (X1 -> X2, X2-> X1);
  • Повышение уровня блокировки ресурса (S1 -> X1, S1-> X1).

Самый простой способ смоделировать взаимоблокировки на уровне СУБД это использовать автоматический режим управления блокировкой данных. Потому что в этом случае:

  1. Не используется менеджер управляемых блокировок платформы и взаимоблокировки на уровне платформы возникать не будут, а только на уровне СУБД;
  2. При выполнении запроса в транзакции накладываются блокировки, которые сохраняются до окончания транзакции. Они необходимы чтобы смоделировать взаимоблокировку при повышении уровня блокировки ресурса.

Но даже в этом случае не гарантируется 100% возникновение взаимоблокировки, т.к. мы до конца не знаем, что именно и как заблокируется системой.

Читать далее

«1С:Профессионал» по технологическим вопросам (Раздел 14)

Стандарты разработки

Вопрос 14.1
В общем случае, при объединении в запросе результатов нескольких запросов следует использовать конструкцию:

1. «ОБЪЕДИНИТЬ ВСЕ».
2. «ОБЪЕДИНИТЬ».

Читать далее

«1С:Профессионал» по технологическим вопросам (Раздел 13)

Методики расследования проблем параллельной работы

Вопрос 13.1
Разделение итогов регистров позволяет повысить параллельность операций:

1. записи
2. чтения
3. проверки итогов
4. верны ответы 1 и 2.

Читать далее

«1С:Профессионал» по технологическим вопросам (Раздел 12)

Методики расследования проблем производительности

Вопрос 12.1
У проблем производительности есть два обычных подозреваемых. Это:

1. плохая работа кода и плохая работа запросов.
2. недостаточная производительность оборудования и большой размер базы данных.
3. неактуальный релиз платформы и несоблюдение регламента обслуживания базы.

Читать далее

«1С:Профессионал» по технологическим вопросам (Раздел 11)

Нагрузочное тестирование

Вопрос 11.1
Какие задачи решают нагрузочные тесты?

1. Выявление проблем возникающих при многопользовательской работе, а также оценка производительности информационной системы при заданных параметрах модели предприятия.
2. Оценка производительности системы при ее изменении.
3. Оценка масштабируемости информационной системы при ее изменении.
4. Анализ и интегральная оценка текущей производительности рабочей системы.
5. Верны варианты 1, 2 и 3.
6. Верны варианты 2, 3 и 4.

Читать далее

Следующая страница →

Top