У меня есть таблица с 9 миллионами строк (только что получила ее от нашего андеррайтингового провайдера). 4 столбца - leadid (guid), RawLeadXML (nvarchar (max), которые содержат xml-документ в каждой строке размером 2-3 КБ), LeadStatusID (int) и id (autonumber int, я только что добавил это).
Я не могу запустить даже простую инструкцию удаления.
DELETE FROM Leads WHERE LeadID = '100a7927-5311-4f12-8fe3-95c079d32dd4'
Я пытался добавить индекс к LeadID, но время вышло.
CREATE NONCLUSTERED INDEX IX_Leads ON dbo.Leads(LeadID) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
На моей машине 4 процессора и 12 ГБ оперативной памяти. Запуск Windows 7. SQL Server 2008 (я считаю Developer Edition). Как я могу добавить индекс к этой таблице?
9 миллионов строк - это не так уж и много. Я предполагаю, что в обеих ситуациях что-то блокирует таблицу.
Проверьте блокировки таблицы и либо закройте все процессы, которые блокируют таблицу, либо отключите блокировки вручную (если вы уверены, что никто другой не использует базу данных). Есть достаточно хороший сценарий для показать все замки здесь.
SELECT L.request_session_id AS SPID,
DB_NAME(L.resource_database_id) AS DatabaseName,
O.Name AS LockedObjectName,
P.object_id AS LockedObjectId,
L.resource_type AS LockedResource,
L.request_mode AS LockType,
ST.text AS SqlStatementText,
ES.login_name AS LoginName,
ES.host_name AS HostName,
TST.is_user_transaction as IsUserTransaction,
AT.name as TransactionName,
CN.auth_scheme as AuthenticationMethod
FROM sys.dm_tran_locks L
JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
JOIN sys.objects O ON O.object_id = P.object_id
JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
WHERE resource_database_id = db_id()
ORDER BY L.request_session_id