[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
------