У нас есть база данных SQL Azure, которая находится на ценовом уровне S1. Наш сайт очень сильно кешируется, поэтому обращения к базе данных абсолютно минимальны. Среднее использование DTU составляет всего ~ 1,5%, это здорово, так как наши затраты на БД - это доля того, что было на нашем старом сайте (£ 20 p / m против £ 400 p / m!)
На сайте, однако, у нас есть небольшие скрипты, которые требуют вставки ~ 100 тыс. Записей или около того (пользовательские уведомления о том, когда кто-то выполняет действие, такое как создание нового учебного пособия).
Когда это срабатывает, всплеск DTU на 100% в течение 3-5 минут.
Скрипт - это просто цикл, который вызывает вставку:
using(var db = new DBContext())
{
foreach(var userID in userIDs)
{
db.ExecuteCommand(
"INSERT INTO UserNotifications " +
"(ForUserID, Date, ForObjectTypeID, ForObjectID, TypeID, Count, MetaData1)
VALUES ({0}, {1}, NULL, {2}, {3}, {4}, {5}, {6})",
userID, DateTime.Now.ToUniversalTime(), forObjectID, (byte)type, 1, metaData1.Value
);
}
}
- Есть ли более быстрый способ вставки, чем этот?
- Кроме того, что может быть лучшим способом замедлить выполнение этого сценария, чтобы использование DTU не подавляло все?