Таблица со множеством апдейтов и мусор.

ЧАстые Вопросы и Ответы

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

Ответить
Mironico
Сообщения: 81
Зарегистрирован: 17 янв 2007, 12:23

Таблица со множеством апдейтов и мусор.

Сообщение Mironico » 16 сен 2008, 13:14

Есть в проге одна талица - Ежедневный заказ товара.
Каждый день в нее загружаются из текстовика данные.
В основом это апдейты уже существующих строк
(обновляются цены,количества+всякие расчеты типа
запас товара, потребность, продажи за период).
Записей от 10 000 до 25 000 в зависимости от розн. точки.
Мусора собирается оч. много.
Свип интервал я увеличил до 100 000.
Периодически когда открывается форма с этим
набором данных автоматически запускается сборка мусора
и окно "задумывается" на несколько минут что тормозит
машину и как следствие кассовые места т.к. сервер
находится именно на этой машине где работают с
этой таблицей.
Еще с утра и вечером принудительно запускаю свип.

Посоветуйте как лучше справляться с мусором в данном случае.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Таблица со множеством апдейтов и мусор.

Сообщение WildSery » 16 сен 2008, 13:30

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

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

Re: Таблица со множеством апдейтов и мусор.

Сообщение kdv » 16 сен 2008, 22:02

Посоветуйте как лучше справляться с мусором в данном случае.
IBAnayst + лучше управлять транзакциями (вручную). Например, не держать долго активными обновляющие транзакции. тогда и мусор не будет накапливаться.

Mironico
Сообщения: 81
Зарегистрирован: 17 янв 2007, 12:23

Re: Таблица со множеством апдейтов и мусор.

Сообщение Mironico » 17 сен 2008, 11:26

Признаюсь, туповат, что читал я доки что не читал..одно.
Учусь только на примерах и когда сам дойду.

Я юзаю ФБ 2 и ФИБЫ из Делфей.
Я с пом. FIBQuery запускаю ХП, автостарт транзанкции стоит и автокоммит.
Все обработки в вышеуказанной форме делаются с пом. ХП, в которых
и делаются эти апдейты.
Хотя загрузка из файла делается так.
Лопатится файл и загоняет в спец таблицу, а из
таблицы опать же с пом ХП делаются инсерты/апдейты
уже в самой таблице заказа.
После всех хп переоткрываю Датасет.
gfix -sweep срабатывает только если закрыть программу,
при открытой мусор не собирает.
Что я не так делаю? Хелп.

Mironico
Сообщения: 81
Зарегистрирован: 17 янв 2007, 12:23

Re: Таблица со множеством апдейтов и мусор.

Сообщение Mironico » 17 сен 2008, 12:58

О, ребята, подскажите пожалуйста как
узнать прошла хп или не прошла.
Есть у меня проблема на кассовых местах.
ХП при продаже снимает проданное колво
с остатка товара. Почему-то не всегда
снимает.
Привожу саму хп.
Первый цикл должен снимать количества а второй
добавлять строки в протокол продаж.
fp1 - это таблица, где формируется содержимое чека.
tovars - товары
partions - партии.

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

CREATE PROCEDURE FP1_MINUS_KOL (
    dateadd_ timestamp,
    n_chek integer,
    n_z integer,
    kassa_sn varchar(6))
returns (
    tovar_kod_ integer,
    kolvo_ double precision,
    discont_number_ varchar(13),
    ser_kod_ integer,
    ser_ varchar(30),
    skidka_ double precision,
    summa_ double precision,
    price_ double precision,
    strixkod_ varchar(16),
    tovar_name_ varchar(50),
    id_part integer,
    vsum double precision)
as
begin
    for SELECT fp1.id_part, fp1.kolvo
        FROM fp1
        into :id_part, :vsum do
        begin
            update partions p
            set p.kolvo=p.kolvo - :vsum
            where p.id_part=:id_part;
        end
    for SELECT fp1.tovar_name,
               fp1.strixkod,
               fp1.price,
               fp1.kolvo,
               fp1.summa,
               fp1.skidka,
               fp1.ser,
               fp1.ser_kod,
               fp1.tovar_kod,
               fp1.discont_number
        FROM fp1
        into tovar_name_,
             strixkod_,
             price_,
             kolvo_,
             summa_,
             skidka_,
             ser_,
             ser_kod_,
             tovar_kod_,
             discont_number_ do
        begin
        INSERT INTO PROTOCOLSELLS
            (
                ID_PROTOCOL,
                KASS_SN,
                K,
                TOVAR_KOD,
                STRIXKOD,
                TOVAR_NAME,
                KOLVO,
                PRICE,
                SUMMA,
                STATUS,
                DATEADD,
                CHEK,
                SER,
                SER_KOD,
                SKIDKA,
                DISCONT_NUMBER,
                NUMZ
            )
            VALUES(
                gen_id(GEN_PROTOCOLSELLS_ID,1),
                :KASSA_SN,
                1,
                :TOVAR_KOD_,
                :STRIXKOD_,
                :TOVAR_NAME_,
                :KOLVO_,
                :PRICE_,
                :SUMMA_,
                0,
                :dateadd_,
                :N_CHEK,
                :SER_,
                :SER_KOD_,
                :SKIDKA_,
                :DISCONT_NUMBER_,
                :N_Z
            );
        end
end

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Таблица со множеством апдейтов и мусор.

Сообщение WildSery » 17 сен 2008, 14:42

Видимо, не всегда запускается.
Либо, как вариант, множественный апдейт вызывает дедлок, процедура завершается с ошибкой, а у тебя в программе тупо TRY ... EXCEPT END; гасит всё.

Mironico
Сообщения: 81
Зарегистрирован: 17 янв 2007, 12:23

Re: Таблица со множеством апдейтов и мусор.

Сообщение Mironico » 17 сен 2008, 14:45

Да нету у меня попыток.
Вот все что делается.

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

    Query.SQL.Text:='select * from fp'+IntToStr(MForm.N_FP)+'_minus_kol(:p1,:p2,:p3,:p4)';
    Query.ParamByName('p1').AsDateTime:=now();
    Query.ParamByName('p2').AsInteger:=n_chek;
    Query.ParamByName('p3').AsInteger:=numz;
    Query.ParamByName('p4').AsString:=sn;
    Query.ExecQuery;
    Query.Close;

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Таблица со множеством апдейтов и мусор.

Сообщение WildSery » 17 сен 2008, 15:00

А где транзакции?

Mironico
Сообщения: 81
Зарегистрирован: 17 янв 2007, 12:23

Re: Таблица со множеством апдейтов и мусор.

Сообщение Mironico » 17 сен 2008, 17:07

В Query стоит автокомит и авто старт транзакции.
Я думал что этого достаточно.

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

Re: Таблица со множеством апдейтов и мусор.

Сообщение kdv » 17 сен 2008, 17:10

Я с пом. FIBQuery запускаю ХП, автостарт транзанкции стоит и автокоммит.
то есть, фиг знает, когда транзакции стартуют, и когда завершаются.
Признаюсь, туповат, что читал я доки что не читал..одно.
http://www.ibase.ru/devinfo/ibx.htm , читать в конце статьи про транзакции.
gfix -sweep срабатывает только если закрыть программу,
при открытой мусор не собирает.
http://www.ibase.ru/devinfo/mga.htm
мусор - это никому не нужные версии от ЗАВЕРШЕННЫХ транзакций. Которые собираются
как мусор только если эти версии не нужны АКТИВНЫМ транзакциям.
http://www.ibase.ru/devinfo/summary.htm
В Query стоит автокомит и авто старт транзакции.
Я думал что этого достаточно.
полный караул. что ты читал-то тогда ? :)

Mironico
Сообщения: 81
Зарегистрирован: 17 янв 2007, 12:23

Re: Таблица со множеством апдейтов и мусор.

Сообщение Mironico » 17 сен 2008, 17:35

Млин. А для чего ж тогда свойства автокоммит
и автостарт транзакции?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Таблица со множеством апдейтов и мусор.

Сообщение WildSery » 17 сен 2008, 18:24

Для умеющих их готовить. А может, для того, чтобы хоть что-нибудь работало вообще без кода.

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

Re: Таблица со множеством апдейтов и мусор.

Сообщение kdv » 18 сен 2008, 02:14

Млин. А для чего ж тогда свойства автокоммит
и автостарт транзакции?
а зачем тебе тогда ФИБПлюс? Переходи на BDE, там управлять транзакциями не надо, даже наоборот, проблематично, если захочется.
Вместо кверей - засандаль везде TTable, и вперед.

Mironico
Сообщения: 81
Зарегистрирован: 17 янв 2007, 12:23

Re: Таблица со множеством апдейтов и мусор.

Сообщение Mironico » 18 сен 2008, 10:10

Боже, да не нервничайте так!
Откуда ж я знал что этими свойствами лучше
не пользоваться.
Разве не логично было с моей стороны
думать что их достаточно?
Там более в описаниях фибов везде пишется
про них как избавление программистов от лишней работы
с транзакциями.
Вот вы мне подсказали - теперь буду знать и переделывать.

Вопрос еще. Как насчет FIBDataSet?
Каждый инсерт и апдейт тоже руцями нужно транзакциями
управлять? Я имею ввиду когда гридом пользоваться.

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

Re: Таблица со множеством апдейтов и мусор.

Сообщение kdv » 18 сен 2008, 11:03

Боже, да не нервничайте так!
Откуда ж я знал что этими свойствами лучше
не пользоваться.
я не нервничаю, мне пофиг.
Разве не логично было с моей стороны думать что их достаточно?
по-моему нет, не логично.
Там более в описаниях фибов везде пишется
про них как избавление программистов от лишней работы с транзакциями.
это плохо. я даже полез посмотреть что там в
http://www.devrace.com/ru/fibplus/articles/2169.php
написано. Прискорбно. много текста, какие-то странные действия, и никаких объяснений, почему и зачем это делается...
Вопрос еще. Как насчет FIBDataSet?
Каждый инсерт и апдейт тоже руцями нужно транзакциями
управлять? Я имею ввиду когда гридом пользоваться.
слушай, иди уже, почитай
www.ibase.ru/devinfo/ibx.htm
я третий раз предлагать не буду...

Ответить