русский
Germany.ruForen → Архив Досок→ Programmierung

А как сейчас с работой?

113520   68 69 70 71 72 73 74 75 76 77 78 alle
Murr патриот11.02.23 20:54
Murr
NEW 11.02.23 20:54 
in Antwort alex445 11.02.23 19:06

Логи вообще имеют свойство разрастаться

-----

Так и не только логи. Таблички таки тоже имеют начальный размер и величину расширения...


Я не хочу быть ДБА.

-----

Не хочешь - не будь.


а голова не резиновая

-----

Угу... не встречал резиновых... обычно - чугуниевые или деровянныя...

Вот из костей с используемыми мозгами - редкость...

alex445 коренной житель11.02.23 21:03
NEW 11.02.23 21:03 
in Antwort Срыв покровов 11.02.23 20:12, Zuletzt geändert 11.02.23 21:04 (alex445)

Насколько я помню по описанию в том же МС СКЛ - эта функция просто пишет меньше логов и ещё какие-то оптимизации делает по сравнению с обычным удалением записей из таблы, но по сути она их так же удаляет, что конечно дольше, чем просто дропнуть и создать таблу заново.

Срыв покровов патриот12.02.23 06:58
NEW 12.02.23 06:58 
in Antwort alex445 11.02.23 21:03

только в ПН смогу проверить

alex445 коренной житель12.02.23 15:51
NEW 12.02.23 15:51 
in Antwort Срыв покровов 12.02.23 06:58, Zuletzt geändert 12.02.23 15:52 (alex445)

А что проверять - в МСДНе всё описано.

Срыв покровов патриот12.02.23 23:51
NEW 12.02.23 23:51 
in Antwort alex445 12.02.23 15:51

цитату пожалуйста

alex445 коренной житель13.02.23 00:39
NEW 13.02.23 00:39 
in Antwort Срыв покровов 12.02.23 23:51, Zuletzt geändert 13.02.23 00:47 (alex445)

Там написано, что это за функция и чем отличается от удаления данных из таблицы. Ну и немного в стороне написано, как дропаются большие таблицы


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.
Срыв покровов патриот13.02.23 10:26
NEW 13.02.23 10:26 
in Antwort Murr 11.02.23 20:46
Проверь... и результат замеров в студию.

Что и ожидалось.

Таблицы одинаковые. Около 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

alex445 коренной житель13.02.23 12:07
NEW 13.02.23 12:07 
in Antwort Срыв покровов 13.02.23 10:26, Zuletzt geändert 13.02.23 12:08 (alex445)

Может, просто на 900к транкейт быстрее работает? А на 1000? А на 100М? Там явно нелинейная зависимость. Ну и от типа хранимых в табле данных зависит, от занимаемого на дисках объема. Всё не так просто.

Срыв покровов патриот13.02.23 13:16
NEW 13.02.23 13:16 
in Antwort alex445 13.02.23 12:07

ну приебалт вон просто в менторском тоне заявил, что truncate медленнее

Хотя оно даже по логике медленнее быть не может.

alex445 коренной житель13.02.23 13:21
NEW 13.02.23 13:21 
in Antwort Срыв покровов 13.02.23 13:16, Zuletzt geändert 13.02.23 13:25 (alex445)

Транкейт всё же пишет какие-то логи, а дроп - не пишет. Как дроп может быть ПО ЛОГИКЕ медленнее? Тесты на одном единственном наборе данных ничего не говорят. Вполне возможно, что СУБД на операции с таблицами тратит больше времени, чем на 100к записей в готовой таблице. Особенно, если запись - одно простое поле.


Подготовьте нормальные тесты, составьте отчёт, чтобы всё по уму было. К вечеру сюда доложите. А я пока пойду чайку попью с круассанами...

Срыв покровов патриот13.02.23 14:31
NEW 13.02.23 14:31 
in Antwort alex445 13.02.23 13:21

ну приведи свои тесты, делов-то


Как дроп может быть ПО ЛОГИКЕ медленнее?

да хотябы потому что при удалении таблицы вся информация о ней удаляется из ALL_TABLES

Все constraints из ALL_CONSTRAINTS

И потом все снова записывается.

alex445 коренной житель13.02.23 15:02
NEW 13.02.23 15:02 
in Antwort Срыв покровов 13.02.23 14:31

Я не умею там тестить. Потому и спрашиваю.


Как дроп может быть ПО ЛОГИКЕ медленнее?

да хотябы потому что при удалении таблицы вся информация о ней удаляется из ALL_TABLES

Все constraints из ALL_CONSTRAINTS

И потом все снова записывается.


Ну вот я и говорю - если CONSTRAINTS на табле мало, а данных в ней много и они много весят, то дропнуть может быть быстрее, чем транкать?

Срыв покровов патриот13.02.23 15:08
NEW 13.02.23 15:08 
in Antwort alex445 13.02.23 15:02

почему ты решил, что truncate „пишет какие-то логи»?

Murr патриот13.02.23 16:28
Murr
NEW 13.02.23 16:28 
in Antwort Срыв покровов 13.02.23 10:26

Около 900.000

------

У тебя по математике что было?


Тебе ссылку уже дали - смотри сколько надо данных...

Да и тестовый код можно запостить...

Murr патриот13.02.23 16:37
Murr
NEW 13.02.23 16:37 
in Antwort Срыв покровов 13.02.23 13:16

по логике медленнее быть не может

-----

По логике... хммм...

- по логике трункейт помечает записи как удаленные, оставляя аллокацию самой таблицы без изменений. Т.е. работает с каждой записью.

- по той же логике дроп/креате освобождает занятое таблицей пространство без изменения самих записей.


Так что - ой, с логикой...


Так что забивай 900М записей по 3-4К, показывай что они там есть и уже потом показывай что намерял...

Murr патриот13.02.23 16:40
Murr
NEW 13.02.23 16:40 
in Antwort Срыв покровов 13.02.23 14:31

удаляется из

-----

Там считанные операции в сравнении с сотней лямов записей...

alex445 коренной житель13.02.23 16:47
NEW 13.02.23 16:47 
in Antwort Срыв покровов 13.02.23 15:08

Откройте статью по транкейт и поищите по странице "log". Немного пишет, но пишет. А дроп много пишет?


Да и это неважно. Важно, что скорость работы транкейт зависит от размера и сложности данных.

Срыв покровов патриот13.02.23 18:43
NEW 13.02.23 18:43 
in Antwort Murr 13.02.23 16:28
Да и тестовый код можно запостить...

может тебе ещё на грудь нассать, чтоб морем пахло?


Нет никакого тестового кода, взял живую таблицу, перенёс данные в две новые и прогнал два варианта.


Ты херню спорол, вот и выкладывай тестовые данные, на которых оно работает так, как ты говоришь.

Срыв покровов патриот13.02.23 19:00
NEW 13.02.23 19:00 
in Antwort alex445 13.02.23 16:47

один пенсионер из ума выживший, другой сосунок, базу данных только по телевизору видел


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

Срыв покровов патриот13.02.23 19:05
13.02.23 19:05 
in Antwort alex445 13.02.23 16:47
Откройте статью по транкейт и поищите по странице "log". Немного пишет, но пишет. А дроп много пишет?

как я уже выше писал, truncate это DDL.

То есть никакого тебе Transaction log в оракле.

68 69 70 71 72 73 74 75 76 77 78 alle