Низкая производительность запроса на удаление в SQL Server
У меня есть приложение, которое использует Entity Framework для операций с БД. В одной таблице при выполнении операции удаления это занимает более 3 минут. Но другие подобные таблицы не занимают много времени. Я отладил код и выяснил, что с ним нет проблем. Но выполнение запроса на сервере sql заняло много времени.
Какие-либо шаги по устранению неполадок / первопричина для этой проблемы?
Моя таблица, как показано ниже,
Id (PK,uniqueidentifier,not null)
FirstValue(real,not null)
SecondValue(real,not null)
ThirdValue(real,not null)
LastValue(int,not null)
Config_Id(FK,uniqueidentifier,not null)
1 ответ
Здесь что-то не складывается, мы не видим полную картину...
Существует множество вещей, которые могут замедлить удаление (обычно):
- удаление большого количества записей (что, как мы знаем, здесь не так)
- много индексов (которые, я подозреваю, так и есть)
- взаимоблокировки и блокировки (это база данных разработки или производства?)
- триггеры
- каскадное удаление
- журнал транзакций, который нужно увеличить
- много внешних ключей для проверки (я подозреваю, что это также может происходить)
Можете ли вы дать нам снимок экрана с функцией "Просмотр зависимостей" в SSMS? Чтобы получить это, щелкните правой кнопкой мыши по таблице в проводнике объектов и выберите View Dependencies
,
Кроме того, вы можете открыть запрос на master
базу данных, выполните следующие запросы и опубликуйте результаты:
SELECT name, value, value_in_use, minimum, maximum, [description], is_dynamic, is_advanced
FROM sys.configurations WITH (NOLOCK)
where name in (
'backup compression default',
'clr enabled',
'cost threshold for parallelism',
'lightweight pooling',
'max degree of parallelism',
'max server memory',
'optimize for ad hoc workloads',
'priority boost',
'remote admin connections'
)
ORDER BY name OPTION (RECOMPILE);
SELECT DB_NAME([database_id]) AS [Database Name],
[file_id], [name], physical_name, [type_desc], state_desc,
is_percent_growth, growth,
CONVERT(bigint, growth/128.0) AS [Growth in MB],
CONVERT(bigint, size/128.0) AS [Total Size in MB]
FROM sys.master_files WITH (NOLOCK)
ORDER BY DB_NAME([database_id]), [file_id] OPTION (RECOMPILE);