dbTalk Databases Forums  

[Info-Ingres] interpreting log_trace output

comp.databases.ingres comp.databases.ingres


Discuss [Info-Ingres] interpreting log_trace output in the comp.databases.ingres forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Martin Bowes
 
Posts: n/a

Default [Info-Ingres] interpreting log_trace output - 05-14-2009 , 04:01 AM






Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. I have an
insert of 140000 rows, each row being 171 bytes. The log file is
composed of 500000 x 4k buffers. The table being inserted is a heap
structure with no secondary indexes or constraints. There are no rules
being fired by the insert. The only transaction in the logfile is this
insert.



And yet it blows the log file.



Using log_trace on a small scale example:....

************************************************** ******************

LOG: BT Size written/reserved: 80/ 56 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

...and then 10 more puts ...

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

...and then 10 more puts ...

LOG: BMINI Size written/reserved: 0/ 0 Flags:

LOG: EXTEND Size written/reserved: 676/ 676 Flags:

LOG: EMINI Size written/reserved: 40/ 0 Flags: CLR

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:



To me, this looks like it's saying each row takes 276 bytes to write and
that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the
logging overhead was about 70bytes not 105. Or am I misinterpretting the
written/reserved figures?

2. 11 * 276 = 3036 < 4096...so it doesn't look like we are filling the
log buffers.



But if we get 11 rows per buffer, the entire transaction should take
(140000/11)=12727 buffers.



Double that for CLR's, and call it 26000 buffers.



How the hell did we just blow the 500000 buffer log file out of the
water?



Martin Bowes





Reply With Quote
  #2  
Old   
Paul Mason
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 05:54 AM






I gave up long ago trying to predict logging usage with any kind of accuracy
- disk is too cheap relative to my time/patience

However this does look excessive. If you can get an installation to yourself
you might want to re-run your small test and do a logdump and see what it's
actually logging.

Also check your patch notes for the fix to bug 119663 - though that was
specifically too much reserved space.

HTH
Paul

2009/5/14 Martin Bowes <martin.bowes (AT) ctsu (DOT) ox.ac.uk>

Quote:
Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. I have an
insert of 140000 rows, each row being 171 bytes. The log file is composedof
500000 x 4k buffers. The table being inserted is a heap structure with no
secondary indexes or constraints. There are no rules being fired by the
insert. The only transaction in the logfile is this insert.



And yet it blows the log file.



Using log_trace on a small scale example:….

************************************************** ******************

LOG: BT Size written/reserved: 80/ 56 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

…and then 10 more puts …

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

…and then 10 more puts …

LOG: BMINI Size written/reserved: 0/ 0 Flags:

LOG: EXTEND Size written/reserved: 676/ 676 Flags:

LOG: EMINI Size written/reserved: 40/ 0 Flags: CLR

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:



To me, this looks like it’s saying each row takes 276 bytes to write and
that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the logging
overhead was about 70bytes not 105. Or am I misinterpretting the
written/reserved figures?

2. 11 * 276 = 3036 < 4096…so it doesn't look like we are filling thelog
buffers.



But if we get 11 rows per buffer, the entire transaction should take
(140000/11)=12727 buffers.



Double that for CLR's, and call it 26000 buffers.



How the hell did we just blow the 500000 buffer log file out of the water?



Martin Bowes



_______________________________________________
Info-Ingres mailing list
Info-Ingres (AT) kettleriverconsulting (DOT) com
http://www.kettleriverconsulting.com...fo/info-ingres



--
Paul Mason



Reply With Quote
  #3  
Old   
John Smedley
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 06:12 AM



Hi Marty,



Quote:
From the log_trace information that you have provided shows that when
you have filled a page another one is being "added" to the heap, this is
the:



LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:



So you need to add that to your calculation.



When the table has reached the end of its allocated pages, the default
is 4 pages, then the table is extended, the default is 16 pages, when an
extend is done this is seen as:



LOG: BMINI Size written/reserved: 0/ 0 Flags:

LOG: EXTEND Size written/reserved: 676/ 676 Flags:

LOG: EMINI Size written/reserved: 40/ 0 Flags: CLR



So you need to add that to your calculation.



It is better to pre-allocate the space up front, use the modify
statement with clause "allocation = n" and allocate something large and
also use the modify with clause "extend = n" again to something larger
than 16. Both of these will cut down on the log writes and will also
speed up the insert process.



As for how much is being logged per row, remember that there is not only
a "logging overhead" per row but there is also a row overhead because
you are using a page size greater that 2K.



Hope this helps



John







From: info-ingres-bounces (AT) kettleriver...ting (DOT) com
[mailto:info-ingres-bounces (AT) kettleriverconsulting (DOT) com] On Behalf Of
Martin Bowes
Sent: 14 May 2009 10:02
To: Ingres and related product discussion forum
Subject: [Info-Ingres] interpreting log_trace output



Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. I have an
insert of 140000 rows, each row being 171 bytes. The log file is
composed of 500000 x 4k buffers. The table being inserted is a heap
structure with no secondary indexes or constraints. There are no rules
being fired by the insert. The only transaction in the logfile is this
insert.



And yet it blows the log file.



Using log_trace on a small scale example:....

************************************************** ******************

LOG: BT Size written/reserved: 80/ 56 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

...and then 10 more puts ...

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

...and then 10 more puts ...

LOG: BMINI Size written/reserved: 0/ 0 Flags:

LOG: EXTEND Size written/reserved: 676/ 676 Flags:

LOG: EMINI Size written/reserved: 40/ 0 Flags: CLR

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:



To me, this looks like it's saying each row takes 276 bytes to write and
that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the
logging overhead was about 70bytes not 105. Or am I misinterpretting the
written/reserved figures?

2. 11 * 276 = 3036 < 4096...so it doesn't look like we are filling the
log buffers.



But if we get 11 rows per buffer, the entire transaction should take
(140000/11)=12727 buffers.



Double that for CLR's, and call it 26000 buffers.



How the hell did we just blow the 500000 buffer log file out of the
water?



Martin Bowes






Reply With Quote
  #4  
Old   
Karl & Betty Schendel
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 06:18 AM




On May 14, 2009, at 5:01 AM, Martin Bowes wrote:

Quote:
Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. ...

[snip]
To me, this looks like it’s saying each row takes 276 bytes to
write and that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the
logging overhead was about 70bytes not 105. Or am I
misinterpretting the written/reserved figures?

The log record overhead for a put is on the order of 36 bytes plus
the standard
log record header, which is about 50-ish bytes. But it turns out
that it
also logs the table name and owner as part of the put record. That
is probably
where your extra bytes are.

Quote:
2. 11 * 276 = 3036 < 4096…so it doesn't look like we are filling
the log buffers.

The EMINI's are forced, so the log buffer is written unconditionally
at that point,
no matter how full it is. They aren't often enough to explain your
numbers,
though.

It might be forcing because of writing out cache pages, but that
seems a bit odd
as well; no reason that the table pages should be so picked on.

I wonder if your version was still forcing ALLOC's. That would
explain some of
the excessive log writing, at least. There was a change dated early
last
year to stop forcing ALLOC log records on fast commit, sole-cache
servers;
I have no idea how that change date translates to versions and
patches, though.
If your Ingres predates this change, it will be forcing ALLOC's and
EXTEND's;
the latter occurs immediately before the EMINI which is also forced. It
could be wasting the equivalent of 3 or 4 log buffers at every extend
point,
which is 16 table pages for the default extend= setting.

Quote:
But if we get 11 rows per buffer, the entire transaction should
take (140000/11)=12727 buffers.

Double that for CLR's, and call it 26000 buffers.

How the hell did we just blow the 500000 buffer log file out of the
water?



Well, remember that force abort limit is usually something like 70% of
the log, so you don't really have 500,000 blocks. But it does seem like
something is astray, or at least not understood.

Karl




Reply With Quote
  #5  
Old   
Martin Bowes
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 07:05 AM



Hi All,



The more I've run my test case, and examined the log with logdump, the
more I've come to the thought that the users aren't telling me
everything. Something else must be happening behind the scenes which my
test case isn't emulating...because it's logging as I would expect and
not blowing the log out of the water.



I've decided that I need to get more information about what they are
doing...so I've turned on query text auditing for the period of time in
which this program is run. Plus I'll sample the logstat on a per minute
basis during this period and drop some logdumps to disk as well.



Paranoid...me? Why are you all against me!



Marty



From: info-ingres-bounces (AT) kettleriver...ting (DOT) com
[mailto:info-ingres-bounces (AT) kettleriverconsulting (DOT) com] On Behalf Of Paul
Mason
Sent: 14 May 2009 11:54
To: Ingres and related product discussion forum
Subject: Re: [Info-Ingres] interpreting log_trace output



I gave up long ago trying to predict logging usage with any kind of
accuracy - disk is too cheap relative to my time/patience

However this does look excessive. If you can get an installation to
yourself you might want to re-run your small test and do a logdump and
see what it's actually logging.

Also check your patch notes for the fix to bug 119663 - though that was
specifically too much reserved space.

HTH
Paul

2009/5/14 Martin Bowes <martin.bowes (AT) ctsu (DOT) ox.ac.uk>

Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. I have an
insert of 140000 rows, each row being 171 bytes. The log file is
composed of 500000 x 4k buffers. The table being inserted is a heap
structure with no secondary indexes or constraints. There are no rules
being fired by the insert. The only transaction in the logfile is this
insert.



And yet it blows the log file.



Using log_trace on a small scale example:....

************************************************** ******************

LOG: BT Size written/reserved: 80/ 56 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

...and then 10 more puts ...

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:

...and then 10 more puts ...

LOG: BMINI Size written/reserved: 0/ 0 Flags:

LOG: EXTEND Size written/reserved: 676/ 676 Flags:

LOG: EMINI Size written/reserved: 40/ 0 Flags: CLR

LOG: ALLOC Size written/reserved: 101/ 148 Flags:

LOG: OVERFLOW Size written/reserved: 101/ 148 Flags:

LOG: PUT Size written/reserved: 276/ 152 Flags:



To me, this looks like it's saying each row takes 276 bytes to write and
that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the
logging overhead was about 70bytes not 105. Or am I misinterpretting the
written/reserved figures?

2. 11 * 276 = 3036 < 4096...so it doesn't look like we are filling the
log buffers.



But if we get 11 rows per buffer, the entire transaction should take
(140000/11)=12727 buffers.



Double that for CLR's, and call it 26000 buffers.



How the hell did we just blow the 500000 buffer log file out of the
water?



Martin Bowes




_______________________________________________
Info-Ingres mailing list
Info-Ingres (AT) kettleriverconsulting (DOT) com
http://www.kettleriverconsulting.com...fo/info-ingres




--
Paul Mason



Reply With Quote
  #6  
Old   
Michael Leo
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 08:37 AM



Quote:
Paranoid…me? Why are you all against me!

Marty

You aren't paranoid if they actually ARE out to get you.





Reply With Quote
  #7  
Old   
Robert Kibble
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 08:44 AM



What exact version are you on?

The bug Karl is referring to is bug 119663, I believe:

119663
(GENERIC)
The transaction logging process reserves far more space than is
required for recovery, especially when the transaction log file
has a large buffer size.


-----Original Message-----
From: info-ingres-bounces (AT) kettleriver...ting (DOT) com
[mailto:info-ingres-bounces (AT) kettleriverconsulting (DOT) com] On Behalf Of Karl
& Betty Schendel
Sent: 14 May 2009 12:19
To: Ingres and related product discussion forum
Subject: Re: [Info-Ingres] interpreting log_trace output


On May 14, 2009, at 5:01 AM, Martin Bowes wrote:

Quote:
Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. ...

[snip]
To me, this looks like it's saying each row takes 276 bytes to
write and that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the
logging overhead was about 70bytes not 105. Or am I
misinterpretting the written/reserved figures?

The log record overhead for a put is on the order of 36 bytes plus
the standard
log record header, which is about 50-ish bytes. But it turns out
that it
also logs the table name and owner as part of the put record. That
is probably
where your extra bytes are.

Quote:
2. 11 * 276 = 3036 < 4096...so it doesn't look like we are filling
the log buffers.

The EMINI's are forced, so the log buffer is written unconditionally
at that point,
no matter how full it is. They aren't often enough to explain your
numbers,
though.

It might be forcing because of writing out cache pages, but that
seems a bit odd
as well; no reason that the table pages should be so picked on.

I wonder if your version was still forcing ALLOC's. That would
explain some of
the excessive log writing, at least. There was a change dated early
last
year to stop forcing ALLOC log records on fast commit, sole-cache
servers;
I have no idea how that change date translates to versions and
patches, though.
If your Ingres predates this change, it will be forcing ALLOC's and
EXTEND's;
the latter occurs immediately before the EMINI which is also forced. It
could be wasting the equivalent of 3 or 4 log buffers at every extend
point,
which is 16 table pages for the default extend= setting.

Quote:
But if we get 11 rows per buffer, the entire transaction should
take (140000/11)=12727 buffers.

Double that for CLR's, and call it 26000 buffers.

How the hell did we just blow the 500000 buffer log file out of the
water?



Well, remember that force abort limit is usually something like 70% of
the log, so you don't really have 500,000 blocks. But it does seem like
something is astray, or at least not understood.

Karl


_______________________________________________
Info-Ingres mailing list
Info-Ingres (AT) kettleriverconsulting (DOT) com
http://www.kettleriverconsulting.com...fo/info-ingres



Reply With Quote
  #8  
Old   
Martin Bowes
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 08:58 AM



Hi Robert,

II 9.0.4 (a64.lnx/105)NPTL + p12707


That bug does not appear to be in this patch.

Marty
-----Original Message-----
From: info-ingres-bounces (AT) kettleriver...ting (DOT) com
[mailto:info-ingres-bounces (AT) kettleriverconsulting (DOT) com] On Behalf Of
Robert Kibble
Sent: 14 May 2009 14:45
To: Ingres and related product discussion forum
Subject: Re: [Info-Ingres] interpreting log_trace output

What exact version are you on?

The bug Karl is referring to is bug 119663, I believe:

119663
(GENERIC)
The transaction logging process reserves far more space than is
required for recovery, especially when the transaction log file
has a large buffer size.


-----Original Message-----
From: info-ingres-bounces (AT) kettleriver...ting (DOT) com
[mailto:info-ingres-bounces (AT) kettleriverconsulting (DOT) com] On Behalf Of Karl
& Betty Schendel
Sent: 14 May 2009 12:19
To: Ingres and related product discussion forum
Subject: Re: [Info-Ingres] interpreting log_trace output


On May 14, 2009, at 5:01 AM, Martin Bowes wrote:

Quote:
Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. ...

[snip]
To me, this looks like it's saying each row takes 276 bytes to
write and that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the
logging overhead was about 70bytes not 105. Or am I
misinterpretting the written/reserved figures?

The log record overhead for a put is on the order of 36 bytes plus
the standard
log record header, which is about 50-ish bytes. But it turns out
that it
also logs the table name and owner as part of the put record. That
is probably
where your extra bytes are.

Quote:
2. 11 * 276 = 3036 < 4096...so it doesn't look like we are filling
the log buffers.

The EMINI's are forced, so the log buffer is written unconditionally
at that point,
no matter how full it is. They aren't often enough to explain your
numbers,
though.

It might be forcing because of writing out cache pages, but that
seems a bit odd
as well; no reason that the table pages should be so picked on.

I wonder if your version was still forcing ALLOC's. That would
explain some of
the excessive log writing, at least. There was a change dated early
last
year to stop forcing ALLOC log records on fast commit, sole-cache
servers;
I have no idea how that change date translates to versions and
patches, though.
If your Ingres predates this change, it will be forcing ALLOC's and
EXTEND's;
the latter occurs immediately before the EMINI which is also forced. It
could be wasting the equivalent of 3 or 4 log buffers at every extend
point,
which is 16 table pages for the default extend= setting.

Quote:
But if we get 11 rows per buffer, the entire transaction should
take (140000/11)=12727 buffers.

Double that for CLR's, and call it 26000 buffers.

How the hell did we just blow the 500000 buffer log file out of the
water?



Well, remember that force abort limit is usually something like 70% of
the log, so you don't really have 500,000 blocks. But it does seem like
something is astray, or at least not understood.

Karl


_______________________________________________
Info-Ingres mailing list
Info-Ingres (AT) kettleriverconsulting (DOT) com
http://www.kettleriverconsulting.com...fo/info-ingres

_______________________________________________
Info-Ingres mailing list
Info-Ingres (AT) kettleriverconsulting (DOT) com
http://www.kettleriverconsulting.com...fo/info-ingres



Reply With Quote
  #9  
Old   
Karl & Betty Schendel
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 09:01 AM




On May 14, 2009, at 9:44 AM, Robert Kibble wrote:

Quote:
What exact version are you on?

The bug Karl is referring to is bug 119663, I believe:

119663
(GENERIC)
The transaction logging process reserves far more space
than is
required for recovery, especially when the transaction log
file
has a large buffer size.

Yes, that's the one. If I understand the fix properly, the bug went
deeper than just reservations; it caused a lot of excess log forcing,
which wastes written (not just reserved) log space.

Karl


Quote:
-----Original Message-----
From: info-ingres-bounces (AT) kettleriver...ting (DOT) com
[mailto:info-ingres-bounces (AT) kettleriverconsulting (DOT) com] On Behalf Of
Karl
& Betty Schendel
Sent: 14 May 2009 12:19
To: Ingres and related product discussion forum
Subject: Re: [Info-Ingres] interpreting log_trace output


On May 14, 2009, at 5:01 AM, Martin Bowes wrote:

Hi everyone,



I'm running on 9.0.4 and it appears to be logging excessively. ...

[snip]
To me, this looks like it's saying each row takes 276 bytes to
write and that we appear to be getting 11 rows per buffer.



So then:

1. Why is an insert of 171 bytes taking 276 to log? I thought the
logging overhead was about 70bytes not 105. Or am I
misinterpretting the written/reserved figures?

The log record overhead for a put is on the order of 36 bytes plus
the standard
log record header, which is about 50-ish bytes. But it turns out
that it
also logs the table name and owner as part of the put record. That
is probably
where your extra bytes are.

2. 11 * 276 = 3036 < 4096...so it doesn't look like we are filling
the log buffers.

The EMINI's are forced, so the log buffer is written unconditionally
at that point,
no matter how full it is. They aren't often enough to explain your
numbers,
though.

It might be forcing because of writing out cache pages, but that
seems a bit odd
as well; no reason that the table pages should be so picked on.

I wonder if your version was still forcing ALLOC's. That would
explain some of
the excessive log writing, at least. There was a change dated early
last
year to stop forcing ALLOC log records on fast commit, sole-cache
servers;
I have no idea how that change date translates to versions and
patches, though.
If your Ingres predates this change, it will be forcing ALLOC's and
EXTEND's;
the latter occurs immediately before the EMINI which is also
forced. It
could be wasting the equivalent of 3 or 4 log buffers at every extend
point,
which is 16 table pages for the default extend= setting.

But if we get 11 rows per buffer, the entire transaction should
take (140000/11)=12727 buffers.

Double that for CLR's, and call it 26000 buffers.

How the hell did we just blow the 500000 buffer log file out of the
water?



Well, remember that force abort limit is usually something like 70% of
the log, so you don't really have 500,000 blocks. But it does seem
like
something is astray, or at least not understood.

Karl


_______________________________________________
Info-Ingres mailing list
Info-Ingres (AT) kettleriverconsulting (DOT) com
http://www.kettleriverconsulting.com...fo/info-ingres

_______________________________________________
Info-Ingres mailing list
Info-Ingres (AT) kettleriverconsulting (DOT) com
http://www.kettleriverconsulting.com...fo/info-ingres



Reply With Quote
  #10  
Old   
Martin Bowes
 
Posts: n/a

Default Re: [Info-Ingres] interpreting log_trace output - 05-14-2009 , 09:04 AM



Hi Mike,



I've had too much good luck lately, I'm now terrified of the bad luck
I'm storing up. The Karma pixies will ensure the world comes back into
balance for me very shortly.



Its going to be *bad*.



Something like...I just farted...it's bowel cancer, that's the way those
bloody Karma pixies work.



In a desperate attempt to rack up a few more Cosmic Karma points, I just
'volunteered' the missus for Malaria research.



Does that count?



Marty



From: info-ingres-bounces (AT) kettleriver...ting (DOT) com
[mailto:info-ingres-bounces (AT) kettleriverconsulting (DOT) com] On Behalf Of
Michael Leo
Sent: 14 May 2009 14:37
To: Ingres and related product discussion forum
Cc: John Smedley
Subject: Re: [Info-Ingres] interpreting log_trace output





Paranoid...me? Why are you all against me!



Marty





You aren't paranoid if they actually ARE out to get you.







Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.