Я выполнил запрос, чтобы скопировать 18 миллионов записей из одной таблицы в другую. Поскольку выполнение запроса занимало много времени, я следил за количеством таблиц, чтобы определить, когда он закончится.
Я заметил, что до того, как он достигнет числа, которое он должен был достичь, счетчик начал снижаться, поэтому я проверил журнал, и похоже, что серверу sql практически не хватило памяти:
'Экземпляр компонента SQL Server Database Engine не может получить ресурс LOCK в данный момент. Повторите ваше заявление, когда активных пользователей станет меньше. Попросите администратора базы данных проверить блокировку и конфигурацию памяти для этого экземпляра или проверить наличие длительных транзакций. '
Фактическая вставка работала всего около 20 минут, прежде чем ошибка появилась в журнале.
Я отменил запрос от управляющей студии около 2 часов назад, и, судя по количеству таблиц, эта штука завершилась только на 25%, что ставит меня примерно на 6 часов. Я предполагаю, что что-то вроде того, поскольку вся память израсходована, теперь она запускается из файла подкачки, и поэтому она занимает так много времени.
Что я могу сделать, чтобы ускорить это? Это в основном сделало базу данных непригодной для использования, потому что каждый получает ошибку «не удается получить ресурс блокировки». Я мог бы легко удалить вставленные записи самостоятельно, я забочусь, если возможно я мог бы убить идентификатор процесса и «откатить» вставку самостоятельно?
Обновление
Эта штука пока работает удивительно медленно. Одна вещь, которую я обнаружил, состоит в том, что # блокировки, данные следующим запросом, кажутся возмутительными: 83 миллиона. Следующим по величине является колоссальный 20.
SELECT request_session_id, COUNT (*) num_locks
FROM sys.dm_tran_locks
GROUP BY request_session_id
ORDER BY count (*) DESC