Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.08;
Скачать: CL | DM;

Вниз

Чистка Interbase   Найти похожие ветки 

 
Ptr   (2002-07-19 15:07) [0]

Уважаемые мастера! Как можно програмно вычистить базу INTERBASE?
(т.е. убрать старый мусор)


 
kalliopiy ©   (2002-07-19 15:11) [1]

Хорошо спросил! Точно!

А что ты под мусоромподразумеваешь? И как ее (БД) нужно чистить?


 
Ptr   (2002-07-19 15:14) [2]

Извините за неточность. Interbase при удалении записей из таблицы не удаляет ее из базы, а только прячет. Т.е. при работе с базой она (база) все время увеличивается при том, что показывает 0 записей в таблице. Можно почитстить при "репликации", а мне хотелось бы программно. Вопрос понятен?


 
Alexandr ©   (2002-07-19 15:18) [3]

как все запущено...


 
kaif ©   (2002-07-19 15:19) [4]

Программно никак. Только Backup-Restore. Кстати, можно это и из программы вызвать. Interbase не прячет записи. Просто он добавляет новые страницы. Кстати, не обязательно, чтобы база все время росла. Если страниц хватает и нет мусора, то она перестает расти (или растет очень медленно). Мусор можно убирать с помощью SELECT COUNT(*) FROM <Table>.


 
Ptr   (2002-07-19 15:25) [5]

Спасибо kaif, хоть по человечески объяснил...


 
-=Sergeante=- ©   (2002-07-19 16:11) [6]

2 kaif © (19.07.02 15:19)

> Мусор можно убирать с помощью SELECT COUNT(*) FROM <Table>.


???


 
kaif ©   (2002-07-19 16:22) [7]

2 -=Sergeante=- © (19.07.02 16:11)
IB использует так называемую корпоративную чистку. Он организует транзакции через многоверсионный механизм. К примеру, ты стартуешь транзакцию и пытаешься делать UPDATE или DELETE. IB создает копию старой версии, которую видят другии транзакции до подтверждения твоей. Если ты не подтвердил свою транзакцию, твоя версия остается в базе в виде мусора и подчищается в процессе SELECT-а в новой транзакции. Так как некоторые записи могут никого не интересовать долгое время, их мусорные экземляры (вторые, третьи и т. д.) версии остаются лежать на страницах.
SELECT COUNT(*) позволяет просканировать таблицу и удалить все такие записи окончательно.
Как это ни странно, но это так.
Об этом можно почитать в сети на ib.demo.ru


 
-=Sergeante=- ©   (2002-07-19 16:38) [8]

Хм. Честно говоря, такое не слышал. Даже не подозревал, что такое может работать...

Пусть это работает с неподтверждёнными транзакциями. Но как тогда быть с уже удалёнными записями (с подстверждённой транзакцией)? Физически они остаются. Думаю в этом случае такой ход не подойдёт. Имхо.


 
Desdechado ©   (2002-07-19 17:13) [9]

размер БД для SQL-сервера не настолько важен.
sweep в самом деле идет через определенное количество транзакций для версий записей, которые никого из транзакций уже не интересуют .
а то, что они физически остаются в БД, так это свободное место, которое будет занято позже. Причем так даже лучше, поскольку серверу надо доп. время на приращивание новых страниц к БД, если их не хватает. Так что нет повода для волнения.


 
kaif ©   (2002-07-19 19:47) [10]

2 -=Sergeante=- © (19.07.02 16:38)
Может, я ошибаюсь в деталях, но подход именно такой. После массового удаления после Commit множество источников рекомендует сделать SELECT COUNT(*) (с соответствующим тормозом), иначе вновь подключившийся со своим SELECT наивный товарищ может заиметь большой тормоз и не понять, что происходит.



Страницы: 1 вся ветка

Текущий архив: 2002.08.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-24046
Kviz
2002-07-25 20:06
2002.08.08
Народ, ПОМОГИТЕ!!! Как узнать какие параметры при запуске проге были заданы и присвоить их все в строковую переменную. Ну, типа прога наша “delphi.exe”, юзверь его запустит “delphi.exe rulez, rulez and rulez” мне нужно, чтобы прога переменной “s” пр


7-24256
Посетитель
2002-05-24 14:52
2002.08.08
Как приостановить Shutdown компа


7-24254
Alex_MIB2
2002-05-22 21:22
2002.08.08
Как отправить на печать имеющийся *.тхт файл?


14-24237
Olgerd
2002-07-12 11:40
2002.08.08
О видеокартах...


1-24057
Brand
2002-07-25 23:32
2002.08.08
3 вопроса по работе с формами.