powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внимание боян. Долгое удаление записи из таблицы.
24 сообщений из 24, страница 1 из 1
Внимание боян. Долгое удаление записи из таблицы.
    #39875069
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кака в чем, я пришел, когда проекту было 14 лет, он был написан через жопу с кучей курсоров и отсутствием внешних ключей, а тема оптимизации запросов вызывала ухмылку. Так вот, по немногу начал ломать систему и ныть по поводу курсоров, отсутствию ключей и тд. Но ща образовалась жопа, есть таблица (Clients), с относительно небольшим количеством записей (400к) при ,примерно,100-150 полях, там всего 8 внешних ключей. При этом на саму таблицу ссылаются еще 50 таблиц. Ерунда в том, что сейчас удаление вновь созданной записи занимает минуту и 50 секунд. И ща весь отдел по немногу начинает опять забивать на внешние ключи, ссылаясь на эту ситуацию. У меня есть только 1 вариант удаления при таком раскладе, это собирать все таблицы, которые зависят от Clients проверять есть ли там удаляемая запись через exists, и если нет, отключать ограничения, удалять и включать. Но это, как по мне, тупой костыль. Мы даже пробовали отключать триггер, но результат тот же.
Что можно сделать в этой ситуации?
ПС
ms sql 2016 enterprise
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875075
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно такое бывает, если на связанной таблице отсутствует индекс, поэтому, для поиска значений при удалении используется скан.

Я бы посмотрел на план удаления строки - кто именно дает медленное выполнение, и сделал соответствующий индекс.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875083
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therПри этом на саму таблицу ссылаются еще 50 таблицА у этих таблиц индексы по ссылке есть?
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875105
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У каждой таблицы кластерный индекс, но вряд ли кто то создавал еще индекс на внешний ключ. План во вложении
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875107
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказалось, что 147 таблиц ссылаются на Client
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875141
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therно вряд ли кто то создавал еще индекс на внешний ключtherОказалось, что 147 таблиц ссылаются на ClientВот и получили полные сканы этих таблиц при удалении строки из родительской.

Вдобавок еще удаляются строки из индексированных представлений.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875153
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если с индексами понятно, хотя стремно ща делать 147 индексов, как бы место не закончилось на винте.
То как быть с удалением при наличии индексируемой вьюхи?
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875160
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therЕсли с индексами понятно, хотя стремно ща делать 147 индексов, как бы место не закончилось на винте.
То как быть с удалением при наличии индексируемой вьюхи?
может для начала посмотреть на 4 которые рекомендует Query Processor, а не 147 :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
/*
Missing Index Details 
The Query Processor estimates that implementing the following index could improve the query cost by 12,7321%.

WARNING: This is only an estimate, and the Query Processor is making this recommendation based solely upon analysis
of this specific query. It has not considered the resulting index size, or its workload-wide impact, including its
impact on INSERT, UPDATE, DELETE performance. These factors should be taken into account before creating this index.
*/
USE [Electro_Temp]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[OpDay] ([OD_SClient],)
GO

----------------

/*
Missing Index Details
The Query Processor estimates that implementing the following index could improve the query cost by 12,7354%.

WARNING: This is only an estimate, and the Query Processor is making this recommendation based solely upon analysis
of this specific query. It has not considered the resulting index size, or its workload-wide impact, including its
impact on INSERT, UPDATE, DELETE performance. These factors should be taken into account before creating this index.
*/
USE [Electro_Temp]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[OpDay] ([OD_Client],)
GO

----------------

/*
Missing Index Details
The Query Processor estimates that implementing the following index could improve the query cost by 10,7184%.

WARNING: This is only an estimate, and the Query Processor is making this recommendation based solely upon analysis
of this specific query. It has not considered the resulting index size, or its workload-wide impact, including its
impact on INSERT, UPDATE, DELETE performance. These factors should be taken into account before creating this index.
*/
USE [Electro_Temp]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Movement] ([Mov_Client],)
GO

----------------

/*
Missing Index Details
The Query Processor estimates that implementing the following index could improve the query cost by 57,5961%.

WARNING: This is only an estimate, and the Query Processor is making this recommendation based solely upon analysis
of this specific query. It has not considered the resulting index size, or its workload-wide impact, including its
impact on INSERT, UPDATE, DELETE performance. These factors should be taken into account before creating this index.
*/
USE [Electro_Temp]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[DocOut] ([DO_Client],)
GO
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875161
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therЕсли с индексами понятно, хотя стремно ща делать 147 индексов, как бы место не закончилось на винте.
То как быть с удалением при наличии индексируемой вьюхи?
Если она индексируемая, то логично, что и индекс на ней тоже можно сделать, не?
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875175
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther,

добавить поле "удалено" , и при удаление не удалять а ставить признак в это поле.
в клиенте таких не отражать
удалять (с этим признаком) потихоньку ночами
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875181
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therЕсли с индексами понятно, хотя стремно ща делать 147 индексов, как бы место не закончилось на винте.
То как быть с удалением при наличии индексируемой вьюхи?

1. Не всё так плохо, на паре таблиц есть индексы на внешний ключ, осталось только на 145 проиндексировать.

2. Есть ещё 3 таблицы-кучи.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875208
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minamoto,

это понятно, я думал, что надо будет доп манипуляции с вьюхой, кроме индекса

архивариус
пасиб, пробую
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875433
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther,

Вам эти 150 таблиц не нужны, сначала гляньте на те немногие из них, что обеспечиваю основную часть задержек. Ну и пользовательское удаление записей из справочника само по себе выглядит довольно дико.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875500
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"удаление вновь созданной записи "
1.Я правильно понимаю, что подразумевается полное отсутствие указаний на данную запись в других таблицах.
или всё же есть вероятность появления связанных записей?
2. Зачем делать физическое удаление? Пометьте запись как "для удаления" и обработайте процедуру физического удаления в любое удобное время.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875514
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183и обработайте процедуру физического удаления в любое удобное время.Так всё равно будет расход ресурсов на скан этих 170 таблиц.
Разумнее сделать индексы на тех таблицах, где много записей.
Или, действительно, подумать о ненужности физического удаления (в т.ч. через вьюху, если нельзя поменять программу).
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875522
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так в "пакетном" виде всё это можно запустить гораздо оптимальней.
Сформировать список ID для удаления, разделить его на те, на которые есть ссылки и те по которым нет.
первые на анализ,
вторые на физическое удаление.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875523
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Ну так в "пакетном" виде всё это можно запустить гораздо оптимальней.
Сформировать список ID для удаления, разделить его на те, на которые есть ссылки и те по которым нет.
первые на анализ,
вторые на физическое удаление.Да, это само собой.
И вообще, можно же запускать физическое удаление редко.
Если создавать инедксы не хочется, ибо интенсивные вставки, и будет оверхед, то вполне себе решение.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875771
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у вас еще и декларативная ссылочная целостность, небось, включена?
У каждой декларативной связи...
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875777
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterА у вас еще и декларативная ссылочная целостность, небось, включена?
У каждой декларативной связи...Да, это и есть вопрос топика.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875903
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имелось ввиду - поддержание декларативной ссылочной целостности - ака каскадное обновление/удаление /заNULLение дочерних записей.

Сама по себе бекларативная ссылочная целостность - не так страшна. А вот каскадные операции...
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875947
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterИмелось ввиду - поддержание декларативной ссылочной целостности - ака каскадное обновление/удаление /заNULLение дочерних записей.

Сама по себе бекларативная ссылочная целостность - не так страшна. А вот каскадные операции...
что с каскадом, что без, если "147 таблиц ссылаются на Client"
и индексов нет, 147 сканов будут все равно
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875972
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123uaggsterИмелось ввиду - поддержание декларативной ссылочной целостности - ака каскадное обновление/удаление /заNULLение дочерних записей.

Сама по себе бекларативная ссылочная целостность - не так страшна. А вот каскадные операции...
что с каскадом, что без, если "147 таблиц ссылаются на Client"
и индексов нет, 147 сканов будут все равно

+100500

Индексов нужно значительно меньше, из этих 147 таблиц почти все маленькие.

Критик дал рецепт:

КритикВам эти 150 таблиц не нужны, сначала гляньте на те немногие из них, что обеспечиваю основную часть задержек.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875981
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvguaggsterА у вас еще и декларативная ссылочная целостность, небось, включена?
У каждой декларативной связи...Да, это и есть вопрос топика.
А я так понял, что он сам проверяет наличие связанных записей в зависимых таблицах.
...
Рейтинг: 0 / 0
Внимание боян. Долгое удаление записи из таблицы.
    #39875998
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123uaggsterИмелось ввиду - поддержание декларативной ссылочной целостности - ака каскадное обновление/удаление /заNULLение дочерних записей.

Сама по себе бекларативная ссылочная целостность - не так страшна. А вот каскадные операции...
что с каскадом, что без, если "147 таблиц ссылаются на Client"
и индексов нет, 147 сканов будут все равно
Будут. Но с блокировками - попроще будет.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внимание боян. Долгое удаление записи из таблицы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]