есть опыт. В таблице 300кк+ строк, было решено удалить ~220кк, простейшим
delete from table
where date < '2019'
т.к. есть кластеризованный индекс, но кто же знал, что повиснет оно на 10+ часов, стоит ли ждать или отменить и когда роллбэкнится запустить цикл на удаления по 10-100к?
для темпдб еще есть место? удалять такие штуки строго в курсоре небольшими партиями
роллбек скорее всего будет работать в один поток. если удаление работает в 4 потока, то уже считай сам
там вопрос, выполниться ли запрос в принципе - хватит ли ресурсов для транзакции
Это классический вопрос на собеседованиях. Теперь знаете что отвечать.
как нужно было поступить поняли спустя 3-4 часа) надо было отменять тогда
Посмотрите сколько в таблице осталось записей: SELECT Rows FROM sys.partitions WHERE Object_Id = Object_Id('myTable');
16976666 16976666 16976666 44172872 227011568 если я правильно понял, разбивает по индексам
через while @ > 1 в while засовываем delete top(100-100000) where date < '' set @ = @@rowcount
100000 плохо, нужно чтобы эскалация блокировки не происходила
https://sqlperformance.com/2013/03/io-subsystem/chunk-deletes
Лучше создать таблицу и загрущить данные которые ты хочешь удалить и транкейтнуть таблицу. Записи потом обратно в insert
странно, что по строки в обратную сторону полетели 16976666 16976666 16976666 74840658 227011568
Молодец! Принят на работу. Правильно Никита пишет как удалять. Слушайте бородатых мужиков в свитерах, будет вам счастье.
на сколько я помню там оптимальное значение 5000. но думаю Дима сможет поправить. но имхо, надо подбирать оптимальное значение под себя
Все верно говоришь. Никита тоже самое написал, но выше.
Обсуждают сегодня