Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, прошу помощи у старших товарищей. Дано: MS SQL Server 2014 Запрос DELETE FROM MATERIAL WHERE MATERIALID NOT IN ( SELECT min(MATERIALID) as ID FROM MATERIAL GROUP BY RATE, TITLE , RESCODE ) Выполняется 6-10 часов... Таблица MATERIAL содержит 75 933 записей Выборка SELECT min(MATERIALID) as ID FROM MATERIAL GROUP BY RATE, TITLE , RESCODE дает 43 228 записей. Индекс в таблице MATERIAL один - MATERIALID Вопрос знатокам: Корректен ли такой запрос для удаления дубликатов? за 10 часов удалено 3600 записей... Может быть надо что-то настроить на сервере, в структуре БД? Индекс создать... Или нужно переписать запрос полностью, революционно? Заранее признателен всем, кто откликнется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:29 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, если не брать в расчёт сам запрос, то FK много на эту таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:31 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
скопируйте нужные данные в новую таблицу, потом переименуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:31 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, выполните в базе и покажите результат: Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:38 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
TaPaK, FK не очень много, но полагаю причина задержек не в удалении записей. Запрос 10ти самых тяжелых запросов пишет про 1 643 789 196 логических считываний при 3771 записях. Время CPU 83 154 070 Разработчик говорит, что есть еще одна подчиненная таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:39 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
komrad, name rows reserved data index_size unused MATERIAL 89433 117064 KB 116448 KB 544 KB 72 KB index_name index_description index_keys PK__MATERIAL__278B51D51F4E3A40 clustered, unique, primary key located on PRIMARY MATERIALID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:43 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450TaPaK, FK не очень много, но полагаю причина задержек не в удалении записей. Запрос 10ти самых тяжелых запросов пишет про 1 643 789 196 логических считываний при 3771 записях. Время CPU 83 154 070 Разработчик говорит, что есть еще одна подчиненная таблица. или создавать индекс в таблицах с FK на поле REFERECE MATERIALID? или удалять(хотя совет так себе :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:44 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, а это ? Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:55 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450TaPaK, FK не очень много, но полагаю причина задержек не в удалении записей. проверьте, может с таблицей работают другие сессии http://whoisactive.com/downloads/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:57 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
komradpavell450TaPaK, FK не очень много, но полагаю причина задержек не в удалении записей. проверьте, может с таблицей работают другие сессии http://whoisactive.com/downloads/ 1 643 789 196 логических считываний. Это сканы таблиц с FK, может там ещё и индексированные представляния... Ну и да наличие триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 11:58 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
komrad, name trigger_unique_item_code_material name dbo.trigger_unique_item_code_material ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 13:04 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450Таблица MATERIAL содержит 75 933 записей Выборка SELECT min(MATERIALID) as ID FROM MATERIAL GROUP BY RATE, TITLE , RESCODE дает 43 228 записей.Это копейки. Покажите план запроса в формате sqlplan. Тогда не придется гадать, что там у вас творится при выполнении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 13:26 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
TaPaK, Проверка ничего не показала. Оно и понятно - система пока не под нагрузкой. Пользователей нет, запросов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 13:34 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450komrad, name trigger_unique_item_code_material name dbo.trigger_unique_item_code_material покажите текст этого триггера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 13:40 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450TaPaK, Проверка ничего не показала. Оно и понятно - система пока не под нагрузкой. Пользователей нет, запросов нет. а что вы проверяли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 13:41 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450komrad, name trigger_unique_item_code_material name dbo.trigger_unique_item_code_material Код: sql 1. 2. 3. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 13:53 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450Запрос DELETE FROM MATERIAL WHERE MATERIALID NOT IN ( SELECT min(MATERIALID) as ID FROM MATERIAL GROUP BY RATE, TITLE , RESCODE ) Выполняется 6-10 часов... Вам, батенька, в управдомы надоть переквалифицироваться. Код: sql 1. 2. 3. Особую прыть это проявит, если есть индекс (RATE, TITLE, RESCODE, MATERIALID ) если же до зарезу хоцца по вашему Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 14:33 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
komrad, Текст триггера: USE [test] GO /****** Object: Trigger [dbo].[trigger_unique_item_code_material] Script Date: 9/25/2018 4:24:22 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER trigger [dbo].[trigger_unique_item_code_material] on [dbo].[MATERIAL] FOR INSERT ,UPDATE AS SET NOCOUNT ON; DECLARE @tempRes VARCHAR(max) DECLARE @tempId bigint DECLARE @TempString VARCHAR(max) DECLARE my_Cursor CURSOR LOCAL FAST_FORWARD FOR SELECT RESCODE,MATERIALID FROM INSERTED; OPEN my_Cursor FETCH NEXT FROM my_Cursor into @tempRes,@tempId WHILE @@FETCH_STATUS = 0 BEGIN IF ( CHARINDEX( '_N_VALID',@tempRes) = 0) IF EXISTS ( SELECT before.RESCODE FROM ( SELECT * FROM dbo.MATERIAL AS a WHERE a.MATERIALID NOT IN(SELECT o.MATERIALID FROM inserted o ) ) AS before WHERE before.RESCODE=@tempRes ) UPDATE a SET a.RESCODE = a.RESCODE+'_N_VALID' FROM dbo.MATERIAL a WHERE a.MATERIALID = @tempId FETCH NEXT FROM my_Cursor into @tempRes,@tempId END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:27 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
Дальше FOR INSERT ,UPDATE лучше не читать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:29 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
TaPaK, Был запрос "проверьте, может с таблицей работают другие сессии http://whoisactive.com/downloads/ " = проверка показала, что других сессий нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:30 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450TaPaK, Был запрос "проверьте, может с таблицей работают другие сессии http://whoisactive.com/downloads/ " = проверка показала, что других сессий нет давайте план, уже ж сказали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:31 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
aleks222Вам, батенька, в управдомы надоть переквалифицироваться. Примерно так и есть, ибо - не разработчик, поддержка, смотрю на черный-черный ящик сбоку, из SQL. Спасибо за пример скрипта, попробую убедить творцов, что есть иные способы удаления дубликатов ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:40 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
TaPaK, План найти пока не могу, как будто нет такого запроса. Внутрь системы доступа нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:58 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450План найти пока не могу, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. pavell450Спасибо за пример скриптаВ основном там бред написан. Как удалить за один проход по таблице: Код: sql 1. 2. 3. 4. 5. Если это разовое действие, то можно оставить как есть. Таблица у вас слишком уж маленькая, чтобы показанная форма delete приводила к таким проблемам. В общем, план нужен. Иначе можно много чего напредполагать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 18:17 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
invmВ основном там бред написан. Как удалить за один проход по таблице:[src] with t as ( select row_number() over (partition by RATE, TITLE, RESCODE order by MATERIALID) as rn from MATERIAL ) delete t where rn > 1; Откровение Иоанна-программизда? Сортировать и нумеровать ВСЕ записи внезапно стало быстрее? О темпора, о морес! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 18:58 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39707672&tid=1689034]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 420ms |

| 0 / 0 |
