Firebird-сервер иногда подвисает

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
RudyM
Сообщения: 9
Зарегистрирован: 26 окт 2004, 17:44

Firebird-сервер иногда подвисает

Сообщение RudyM » 01 авг 2005, 15:27

Дорбый день.

Уже около 3-х лет в нашей шарашке работает моя программка (Delphi6+IBX), база данных Firebird 1.0.3. В базе данных есть ГЛАВНАЯ таблица:

Код: Выделить всё

CREATE TABLE CUSTOMER (
    NUMBER INTEGER NOT NULL,
    NAME VARCHAR (100),
    ADDR VARCHAR (250),
    . . . . .
);
ALTER TABLE CUSTOMER ADD PRIMARY KEY (NUMBER);
В таблице около 25 полей и 15 тыс. записей. Есть еще пара таблиц, привязанных через FOREIGN KEY (NUMBER) к ГЛАВНОЙ таблице.
Черт меня дернул в начале года переписать в моей программке процедуру подсчета ежемесячных отчетов (т.к. все отчеты опираются на одинаковые данные, я решил сначала эти данные расчитать и запихнуть в БД, с тем, что бы потом "быстро" получать отчеты). Создал еще одну таблицу:

Код: Выделить всё

CREATE TABLE STAT (
    NUMBER INTEGER NOT NULL,
    WORK_DATE DATE,
    KIND SMALLINT,
    SUM0 FLOAT,
    DATE0 DATE
);
ALTER TABLE STAT ADD  CONSTRAINT STAT_FK_NUMBER FOREIGN KEY (NUMBER) REFERENCES CUSTOMER (NUMBER) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE INDEX STAT_INDEX ON STAT (KIND, WORK_DATE);
И был доволен собой месяца три...
Закрывая очередной месяц, мне пришлось несколько раз запускать мою НОВУЮ процедуру подготовки данных для отчетов, т.е. старые данные приходилось удалять, новые добавлять (что-то около 70 тыс. строк). Так вот, стало происходить следующее: после очередного перерасчета данных для отчетов, я обращаюсь к таблице STAT с тем чтобы посчитать сам отчет - и вроде бы все ОК. Но как только я закрываю клиентское приложение (мою программку) Firebird как будто умирает (точнее впадает в кому). Т.е. клиент зависает на вызове метода TIBDatabase.Close и достучаться до Firebird'a невозможно ниоткуда. Эта кома длится минут 5-15. Потом все оживает и бежит дальше.

Знакомый посоветовал отключить Sweep Interval - не помогло. Экспериментировал с Firebird 1.5, правда локально, - результат тот же.

Вобщем, если кто-нибудь хотя бы намекнет, что происходит, буду весьма признателен.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 авг 2005, 17:15

сборка мусора. перед "отсоединением" запусти IBAnalyst. он тебе покажет, где и что.

и вообще -
www.ibase.ru/devinfo/garbage.htm

RudyM
Сообщения: 9
Зарегистрирован: 26 окт 2004, 17:44

Сообщение RudyM » 01 авг 2005, 18:33

kdv писал(а):сборка мусора. перед "отсоединением" запусти IBAnalyst. он тебе покажет, где и что.
Я думал, что установив Sweep Interval=0 я тем самым отключил автоматическую сборку мусора.
Дело в том, что у меня есть возможность осуществлять B/R со сборкой мусора каждую ночь (что я собственно говоря и делаю), так как сделать так, чтоб автоматическая сборка мусора даже и не думала запускаться, ибо мне это не нужно.

RudyM
Сообщения: 9
Зарегистрирован: 26 окт 2004, 17:44

Сообщение RudyM » 01 авг 2005, 18:39

И еще.
В статьях говорится о "падении" производительности. В моем же случае это "падение производительности до нуля".
Или я чего то не понял ;)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 авг 2005, 19:39

Я думал, что установив Sweep Interval=0 я тем самым отключил автоматическую сборку мусора.
я когда статьи пишу, пытаюсь описать все нюансы. Поэтому не рекомендую читать по диагонали. На "автоматической" сборке мусора свет клином не сошелся.

В общем, гадать нет никакого смысла - ты либо смотришь базу IBAnalyst-ом также внимательно читая его хелп по поводу когда и как статистику собирать, либо продолжаешь дальше жить с падениями производительности.

p.s. до нуля или нет - это мне неведомо. Падение производительности - оно относительно.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 01 авг 2005, 20:08

Forced writes небось OFF ?

RudyM
Сообщения: 9
Зарегистрирован: 26 окт 2004, 17:44

Сообщение RudyM » 02 авг 2005, 11:16

kdv писал(а):я когда статьи пишу, пытаюсь описать все нюансы. Поэтому не рекомендую читать по диагонали. На "автоматической" сборке мусора свет клином не сошелся.
На счет диагонали - это хорошо... Нюансы впечатлили...
Но я так и не нашел, где и как отключить "сборку мусора". Мне НЕ НУЖНА никакая сборка мусора, о которой я явно не прошу, ни кооперативная, ни автоматическая, ни какая либо еще. Меня вполне удовлетворяет ежедневный B/R со сборкой мусора, и мне этого достаточно.
И еще раз повторюсь. Является ли нормой то, что, когда запускается эта "сборка мусора", то к серверу возможно подключиться, пока он не кончит?
Спасибо за внимание.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 авг 2005, 13:18

сборку мусора отключить можно, только лучше не надо. Если бы ты хотел ее отключить, то нашел бы как это сделать например в статье ibtrans.htm. Я тебе косвенно, подсовывая статьи, пытаюсь объяснить, что у тебя вполне штатная ситуация - ты записей наудалял? сколько? вот сервер их в определенный момент мусором и считает.

или ты еще не дочитал, что удаление - это создание новой версии?

ну читай тогда www.ibase./devinfio/mga.htm
www.ibase.ru/devinfo/delmany.htm ...

HeadHunter
Сообщения: 19
Зарегистрирован: 30 ноя 2005, 17:48

Сообщение HeadHunter » 29 дек 2005, 13:52

Из мануала по interbase API

Invoking a database sweep
You can invoke a database sweep with the cluster identifier isc_action_svc_repair.
Sweeping attempts to scan the database for outdated record versions and mark them as free space. The following table lists arguments to isc_action_svc_repair to sweep a
database: ...

по какому критерию СУБД считает, что записи(версии) "outdated" и больше незачем их хранить?
Ситуация следующая: в таблице БД есть поле, по сути булевское (наличие отсутствие товара).
Несколько раз в день с web сервера скачивается список товаров с пометкой о текущим наличии, после скачивания происходит Update всех полей.
База вырастает на N сотен килобайт.
Вопрос - в базе появилось N сотен килобайт мусора? Если инициировать sweep каждый раз после Update, могу ли я рассчитывать что при следующем Update база не вырастет на N сотен килобайт?

Спасибо.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 29 дек 2005, 14:52


kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 30 дек 2005, 19:10

НУ НЕ МОГУ Я КАЖДОМУ ПИСАТЬ ОДНО И ТО ЖЕ, тем более то, что уже написано в статьях.

И чего тебя в API Guide понесло? Это же API !!! Guide. Ну прочитай ты статьи про версионность, возьми IBAnalyst, и САМ ПОСМОТРИ СКОЛЬКО У ТЕБЯ ВЕРСИЙ В БАЗЕ.

HeadHunter
Сообщения: 19
Зарегистрирован: 30 ноя 2005, 17:48

Сообщение HeadHunter » 31 дек 2005, 13:27

Спасибо.
В API понесло потому что не нашел стандартных компонент, которые позволили бы произвести сборку мусора тогда, когда мне это нужно, а не тогда, когда СУБД, сборщик мусора или Господь Бог этого захочет.

Я посмотрел сколько у меня версий в базе. Ну, допустим, 10. И что? Сколько из них outdated? 9? Если я сделаю sweep, у меня останется одна версия? (можете не отвечать, это мысли вслух)

С наступающим новым годом, о терпеливые Гуру.
Как вы нас, непонятливых, на х не посылаете, удивительно...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 дек 2005, 13:58

В API понесло потому что не нашел стандартных компонент, которые позволили бы произвести сборку мусора тогда, когда мне это нужно, а не тогда, когда СУБД, сборщик мусора или Господь Бог этого захочет.
ужас какой...
Я посмотрел сколько у меня версий в базе. Ну, допустим, 10. И что? Сколько из них outdated? 9? Если я сделаю sweep, у меня останется одна версия? (можете не отвечать, это мысли вслух)
не под праздник будь сказано, но ты вообще что-нибудь читаешь на сайте, например про сборку мусора, и про версионность вообще?
А в хелп IBAnalyst смотришь? Там целая статья есть, в частности и про sweep написано.
Как вы нас, непонятливых, на х не посылаете, удивительно...
да вот знаешь, держусь просто из последних сил. :)

Ответить