Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];

Вниз

Чистка 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
1-24058
Dmk
2002-07-24 00:27
2002.08.08
Disable Form DC


14-24206
shodan
2002-07-14 03:30
2002.08.08
Dos символы в Delphi


3-23913
PashketSiniz
2002-07-18 09:04
2002.08.08
Анатолию Подгоретскому


4-24263
mazepa
2002-06-01 02:15
2002.08.08
progress bar


1-24115
Yuri Btr
2002-07-26 09:35
2002.08.08
Drag&Drop файлов на форму.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский