Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Тормоза при удалении индексированных данных из таблицы  [new]
sql001
Member

Откуда:
Сообщений: 10
Добрый день

Имеется предельно простая таблица:
CREATE TABLE [dbo].[WareIO](
	[wioID] [int] IDENTITY(1,1) NOT NULL,
	[wioLink] [uniqueidentifier] NOT NULL,
	[wioDirectLink] [uniqueidentifier] NULL,
	[wioDate] [datetime] NOT NULL,
	[wioGood] [int] NOT NULL,
	[wioCount] [money] NOT NULL,
	[wioPrice] [money] NOT NULL,
	[wioSumm]  AS ([wioCount]*[wioPrice]) PERSISTED,
	[wioAuthor] [varchar](15) NOT NULL,
	[wioDevision] [int] NOT NULL,
	[wioActive] [bit] NOT NULL,
	[wioLock] [bit] NOT NULL,
 CONSTRAINT [PK_WareIO] PRIMARY KEY CLUSTERED 
(
	[wioID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

в ней всего лишь около 6,5 млн записей... внешних ключей нет... есть еще 3 некластеризованных индекса...

Выполнение запроса:
delete from WareIO where wioLink = '<some guid>'
(или даже без условия) происходит за астрономическое время...
План выполнения:
Картинка с другого сайта.
Показывает что 82% уходит на обработку индексов. по связанным индексированным представлениям все проходит хорошо... Не пойму в каком направлении идти чтобы оптимизировать быстродействие при удалении...?

Спасибо.
8 авг 13, 11:44    [14680152]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
sql001
Не пойму в каком направлении идти чтобы оптимизировать быстродействие при удалении...?

в направлении уменьшения числа индексов разумеется
8 авг 13, 11:46    [14680171]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
sql001
.. Не пойму в каком направлении идти чтобы оптимизировать быстродействие при удалении...?

Может у вас есть лишние индексы??
8 авг 13, 11:51    [14680202]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
А по wioLink индекс имеется?
8 авг 13, 11:52    [14680211]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
sql001
Выполнение запроса:
delete from WareIO where wioLink = '<some guid>'
(или даже без условия) происходит за астрономическое время...

"Астрономическое время" — это сколько в системе единиц СИ?
"Даже без условия" — это как? delete from WareIO, все 6,5 млн записей?
А если с условием, то сколько записей удаляется?
8 авг 13, 11:56    [14680240]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
[SQL]
CREATE TABLE #t1 (id int PRIMARY KEY CLUSTERED, n varchar(50))

CREATE TABLE #t2 (id int PRIMARY KEY CLUSTERED, n varchar(50))
CREATE INDEX #ix2 on #t2(n)
insert #t1
SELECT 1,'a'
union
select 2,'b'
insert #t2
SELECT 1,'a'
union
select 2,'b'

set statistics IO on

DELETE FROM #t1 WHERE n='b'

DELETE FROM #t2 WHERE n='b'

set statistics IO off

DROP TABLE #t1
DROP TABLE #t2
[/SQL]

Статистика IO весьма весомо объясняет, что от увеличения количества индексов количество логических чтений/записей увеличивается:
Table '#t1' -- Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table '#t2' -- Scan count 1, logical reads 8, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Думаю, в комментариях это уже не нуждается.

Да и в Actual Plan вес первого DELETE меньше второго в 2 раза.
8 авг 13, 12:01    [14680292]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
пля...
CREATE TABLE #t1 (id int PRIMARY KEY CLUSTERED, n varchar(50))

CREATE TABLE #t2 (id int PRIMARY KEY CLUSTERED, n varchar(50))
CREATE INDEX #ix2 on #t2(n)
insert #t1
SELECT 1,'a'
union
select 2,'b'
insert #t2
SELECT 1,'a'
union
select 2,'b'

set statistics IO on

DELETE FROM #t1 WHERE n='b'

DELETE FROM #t2 WHERE n='b'

set statistics IO off

DROP TABLE #t1
DROP TABLE #t2
8 авг 13, 12:02    [14680297]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
sql001
Member

Откуда:
Сообщений: 10
Астрономическое это 100 тыс. записей за 2-3 минуты...

хм... снес индексы удаление пошло веселее... посмотрим как упадет производительность в, теперь, не индексированных данных... Спасибо большое.

PS. А так хотелось увидеть "волшебную" директиву в DELETE или индексу которая решила бы вопрос... :)
8 авг 13, 12:18    [14680409]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
sql001
А так хотелось увидеть "волшебную" директиву в DELETE или индексу которая решила бы вопрос.

Как можно удалять информацию быстрее, если мест, где она расположена, много ?
8 авг 13, 12:20    [14680422]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
sql001
Member

Откуда:
Сообщений: 10
Поэтому "волшебную"
8 авг 13, 12:42    [14680573]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
sql001
Поэтому "волшебную"

drop index
8 авг 13, 12:42    [14680583]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при удалении индексированных данных из таблицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3449
sql001,

Можно сделать ALTER INDEX ... DISABLE непосредственно перед удалением данных, а потом заребилдить. Они же вам потом, я так понимаю, еще потребуются...
9 авг 13, 03:09    [14684545]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить