Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450Выполняется 6-10 часов... Таблица MATERIAL содержит 75 933 записей Выборка SELECT min(MATERIALID) as ID FROM MATERIAL GROUP BY RATE, TITLE , RESCODE дает 43 228 записей. Вопрос знатокам: Корректен ли такой запрос для удаления дубликатов? за 10 часов удалено 3600 записей... Может быть надо что-то настроить на сервере, в структуре БД? Индекс создать... Или нужно переписать запрос полностью, революционно? Заранее признателен всем, кто откликнется. Это все не нормально совсем. При том, что сам запрос неэффективный, удаление не должно занимать часы. Если у вас нет полного доступа к серверу - трогать ничего не рекомендую. зы. Триггер ваш тоже жуткий. Без плана запроса нельзя сказать что у вас за проблема. Вставьте SET SHOWPLAN_XML ON; + запрос в SSMS , запросите актуальный план, запустите запрос и прервите если не выполнится сразу. Правой кнопочкой по картинке плана и выбираете XML и постите сюда. зы. только что понял, что никогда не сталкивался с долгими запросами и не знаю, покажет ли SSMS актуальный план для не выполненного запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 21:25 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
SELECT [...] FROM MATERIAL WHERE MATERIALID NOT IN ( SELECT min(MATERIALID) as ID FROM MATERIAL GROUP BY RATE, TITLE , RESCODE ) тоже у вас часы выполняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 21:28 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
PizzaPizzapavell450Выполняется 6-10 часов... Таблица MATERIAL содержит 75 933 записей Выборка SELECT min(MATERIALID) as ID FROM MATERIAL GROUP BY RATE, TITLE , RESCODE дает 43 228 записей. Вопрос знатокам: Корректен ли такой запрос для удаления дубликатов? за 10 часов удалено 3600 записей... Может быть надо что-то настроить на сервере, в структуре БД? Индекс создать... Или нужно переписать запрос полностью, революционно? Заранее признателен всем, кто откликнется. Это все не нормально совсем. При том, что сам запрос неэффективный, удаление не должно занимать часы. Если у вас нет полного доступа к серверу - трогать ничего не рекомендую. зы. Триггер ваш тоже жуткий. Без плана запроса нельзя сказать что у вас за проблема. Вставьте SET SHOWPLAN_XML ON; + запрос в SSMS , запросите актуальный план, запустите запрос и прервите если не выполнится сразу. Правой кнопочкой по картинке плана и выбираете XML и постите сюда. зы. только что понял, что никогда не сталкивался с долгими запросами и не знаю, покажет ли SSMS актуальный план для не выполненного запроса. вот бывает же так, пришёл человек и по полочкам всё разложил, золото. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 21:44 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
aleks222Откровение Иоанна-программизда? Сортировать и нумеровать ВСЕ записи внезапно стало быстрее? О темпора, о морес!Дарагуля, видимо ты за своим любимым делом (надувание щек) последние знания растерял. Может стоило подумать сколько раз твой опус будет полностью сканировать таблицу (индекс)? И чем поможет предложенный индекс? aleks222 Код: sql 1. 2. 3. Не пробовал подумать, что этот запрос поудаляет? Изучай, может это сподвигнет тебя на освоение матчасти (хотя я очень сильно сомневаюсь): Код: 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. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. Результат без индексаdescriptionelapsed_timerows_deletedСупер медленный запрос от invm3433984746Супер быстрый запрос от aleks2223754984746Исходный вариант5191984746 Результат с индексомdescriptionelapsed_timerows_deletedСупер медленный запрос от invm6391991233Супер быстрый запрос от aleks2226980991233Исходный вариант8976991233 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 22:08 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
Модератор: invm и aleks222, хорош какашками кидаться друг в друга; как дети малые, ей богу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 00:36 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
invm, Спасибо! А вот и план запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 18:56 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
invm, Спасибо! А вот и план запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 19:03 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, "Ну у вас и запросы" - сказала база и повисла А что такое Table="[ASSEMBLY_MATERIAL]" и какое отношение эта таблица имеет к вашему запросу? Или же ваша таблица "MATERIAL" вовсе не таблица, а вьюшка и вы из неё удаляете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 21:06 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, Declare @Title nvarchar(max) @Title = Title WHERE l.TITLE like @Title" CONVERT_IMPLICIT(nvarchar(4000),[@Title],0)" GROUP BY RATE, TITLE ИМХО группировки и сравнения по nvarchar(4000) или nvarchar(max) = тормоза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 21:39 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, Выберите одного кандидата на удаление указав конкретные значения RATE, TITLE , RESCODE. и добавьте в условие вашего запроса через AND. Запустите Profiler и посмотрите, что там ваш запрос вытворяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 22:14 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450А вот и план запросаЖуть кошмарная... Вы там вместо обработки только строк с "дубликатами" лопатите всю таблицу построчно с жутким апдейтом другой таблицы. Попробуйте так: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 22:20 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, Дополнительно к ответу invm, удостоверьтесь что следующий индекс у вас присутствует на таблице, а то судя по плану его нет. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 22:46 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
Еще вариант Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. с тестовыми данными: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 22:53 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
PizzaPizza, выполняется не часы, быстрее :-) 1:32:29 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 08:29 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450PizzaPizza, выполняется не часы, быстрее :-) 1:32:29 Очень долго для десятков тысяч строк. Очевидно, где то проблема на стороне дизайна или обслуживания сервера. Не рекомендую вам вмешиваться в работу сервера если это не ваша зона ответственности - вслепую можно убить базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 20:50 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450, Assembly_material большая таблица? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 09:00 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
TaPaKpavell450, Assembly_material большая таблица? 165 000 записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 13:49 |
|
||
|
Удаление дубликатов - страшно долго
|
|||
|---|---|---|---|
|
#18+
pavell450TaPaKpavell450, Assembly_material большая таблица? 165 000 записей удаление ваших 30к записей рисует 5млрд чтений на эту таблицы, продолжайте развлекаться переписываниями запросов на красивые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 13:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1689034]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 471ms |

| 0 / 0 |
