[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Dlugie transakcje




Witam,

jezeli ktos jest zainteresowany to znalazlem artykul dotyczacy dlugich
transakcji. Zamieszczam go ponizej.


Pozdrowienia,

Jacek Sapinski


INTRODUCTION:
=============

When a Progress client has got a transaction open, either small
or large, no space in the before image is reused causing the bi-
file to grow.

This is an example script to monitor active transactions and
disconnect the user who has a transaction open for a time you
can specify.


# @(#) timeout
DBNAME=sports   # Database name
TIMEOUT=30      # Timeout in minutes before disconnecting user
LOOPTIME=300    # Time between checks in seconds

: ${DBNAME?'You must first set DLC'} # Only V7.3C or later and V8

# Calculate minutes
time2min()
{
        HOUR=`echo $1 | cut -d: -f1`
        MIN=`echo $1 | cut -d: -f2`
        MINUTES=`expr $MIN + $HOUR \* 60`
        #echo USR=$USR TIME=$TIME HOUR=$HOUR MIN=$MIN MINUTES=$MINUTES

}
> $0.out

while true
do
        if [ ! -f "$DBNAME.lk" ]
        then
                echo $0: ERROR No broker running for database $DBNAME
                exit
        fi
        tput clear
        echo  "R&D\n1\n4\n3\n\n\n\n\n\n\n\n\n\n\nX\n" |
                promon $DBNAME 2>/dev/null > $0.out

        # Only look at local clients. (SELF)
        egrep "SELF|Usr" $0.out | sort +7 > $0.out2
        date
        head -15 $0.out2
        echo ---------------------------------------------------------
----------
        if [ `wc -l <$0.out2` -lt 2 ]
        then
                echo No users with open transactions.
                echo "Sleep $LOOPTIME seconds...\c" ; sleep $LOOPTIME
                continue
        fi
        USR=`head -1 $0.out2 | awk '{ print $1 }'`
        TIME=`head -1 $0.out2 | awk '{ print $7 }'`
        time2min $TIME ; MIN1=$MINUTES
        time2min `date '+%H:%M'` ; MIN2=$MINUTES
        MINDIFF=`expr $MIN2 - $MIN1`
        if [ "$MINDIFF" -gt "$TIMEOUT" ]
        then
                # Disconnect the user now:
                echo "Transaction timeout of more then $TIMEOUT min on
 user $USR
, initiating disconnect..."
                #echo "RETURN\c" ; read ANS
                proshut $DBNAME -C disconnect $USR
        else
                echo "User $USR has open transaction for $MINDIFF minu
te(s)."
        fi
        echo "Sleep $LOOPTIME seconds...\c" ; sleep $LOOPTIME
done







From: RYSZKIEWICZ Piotr @zeto.bydgoszcz.pl  on 04/02/2002
      15:22

Please respond to progress@zeto.bydgoszcz.pl

Sent by:  owner-progress@zeto.bydgoszcz.pl


                                                                          
 To:   progress@zeto.bydgoszcz.pl                                         
                                                                          
                                                                          
 cc:                                                                      
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
 Subje                                    RE: Dlugie transakcje           
 ct:                                                                      
                                                                          




> -----Original Message-----
> From: Henryk Jusza [mailto:henju@pg.gda.pl]
> Sent: Monday, February 04, 2002 2:41 PM
> To: progress@zeto.bydgoszcz.pl
> Subject: Re: Dlugie transakcje
>
>
> opiekuje sie baza Progress 9.1 na systemie AIX 4.3.  Ostatnio
> zdarzylo mi
> sie kilka razy, ze baza danych zatrzymala sie. Powodem tego bylo
> zapelnienie pliku BI.  Prawdopodobnie przyczyna tego byla "dluga
> transakcja". Ktos rozpoczal transakcje i .. poszedl do domu.
>
> Witam !
>
> Nie bardzo rozumiem co to znaczy "zapełnienie pliku bi". Plik
> ten zmienia swoją wielkość w miarę potrzeb i nie bardzo wiem
> jak się może "zapełnić'.
>
> Jeśli sformułowanie to oznacza, że na dysku zabrakło miejsca
> na ten plik i serwer nie mógł go rozszerzyć, to przyczyna
> tego jest raczej inna niż to, że ktoś poszedł do domu. To
> sugeruje raczej, że któryś z programów aplikacji
> korzystających z bazy zbyt dużo danych aktualizuje w jednej
> transakcji. Jest to czasami efekt nie zamierzony, jeśli
> programista piszący ten program zrobił to nie myśląc co z
> tego wyniknie. Taki program trzeba poprawić, chyba że
> rzeczywiście jedna transkacja musi zawierać bardzo dużo
> aktualizacji bazy, to wtedy należy plik .bi  umieścić na
> innym dysku z większą ilością wolnego miejsca (lub na kilku
> dyskach - wiele woluminów). Jeśli taka transakcja zajmuje
> dużo różnych zapisów, to ochroną przed tym może być
> ustawienie parametru startowego serwera -L (ilość blokad) na
> mniejszą wartość. Wtedy program, który chce zająć dużo
> zapisów upadnie i będzie wiadomo który to program jest
> przyczyna problemów.
>
> Gdyby ktoś poszedł do domu i zostawił otwartą transakcję (w
> której nie wykonuje się zbyt dużej ilości aktualizacji), to
> plik .bi by nie rósł, a pracę innych programów korzystających
> z bazy wstrzymywałyby raczej blokady EXCLUSIVE-LOCK
> niektórych zapisów, do których chciałyby się dostać
> wstrzymane programy.
>
> Pozdrawiam,
>
>
> Henryk Jusza               mailto:henju@pg.gda.pl

Witam,

Pozwole sobie sie nie zgodzic. Pozostawienie dlugo otwartej transakcii
rzeczywiscie powoduje narastanie pliku .bi. Dzieje sie tak dlatego,
ze BI cluster, w ktorym znajduje sie informacja o otwartej transakcii
az do zakonczenia transakcii jest oznaczony jako 'busy', w zwiazku z
czym baza nie moze ponownie do niego pisac w momencie, kiedy BI cluster
chain dostanie sie ponownie do tego clustera. W tym momencie jest
automatycznie wytwarzany i dolaczany do lancucha nowy cluster - .bi rosnie.
Moze nie opisalem tego zbyt zrozumiale, polecam przeczytac dokumentacje
"Database Administration Guide and Reference", rozdzial 12.5.2 - Before
Image I/O.

A teraz co z tym zrobic.
Pomysl monitorowania _trans jest dobry, ja bym tylko dodal trzecia
mozliwosc reakcji - odlaczenie uzytkownika od bazy. Lub jeszcze lepiej
po pierwszej godzinie automatyczne wygenerowanie mailu a po drugiej
odlaczenie.

Pozdrawiam,

Piotr Ryszkiewicz
------
Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy:  listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------





------
Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy:  listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------