Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Database Server Software > Informix

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-20-2008, 04:17 PM
Thomas J. Girsch
 
Posts: n/a
Default Nasty IDS 10.00.UC6 bug

FYI, we've recently encountered a particularly nasty bug that seems to
first appear in IDS 10.00.UC6. It involves tables where the record size
is larger than the page size. When a session that's accessing a table
causes the table to need to add an extent, that session goes into a
critical section and stays there for quite some time. When the table is
small, it's just for a few seconds, but as the table grows (to around
200 MB, for example) this time increases dramatically. And the problem
becomes more acute when a checkpoint hits. Since the checkpoint can't
clear until all sessions leave their critical sections, the checkpoint
hangs up waiting on the session. In my testing, when my test table got
to around 200 MB, we had an 87 second (!) checkpoint.

To my knowledge, IBM has not yet assigned a bug # to this issue, but we
still have a PMR open.

Downgrading to UC5 eliminated this problem. I also suspect you could
work around this by using configurable page size to put the table in
pages where a whole record fits on a page, but I have not yet tested
this approach. (It took several hours just to get to a point where we
realized adding extents was the problem). On systems with 2K pages,
tables whose row size is < 2,020 bytes seem to work just fine; it's only
when the row size exceeds the page size (and thus get remainder pages)
that we start to observe the problem.

If you're getting unexplained long checkpoints, this might be a place to
start.

This also brings up a side point: I've got the 2,020 number burned into
my head as "what fits on a 2K page" from at least the 7.x days, maybe
even the 5.x days. Is that still true today? Also, what's the formula
for figuring out what fits on a page for larger pages? Do you deduct a
flat 28 bytes, or is it some multiple of the page size?

Thanks,

- TJG
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-20-2008, 04:17 PM
bozon
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

On Aug 28, 12:29 am, "Thomas J. Girsch" <tgir...@NOSPAM.gmail.com>
wrote:
> FYI, we've recently encountered a particularly nasty bug that seems to
> first appear in IDS 10.00.UC6. It involves tables where the record size
> is larger than the page size. When a session that's accessing a table
> causes the table to need to add an extent, that session goes into a
> critical section and stays there for quite some time. When the table is
> small, it's just for a few seconds, but as the table grows (to around
> 200 MB, for example) this time increases dramatically. And the problem
> becomes more acute when a checkpoint hits. Since the checkpoint can't
> clear until all sessions leave their critical sections, the checkpoint
> hangs up waiting on the session. In my testing, when my test table got
> to around 200 MB, we had an 87 second (!) checkpoint.
>
> To my knowledge, IBM has not yet assigned a bug # to this issue, but we
> still have a PMR open.
>
> Downgrading to UC5 eliminated this problem. I also suspect you could
> work around this by using configurable page size to put the table in
> pages where a whole record fits on a page, but I have not yet tested
> this approach. (It took several hours just to get to a point where we
> realized adding extents was the problem). On systems with 2K pages,
> tables whose row size is < 2,020 bytes seem to work just fine; it's only
> when the row size exceeds the page size (and thus get remainder pages)
> that we start to observe the problem.
>
> If you're getting unexplained long checkpoints, this might be a place to
> start.
>
> This also brings up a side point: I've got the 2,020 number burned into
> my head as "what fits on a 2K page" from at least the 7.x days, maybe
> even the 5.x days. Is that still true today? Also, what's the formula
> for figuring out what fits on a page for larger pages? Do you deduct a
> flat 28 bytes, or is it some multiple of the page size?
>
> Thanks,
>
> - TJG


I believe it is still 28 bytes for larger page sizes. Also, you can
still only store 255 or 256 records on a page because the number of
slot entries have not changed.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 04-20-2008, 04:17 PM
bozon
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

On Aug 28, 10:37 am, bozon <cur...@crowson1.com> wrote:
> On Aug 28, 12:29 am, "Thomas J. Girsch" <tgir...@NOSPAM.gmail.com>
> wrote:
>
>
>
> > FYI, we've recently encountered a particularly nasty bug that seems to
> > first appear in IDS 10.00.UC6. It involves tables where the record size
> > is larger than the page size. When a session that's accessing a table
> > causes the table to need to add an extent, that session goes into a
> > critical section and stays there for quite some time. When the table is
> > small, it's just for a few seconds, but as the table grows (to around
> > 200 MB, for example) this time increases dramatically. And the problem
> > becomes more acute when a checkpoint hits. Since the checkpoint can't
> > clear until all sessions leave their critical sections, the checkpoint
> > hangs up waiting on the session. In my testing, when my test table got
> > to around 200 MB, we had an 87 second (!) checkpoint.

>
> > To my knowledge, IBM has not yet assigned a bug # to this issue, but we
> > still have a PMR open.

>
> > Downgrading to UC5 eliminated this problem. I also suspect you could
> > work around this by using configurable page size to put the table in
> > pages where a whole record fits on a page, but I have not yet tested
> > this approach. (It took several hours just to get to a point where we
> > realized adding extents was the problem). On systems with 2K pages,
> > tables whose row size is < 2,020 bytes seem to work just fine; it's only
> > when the row size exceeds the page size (and thus get remainder pages)
> > that we start to observe the problem.

>
> > If you're getting unexplained long checkpoints, this might be a place to
> > start.

>
> > This also brings up a side point: I've got the 2,020 number burned into
> > my head as "what fits on a 2K page" from at least the 7.x days, maybe
> > even the 5.x days. Is that still true today? Also, what's the formula
> > for figuring out what fits on a page for larger pages? Do you deduct a
> > flat 28 bytes, or is it some multiple of the page size?

>
> > Thanks,

>
> > - TJG

>
> I believe it is still 28 bytes for larger page sizes. Also, you can
> still only store 255 or 256 records on a page because the number of
> slot entries have not changed.


have should be has in the above.

Also, is this really widespread or is it only with a certain platform?
I was starting to evaluate FC6 but now I am worried because we have
several tables that have more than 2020 max page size.

We found that going to 16k helped performance on larger tables because
you don't have the remainder pages. On our star schema historical
reporting database where every table has large max page sizes we saved
almost 40% because every record wasn't really close to the maximum but
Informix would put each record on its own page if the max size was
greater than 2020.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 04-20-2008, 04:17 PM
Art S. Kagel
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

On Aug 28, 12:29 am, "Thomas J. Girsch" <tgir...@NOSPAM.gmail.com>
wrote:
<SNIP>

Doesn't sound like fun!

> This also brings up a side point: I've got the 2,020 number burned into
> my head as "what fits on a 2K page" from at least the 7.x days, maybe
> even the 5.x days. Is that still true today? Also, what's the formula
> for figuring out what fits on a page for larger pages? Do you deduct a
> flat 28 bytes, or is it some multiple of the page size?


Almost, you subtract the size of the page header - 24bytes - the page
trailer - 4 bytes - and the size of the one row's slot entry - 4 bytes
- for a total of 32byte making the largest record on a 2K page
actually 2016 bytes. The 2020 you're remembering is the amount of
data space on a 2K page which you use to determine how many rows of a
particular size (< pagesize) will fit on a page, ie:

rows_per_page = 2020 / (rowsize + 4)

This formula shows that exactly 1 row of 2016 bytes fits on a page
with no free space left wasted.

For the general case with adjustable pagesize you'd use:

rows_per_page = (pagesize - 28) / (rowsize + 4)

Art S. Kagel

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 04-20-2008, 04:17 PM
Art S. Kagel
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

On Aug 28, 11:16 am, bozon <cur...@crowson1.com> wrote:
> On Aug 28, 10:37 am, bozon <cur...@crowson1.com> wrote:

<SNIP>
> We found that going to 16k helped performance on larger tables because
> you don't have the remainder pages. On our star schema historical
> reporting database where every table has large max page sizes we saved
> almost 40% because every record wasn't really close to the maximum but
> Informix would put each record on its own page if the max size was
> greater than 2020.


Actually, for variable sized rows, IDS will not place a row on a page
if the remaining free space is less than the maximum size of a row.
So if you have a row with a minimum size and maximum size such that
the min plus the max is more than (pagesize - 36) only one row will be
placed on a page.

Art S. Kagel

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #6 (permalink)  
Old 04-20-2008, 04:17 PM
bozon
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

On Aug 28, 12:26 pm, "Art S. Kagel" <art.ka...@gmail.com> wrote:
> On Aug 28, 11:16 am, bozon <cur...@crowson1.com> wrote:
>
> > On Aug 28, 10:37 am, bozon <cur...@crowson1.com> wrote:

> <SNIP>
> > We found that going to 16k helped performance on larger tables because
> > you don't have the remainder pages. On our star schema historical
> > reporting database where every table has large max page sizes we saved
> > almost 40% because every record wasn't really close to the maximum but
> > Informix would put each record on its own page if the max size was
> > greater than 2020.

>
> Actually, for variable sized rows, IDS will not place a row on a page
> if the remaining free space is less than the maximum size of a row.
> So if you have a row with a minimum size and maximum size such that
> the min plus the max is more than (pagesize - 36) only one row will be
> placed on a page.
>
> Art S. Kagel


Yep, which is what I was trying to say but didn't say it very well.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #7 (permalink)  
Old 04-20-2008, 04:17 PM
Thomas J. Girsch
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

Easy reproduction:

CREATE RAW TABLE bugtest (
col1 CHAR(2100)
) IN dbsp2kpg EXTENT SIZE 100000 NEXT SIZE 25000;

INSERT INTO bugtest
SELECT [char-column]
FROM [some-table-with-lots-of-rows];

Do this enough times in IDS10.00.xC6 to get the table up around 200MB,
and you'll start seeing the long checkpoints. Get it up around 1 GB,
and you'll REALLY see it get ugly.

On IDS10.00.UC5, everything works fine.

Thomas J. Girsch wrote:
> FYI, we've recently encountered a particularly nasty bug that seems to
> first appear in IDS 10.00.UC6. It involves tables where the record size
> is larger than the page size. When a session that's accessing a table
> causes the table to need to add an extent, that session goes into a
> critical section and stays there for quite some time. When the table is
> small, it's just for a few seconds, but as the table grows (to around
> 200 MB, for example) this time increases dramatically. And the problem
> becomes more acute when a checkpoint hits. Since the checkpoint can't
> clear until all sessions leave their critical sections, the checkpoint
> hangs up waiting on the session. In my testing, when my test table got
> to around 200 MB, we had an 87 second (!) checkpoint.
>
> To my knowledge, IBM has not yet assigned a bug # to this issue, but we
> still have a PMR open.
>
> Downgrading to UC5 eliminated this problem. I also suspect you could
> work around this by using configurable page size to put the table in
> pages where a whole record fits on a page, but I have not yet tested
> this approach. (It took several hours just to get to a point where we
> realized adding extents was the problem). On systems with 2K pages,
> tables whose row size is < 2,020 bytes seem to work just fine; it's only
> when the row size exceeds the page size (and thus get remainder pages)
> that we start to observe the problem.
>
> If you're getting unexplained long checkpoints, this might be a place to
> start.
>
> This also brings up a side point: I've got the 2,020 number burned into
> my head as "what fits on a 2K page" from at least the 7.x days, maybe
> even the 5.x days. Is that still true today? Also, what's the formula
> for figuring out what fits on a page for larger pages? Do you deduct a
> flat 28 bytes, or is it some multiple of the page size?
>
> Thanks,
>
> - TJG

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #8 (permalink)  
Old 04-20-2008, 04:17 PM
Neil Truby
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

Do you have a PMR and bug number yet, and do you know if it's fixed in xC7?

Thx
Neil

"Thomas J. Girsch" <tgirsch@NOSPAM.gmail.com> wrote in message
news:ds6dnd8DptSC30vbnZ2dnUVZ_o3inZ2d@comcast.com. ..
> Easy reproduction:
>
> CREATE RAW TABLE bugtest (
> col1 CHAR(2100)
> ) IN dbsp2kpg EXTENT SIZE 100000 NEXT SIZE 25000;
>
> INSERT INTO bugtest
> SELECT [char-column]
> FROM [some-table-with-lots-of-rows];
>
> Do this enough times in IDS10.00.xC6 to get the table up around 200MB, and
> you'll start seeing the long checkpoints. Get it up around 1 GB, and
> you'll REALLY see it get ugly.
>
> On IDS10.00.UC5, everything works fine.
>
> Thomas J. Girsch wrote:
>> FYI, we've recently encountered a particularly nasty bug that seems to
>> first appear in IDS 10.00.UC6. It involves tables where the record size
>> is larger than the page size. When a session that's accessing a table
>> causes the table to need to add an extent, that session goes into a
>> critical section and stays there for quite some time. When the table is
>> small, it's just for a few seconds, but as the table grows (to around 200
>> MB, for example) this time increases dramatically. And the problem
>> becomes more acute when a checkpoint hits. Since the checkpoint can't
>> clear until all sessions leave their critical sections, the checkpoint
>> hangs up waiting on the session. In my testing, when my test table got
>> to around 200 MB, we had an 87 second (!) checkpoint.
>>
>> To my knowledge, IBM has not yet assigned a bug # to this issue, but we
>> still have a PMR open.
>>
>> Downgrading to UC5 eliminated this problem. I also suspect you could
>> work around this by using configurable page size to put the table in
>> pages where a whole record fits on a page, but I have not yet tested this
>> approach. (It took several hours just to get to a point where we
>> realized adding extents was the problem). On systems with 2K pages,
>> tables whose row size is < 2,020 bytes seem to work just fine; it's only
>> when the row size exceeds the page size (and thus get remainder pages)
>> that we start to observe the problem.
>>
>> If you're getting unexplained long checkpoints, this might be a place to
>> start.
>>
>> This also brings up a side point: I've got the 2,020 number burned into
>> my head as "what fits on a 2K page" from at least the 7.x days, maybe
>> even the 5.x days. Is that still true today? Also, what's the formula
>> for figuring out what fits on a page for larger pages? Do you deduct a
>> flat 28 bytes, or is it some multiple of the page size?
>>
>> Thanks,
>>
>> - TJG



Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #9 (permalink)  
Old 04-20-2008, 04:17 PM
mark.scranton@gmail.com
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

On Aug 29, 9:54 pm, "Neil Truby" <neil.tr...@ardenta.com> wrote:
> Do you have a PMR and bug number yet, and do you know if it's fixed in xC7?
>
> Thx
> Neil
>
> "Thomas J. Girsch" <tgir...@NOSPAM.gmail.com> wrote in messagenews:ds6dnd8DptSC30vbnZ2dnUVZ_o3inZ2d@comca st.com...
>
> > Easy reproduction:

>
> > CREATE RAW TABLE bugtest (
> > col1 CHAR(2100)
> > ) IN dbsp2kpg EXTENT SIZE 100000 NEXT SIZE 25000;

>
> > INSERT INTO bugtest
> > SELECT [char-column]
> > FROM [some-table-with-lots-of-rows];

>
> > Do this enough times in IDS10.00.xC6 to get the table up around 200MB, and
> > you'll start seeing the long checkpoints. Get it up around 1 GB, and
> > you'll REALLY see it get ugly.

>
> > On IDS10.00.UC5, everything works fine.

>
> > Thomas J. Girsch wrote:
> >> FYI, we've recently encountered a particularly nasty bug that seems to
> >> first appear in IDS 10.00.UC6. It involves tables where the record size
> >> is larger than the page size. When a session that's accessing a table
> >> causes the table to need to add an extent, that session goes into a
> >> critical section and stays there for quite some time. When the table is
> >> small, it's just for a few seconds, but as the table grows (to around 200
> >> MB, for example) this time increases dramatically. And the problem
> >> becomes more acute when a checkpoint hits. Since the checkpoint can't
> >> clear until all sessions leave their critical sections, the checkpoint
> >> hangs up waiting on the session. In my testing, when my test table got
> >> to around 200 MB, we had an 87 second (!) checkpoint.

>
> >> To my knowledge, IBM has not yet assigned a bug # to this issue, but we
> >> still have a PMR open.

>
> >> Downgrading to UC5 eliminated this problem. I also suspect you could
> >> work around this by using configurable page size to put the table in
> >> pages where a whole record fits on a page, but I have not yet tested this
> >> approach. (It took several hours just to get to a point where we
> >> realized adding extents was the problem). On systems with 2K pages,
> >> tables whose row size is < 2,020 bytes seem to work just fine; it's only
> >> when the row size exceeds the page size (and thus get remainder pages)
> >> that we start to observe the problem.

>
> >> If you're getting unexplained long checkpoints, this might be a place to
> >> start.

>
> >> This also brings up a side point: I've got the 2,020 number burned into
> >> my head as "what fits on a 2K page" from at least the 7.x days, maybe
> >> even the 5.x days. Is that still true today? Also, what's the formula
> >> for figuring out what fits on a page for larger pages? Do you deduct a
> >> flat 28 bytes, or is it some multiple of the page size?

> or the general case with adjustable pagesize you'd use:


rows_per_page = min((pagesize - 28) / (rowsize + 4),255)

Art S. Kagel
> >> Thanks,

>
> >> - TJG


Let me add a small bit to Mr. Kagel's comment...don't forget that the
255 rows limit on DATA pages is still in place, regardless of page
size. Not true (has never been) for index pages, but data pages, yes.
This is due to the ROWID format of 0xLLLLLLSS, where SS = slot/row
number on the page. Range for 1 byte (SS) is 0-255. One would think
that it's 256 then, but we take the first slot, slot 0, for the page
trailing timestamp.

Also - all of the above is premised on the row fitting onto the page.
IF a row has to be split across pages, you need to add a 4-byte
forward pointer to each row that is split, 1 per remainder page.

HTH -
Mark Scranton




rows_per_page = min((pagesize - 28) / (rowsize + 4),255)



Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #10 (permalink)  
Old 04-20-2008, 04:17 PM
Art S. Kagel
 
Posts: n/a
Default Re: Nasty IDS 10.00.UC6 bug

On Aug 30, 10:57 am, "mark.scran...@gmail.com"
<mark.scran...@gmail.com> wrote:
> On Aug 29, 9:54 pm, "Neil Truby" <neil.tr...@ardenta.com> wrote:
>
>
>
> > Do you have a PMR and bug number yet, and do you know if it's fixed in xC7?

>
> > Thx
> > Neil

>
> > "Thomas J. Girsch" <tgir...@NOSPAM.gmail.com> wrote in messagenews:ds6dnd8DptSC30vbnZ2dnUVZ_o3inZ2d@comca st.com...

>
> > > Easy reproduction:

>
> > > CREATE RAW TABLE bugtest (
> > > col1 CHAR(2100)
> > > ) IN dbsp2kpg EXTENT SIZE 100000 NEXT SIZE 25000;

>
> > > INSERT INTO bugtest
> > > SELECT [char-column]
> > > FROM [some-table-with-lots-of-rows];

>
> > > Do this enough times in IDS10.00.xC6 to get the table up around 200MB, and
> > > you'll start seeing the long checkpoints. Get it up around 1 GB, and
> > > you'll REALLY see it get ugly.

>
> > > On IDS10.00.UC5, everything works fine.

>
> > > Thomas J. Girsch wrote:
> > >> FYI, we've recently encountered a particularly nasty bug that seems to
> > >> first appear in IDS 10.00.UC6. It involves tables where the record size
> > >> is larger than the page size. When a session that's accessing a table
> > >> causes the table to need to add an extent, that session goes into a
> > >> critical section and stays there for quite some time. When the table is
> > >> small, it's just for a few seconds, but as the table grows (to around 200
> > >> MB, for example) this time increases dramatically. And the problem
> > >> becomes more acute when a checkpoint hits. Since the checkpoint can't
> > >> clear until all sessions leave their critical sections, the checkpoint
> > >> hangs up waiting on the session. In my testing, when my test table got
> > >> to around 200 MB, we had an 87 second (!) checkpoint.

>
> > >> To my knowledge, IBM has not yet assigned a bug # to this issue, but we
> > >> still have a PMR open.

>
> > >> Downgrading to UC5 eliminated this problem. I also suspect you could
> > >> work around this by using configurable page size to put the table in
> > >> pages where a whole record fits on a page, but I have not yet tested this
> > >> approach. (It took several hours just to get to a point where we
> > >> realized adding extents was the problem). On systems with 2K pages,
> > >> tables whose row size is < 2,020 bytes seem to work just fine; it's only
> > >> when the row size exceeds the page size (and thus get remainder pages)
> > >> that we start to observe the problem.

>
> > >> If you're getting unexplained long checkpoints, this might be a place to
> > >> start.

>
> > >> This also brings up a side point: I've got the 2,020 number burned into
> > >> my head as "what fits on a 2K page" from at least the 7.x days, maybe
> > >> even the 5.x days. Is that still true today? Also, what's the formula
> > >> for figuring out what fits on a page for larger pages? Do you deduct a
> > >> flat 28 bytes, or is it some multiple of the page size?

> > or the general case with adjustable pagesize you'd use:

>
> rows_per_page = min((pagesize - 28) / (rowsize + 4),255)
>
> Art S. Kagel
>
> > >> Thanks,

>
> > >> - TJG

>
> Let me add a small bit to Mr. Kagel's comment...don't forget that the
> 255 rows limit on DATA pages is still in place, regardless of page
> size. Not true (has never been) for index pages, but data pages, yes.
> This is due to the ROWID format of 0xLLLLLLSS, where SS = slot/row
> number on the page. Range for 1 byte (SS) is 0-255. One would think
> that it's 256 then, but we take the first slot, slot 0, for the page
> trailing timestamp.
>
> Also - all of the above is premised on the row fitting onto the page.
> IF a row has to be split across pages, you need to add a 4-byte
> forward pointer to each row that is split, 1 per remainder page.
>
> HTH -
> Mark Scranton
>
> rows_per_page = min((pagesize - 28) / (rowsize + 4),255)


Just an aside to put Mark's worthy and correct update in perspective
before anyone starts to complain that IBM needs to fix this little bit
of apparent sillyness:

255 rows on a 2K page means each row must be <= 3bytes (+4 for the
slot entry - 7 * 255 = 1785 8*255 = 2040)
4K
<= 11bytes
8K
<= 28bytes
16K
<= 60 bytes

This shows that the 255 slot limit isn't an impractical one (how
practical would the ability to have 404 one bytes rows be anyway -
especially given that the one byte can only hold 256 unique
values?). 8^}

Art S. Kagel

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
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
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 07:56 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
UnixAdminTalk.com

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403