Почему база данных Azure работает лучше с транзакциями

Мы решили использовать микроорму против базы данных Azure. Поскольку нашему бизнесу нужны только "вставки" и "выборки", мы решили исключить все управляемые кодом SqlTransaction (нет проблем с параллелизмом данных).

Затем мы заметили, что наш экземпляр базы данных Azure реагирует очень медленно. Событие " rpc завершено " происходило с задержками, в сотни раз превышающими время, необходимое для выполнения простого оператора SQL.

Затем мы сравнили наш код с EF6 и увидели, что сервер отвечает очень быстро. Поскольку EF6 реализует встроенную транзакцию, мы решили восстановить SqlTransaction (ReadCommited) на микроорганизме, и мы заметили, что все было хорошо.

Требуется ли для базы данных Azure явное SqlTransaction (управляется кодом)? Как работает SqlTransaction влиять на производительность базы данных Azure? Почему это было реализовано таким образом?

РЕДАКТИРОВАТЬ: Я собираюсь опубликовать более точную информацию о том, как мы собирали следы. Кажется, что наши журналы событий Azure иногда выражаются в наносекундах, иногда в миллисекундах. Кажется странным

1 ответ

Решение

Если я правильно понимаю, что вы спрашиваете правильно, пакетирование нескольких SQL-запросов в одну транзакцию даст вам лучшие результаты на любой DBS. Фиксация после каждой вставки / обновления / удаления приводит к огромным накладным расходам на DBS, которая не предназначена для этого (например, MyISAM на MySQL).

Это может даже привести к плохой очистке диска и сбоям, если вы делаете слишком много. Однажды у меня был программист, отправляющий тысячи записей в одну из моих БД каждую минуту, каждая в виде своих собственных транзакций, и это останавливало сервер.

InnoDB, один из 2 самых популярных форматов баз данных для MySQL, может фиксировать только 20-30 транзакций в секунду (или, может быть, это было 2-3... это было давно), так как каждая из них сбрасывается на диск в конце для Соответствие кислоте