Почему база данных 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... это было давно), так как каждая из них сбрасывается на диск в конце для Соответствие кислоте