InterBase - многоверсионност
7 отговора
186 прегледа
InterBase - многоверсионност
Използувам Firebird 1.5 за сървър и FIBPlus 4.8.1 за достъп към базата.
При изпълнение на по долния код наблюдавам следните аномалии:
1.На всеки запис се ' мота' по 2-3 сек.
2.След изпълнението базата нараства от 700 к на 35 мБ !!!
Знам че Firebird поддържа многоверсионност, но на всеки запис ли пази копие на цялата таблица ? Някой борил ли се е с такова нещо ? Вероятно това е особеност на InterBase и сигурно има и друг начин освен резервно копиране и после възстановяване на базата, за да се унищощат старите версии !
Ето го и кода :
with FIBTable do
begin
while not eof do
begin
edit;
FieldByname('ITEM_NO').AsInteger := FieldByName('ITEMN').Asinteger;
post;
next;
end;
end;
ITEMN - е Lookup pole
При изпълнение на по долния код наблюдавам следните аномалии:
1.На всеки запис се ' мота' по 2-3 сек.
2.След изпълнението базата нараства от 700 к на 35 мБ !!!
Знам че Firebird поддържа многоверсионност, но на всеки запис ли пази копие на цялата таблица ? Някой борил ли се е с такова нещо ? Вероятно това е особеност на InterBase и сигурно има и друг начин освен резервно копиране и после възстановяване на базата, за да се унищощат старите версии !
Ето го и кода :
with FIBTable do
begin
while not eof do
begin
edit;
FieldByname('ITEM_NO').AsInteger := FieldByName('ITEMN').Asinteger;
post;
next;
end;
end;
ITEMN - е Lookup pole
Re: InterBase - многоверсионност
Пази копие на всеки запис (не на цялата таблица) докато се обере боклука. А боклука се обира при следващата транзакция, която минава през записа след като си комитнал текущата.
Разбира се възможно е при FB1.5 да има все още и някои не изгладени неща. Даже ми се струва, че за подобен проблем бях чел нещо в нюзгрупата.
Извод:
Правете кратки пишещи транзакции.
Аз лично
1. Винаги ползвам явно стартиране и комитване на транзакцията.
2. В една транзакция включвам само действително взаимозависими операции.

Разбира се възможно е при FB1.5 да има все още и някои не изгладени неща. Даже ми се струва, че за подобен проблем бях чел нещо в нюзгрупата.
Извод:
Правете кратки пишещи транзакции.
Аз лично
1. Винаги ползвам явно стартиране и комитване на транзакцията.
2. В една транзакция включвам само действително взаимозависими операции.
Re: InterBase - многоверсионност
Открих проблема. Във FIBPlus компонентата има properti AutoCommit и аз съм го оставил активно. То е за хубаво, но ако редактираш само един запис. Сега си оформих блок StartTransaction в началото и Commit в края на обхождането и всичко си дойде на мястото. 5000 записа се ъпдейтват за около 4 сек.
Re: InterBase - многоверсионност
Абе този нещо боклук не се обира. Докато не направя backup и после restore на базата файлът си остава 4 мБ. А след рестор - 700 к
Re: InterBase - многоверсионност
Той боклука в случая няма връзка.
Освободеното от боклука място се държи на разположение за да се използва отново когато потрябва
Всъщност май всички известни ми бази работят на този принцип. Захапят ли от ОС дисково пространство не пускат докато не им заповядаш "Пусни"

Освободеното от боклука място се държи на разположение за да се използва отново когато потрябва
Всъщност май всички известни ми бази работят на този принцип. Захапят ли от ОС дисково пространство не пускат докато не им заповядаш "Пусни"
Re: InterBase - многоверсионност
Пък интелигентните не минават през файловата система на ОС-а ;-)))
А колкото до IB - мисля, че е нормално всяка вечер (или когато е удобно разбира се) да се прави backup - основното е, че запазва данните, а това, че освобождава 2-3 MB диск е смешно при тези размери на дисковете. Аз лично бих предпочел да заделя (перманентно) определено място (което да не се фрагментира) за файла му - ама не са предвидили подобна възможност ;-))).
Между другото дали малко базикане на sweep интервала няма да оптимизира използваното място ????
---
Е т'ва е живот!
А колкото до IB - мисля, че е нормално всяка вечер (или когато е удобно разбира се) да се прави backup - основното е, че запазва данните, а това, че освобождава 2-3 MB диск е смешно при тези размери на дисковете. Аз лично бих предпочел да заделя (перманентно) определено място (което да не се фрагментира) за файла му - ама не са предвидили подобна възможност ;-))).
Между другото дали малко базикане на sweep интервала няма да оптимизира използваното място ????
---
Е т'ва е живот!
Редактирано от PhantomAS на
Re: InterBase - многоверсионност
При работа с ДБАдмин е препоръчително Sweep interval да се установи в 0, което се отразява добре на бързодействието, но дефаулт стойността 20000 не е лоша, ако няма възможност да се наглежда регулярно.
А регулярното backup/restore носи само хубави неща. Искам да дам обаче един съвет: Никога, ама никога не ресторвайте върху работната база. Повярвайте преживяването е страшно неприятно, когато база, която се е бакъпнала като че ли без никакви проблеми даде грешка при ресторването, а ти си дал да ресторва в/у работната база

А регулярното backup/restore носи само хубави неща. Искам да дам обаче един съвет: Никога, ама никога не ресторвайте върху работната база. Повярвайте преживяването е страшно неприятно, когато база, която се е бакъпнала като че ли без никакви проблеми даде грешка при ресторването, а ти си дал да ресторва в/у работната база
Re: InterBase - многоверсионност
Явно при мен се получават аномалии защото в момента прехвърлям данни от Парадокс на ИБ. Добавям нови полета, зареждам ги със стойности от други таблици и общо взето препроектирам базата данни. Но все пак не ми допада при всяко зареждане файлът да нараства с по 2-3 мБ.Това за ресторването върху истинската база отдавна го прочетох някъде и никога не го правя. Ще споменете ли на какво ползувате за достъп и администриране. Аз след доста лутане и четене се спрях на FIBPlus и IBExpert.