SQL Server Table Simple Select Query занимает слишком много времени

У меня есть простая таблица в MS SQL Server.

CREATE TABLE [dbo].[Personas] (
[Name] varchar(250) NOT NULL,
[ID] varchar(250) NOT NULL,
[IntranetID] varchar(250) NULL,
[eMail] varchar(250) NULL,
[Number] varchar(50) NULL,
[ModifDate] datetime NULL)
ON [PRIMARY];

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

select * from Personas;
select count(*) from Personas;

Как я могу узнать причину, почему это происходит, и как я могу это исправить? В запросах нет сообщений об ошибках, поэтому я не знаю, в чем заключаются ошибки. Как узнать, повреждена ли таблица?

Я не эксперт в администрировании SQL Server, но я попытался выполнить ниже. Я не уверен, является ли это причиной, и как это исправить, если это так.

DBCC SQLPERF(logspace)

Result:
Log Size (MB) = 19.6
Log Space Used (%) = 78.79
Status = 0

Пожалуйста, помогите. Заранее спасибо.


comment
Есть ли у вас открытые сделки? Попробуйте SELECT @@TRANCOUNT. Должно быть 0. Если это не так, это может привести к зависанию оператора select на неопределенный срок.   -  person Tom Chantler    schedule 05.05.2015
comment
Привет Том, я только что попробовал, результат 0. Другие таблицы в порядке, кроме этой. Спасибо.   -  person Jemru    schedule 05.05.2015
comment
Сколько строк в таблице? Усечение таблицы может вызвать проблемы с производительностью, поскольку планировщик запросов не обновляется, а индексы могут стать фрагментированными.   -  person John Bell    schedule 05.05.2015
comment
Привет, JohnnyBell, используя свойства таблицы жаб, я вижу, что в ней 16 000 строк. Как я могу узнать, повреждена ли моя таблица? Что я могу сделать, чтобы попытаться исправить это? Спасибо.   -  person Jemru    schedule 05.05.2015
comment
Попробуйте запустить SELECT session_id,status FROM sys.dm_exec_sessions WHERE open_transaction_count > 0   -  person ughai    schedule 05.05.2015
comment
@TomChantler - @@TRANCOUNT даст вам, только если в текущем сеансе есть какая-либо открытая транзакция. для блокировки нам нужно будет проверить все сеансы   -  person ughai    schedule 05.05.2015
comment
Привет, Угай, ошибка в sql: неверное имя столбца «open_transaction_count». Спасибо.   -  person Jemru    schedule 05.05.2015
comment
@@TRANCOUNT дает текущее количество транзакций для текущего соединения, а не текущего сеанса, но да, ваша команда должна работать для SQL 2012 и новее.   -  person Tom Chantler    schedule 05.05.2015
comment
создать первичный ключ в таблице   -  person Abdul Rehman Sayed    schedule 05.05.2015
comment
вы можете использовать их взаимозаменяемо , но если в другом соединении есть открытая транзакция, она не будет отображаться с использованием @@TRANCOUNT в текущем соединении.   -  person ughai    schedule 05.05.2015
comment
@ Джемру - это странно. Попробуйте выполнить свой выбор в одном окне запроса, а в другом окне запроса запустите EXEC sp_who2 и найдите значение SPID в столбце BlkBy.   -  person ughai    schedule 05.05.2015
comment
Привет Угай. Я выполнил EXEC sp_who2. Есть Статус = Спящий. Команда = Ожидание команды, Время ЦП = 47929, BlkBy = . Спасибо.   -  person Jemru    schedule 05.05.2015


Ответы (2)


Попробуй это,

select count(*) from Personas with (nolock)

Примечание:

если этот запрос возвращает результаты, мы можем определить, что ваша таблица заблокирована в каком-то другом сеансе. Вы должны определить сеанс, который блокирует вашу таблицу. Либо вы можете убить этот сеанс, либо зафиксировать транзакцию в нем.

person StackUser    schedule 05.05.2015

Для меня отключение базы данных SQl и ее повторное подключение помогло решить проблему.

Проблема была при обновлении таблицы (было запущено несколько транзакций/их нужно зафиксировать). Так что мне просто нужно было зафиксировать транзакции и закрыть их.

person Tejaswi Pandava    schedule 10.05.2017