А как сейчас с работой?
Логи вообще имеют свойство разрастаться
-----
Так и не только логи. Таблички таки тоже имеют начальный размер и величину расширения...
Я не хочу быть ДБА.
-----
Не хочешь - не будь.
а голова не резиновая
-----
Угу... не встречал резиновых... обычно - чугуниевые или деровянныя...
Вот из костей с используемыми мозгами - редкость...
Насколько я помню по описанию в том же МС СКЛ - эта функция просто пишет меньше логов и ещё какие-то оптимизации делает по сравнению с обычным удалением записей из таблы, но по сути она их так же удаляет, что конечно дольше, чем просто дропнуть и создать таблу заново.
А что проверять - в МСДНе всё описано.
Там написано, что это за функция и чем отличается от удаления данных из таблицы. Ну и немного в стороне написано, как дропаются большие таблицы
Large tables and indexes that use more than 128 extents are dropped in two separate phases: logical and physical. In the logical phase, the existing allocation units used by the table are marked for deallocation and locked until the transaction commits. In the physical phase, the IAM pages marked for deallocation are physically dropped in batches.
Правда, в статье про транкейт написано немного другое. Вобщем, что-то непонятно.
Microsoft SQL Server has the ability to drop or truncate tables that have more than 128 extents without holding simultaneous locks on all the extents required for the drop.
Проверь... и результат замеров в студию.
Что и ожидалось.
Таблицы одинаковые. Около 900.000 записей.
Table TRUCATE_TEST truncated.
Elapsed: 00:00:00.071
Table D_C_TEST dropped.
Elapsed: 00:00:00.122
Table "D_C_TEST" created.
Elapsed: 00:00:00.036
Может, просто на 900к транкейт быстрее работает? А на 1000? А на 100М? Там явно нелинейная зависимость. Ну и от типа хранимых в табле данных зависит, от занимаемого на дисках объема. Всё не так просто.
ну приебалт вон просто в менторском тоне заявил, что truncate медленнее
Хотя оно даже по логике медленнее быть не может.
Транкейт всё же пишет какие-то логи, а дроп - не пишет. Как дроп может быть ПО ЛОГИКЕ медленнее? Тесты на одном единственном наборе данных ничего не говорят. Вполне возможно, что СУБД на операции с таблицами тратит больше времени, чем на 100к записей в готовой таблице. Особенно, если запись - одно простое поле.
Подготовьте нормальные тесты, составьте отчёт, чтобы всё по уму было. К вечеру сюда доложите. А я пока пойду чайку попью с круассанами...
ну приведи свои тесты, делов-то
Как дроп может быть ПО ЛОГИКЕ медленнее?
да хотябы потому что при удалении таблицы вся информация о ней удаляется из ALL_TABLES
Все constraints из ALL_CONSTRAINTS
И потом все снова записывается.
Я не умею там тестить. Потому и спрашиваю.
Как дроп может быть ПО ЛОГИКЕ медленнее?да хотябы потому что при удалении таблицы вся информация о ней удаляется из ALL_TABLES
Все constraints из ALL_CONSTRAINTS
И потом все снова записывается.
Ну вот я и говорю - если CONSTRAINTS на табле мало, а данных в ней много и они много весят, то дропнуть может быть быстрее, чем транкать?
почему ты решил, что truncate „пишет какие-то логи»?
Около 900.000
------
У тебя по математике что было?
Тебе ссылку уже дали - смотри сколько надо данных...
Да и тестовый код можно запостить...
по логике медленнее быть не может
-----
По логике... хммм...
- по логике трункейт помечает записи как удаленные, оставляя аллокацию самой таблицы без изменений. Т.е. работает с каждой записью.
- по той же логике дроп/креате освобождает занятое таблицей пространство без изменения самих записей.
Так что - ой, с логикой...
Так что забивай 900М записей по 3-4К, показывай что они там есть и уже потом показывай что намерял...
Откройте статью по транкейт и поищите по странице "log". Немного пишет, но пишет. А дроп много пишет?
Да и это неважно. Важно, что скорость работы транкейт зависит от размера и сложности данных.
Да и тестовый код можно запостить...
может тебе ещё на грудь нассать, чтоб морем пахло?
Нет никакого тестового кода, взял живую таблицу, перенёс данные в две новые и прогнал два варианта.
Ты херню спорол, вот и выкладывай тестовые данные, на которых оно работает так, как ты говоришь.
один пенсионер из ума выживший, другой сосунок, базу данных только по телевизору видел
Truncate не удаляет ничего построчно
Читай, блин
Ein TRUNCATE TABLE Kommando erklärt einfach den gesamten für diese Tabelle allokierten Speicher zum Freispeicher, nach dem Motto "Das was dort noch gespeichert ist, das kenne ich nicht". Die einzelnen Datenzeilen werden also gar nicht einzeln betrachtet und deswegen ist das TRUNCATE Kommando auch so schnell.
http://www.durben.de/blog/Tipps/truncate_table_drop_storage/index.html
Откройте статью по транкейт и поищите по странице "log". Немного пишет, но пишет. А дроп много пишет?
как я уже выше писал, truncate это DDL.
То есть никакого тебе Transaction log в оракле.