Bringing Internals to the Surface Internals Concepts for Highly Effective Engines Mark Scranton Principal Consultant/Trainer Informix Denver www.markscranton.com.

Download Report

Transcript Bringing Internals to the Surface Internals Concepts for Highly Effective Engines Mark Scranton Principal Consultant/Trainer Informix Denver www.markscranton.com.

Bringing Internals to
the Surface
Internals Concepts for
Highly Effective
Engines
Mark Scranton
Principal Consultant/Trainer
Informix Denver
www.markscranton.com
Who Am I?
•
•
•
•
Principal Consultant/Trainer, Informix Denver
I do engines - XPS and IDS
5+ yrs with Informix
website - www.markscranton.com
• tips/tricks
• sql/scripts
• documents, presentations
Informix
user.conference
2
Presentation Overview
• This presentation will identify “internals”
concepts that appear to be trivia
• But they could be useful daily for maintenance
and support of IDS
• A strong working knowledge of IDS is assumed
• More info available in the “IDS Internal
Architecture” class
Informix
user.conference
3
Topics
• Physical pages vs. logical pages?
• Discussion about the value of knowing
the difference
• The dog has swallowed it’s tail
• ...or the tale of physical log overflow
• PARTNUMs - and the story of getting to data
• We’ve all seen them…what does it really mean?
Informix
user.conference
4
Topics
• The maximum number of extents for a table?
• Is there REALLY a max?
• Where did my row go?
• The long tale of the forward pointer
• The last topic
Informix
user.conference
5
Topic 1:
Logical Pages vs. Physical Pages
• Understanding the difference can help in:
•
•
•
•
•
Interpretation of msg log assertion failures
Interpretation of the extent list of a partition page
Lock level identification with respect to rowid(s)
Oncheck usage
A bunch of other stuff
Informix
user.conference
6
Physical Pages
• Always with respect to a chunk
• Numbering starts with 0
• Format:
0xCCCPPPPP
ccc - chunk number
ppppp - page offset into the chunk
Informix
user.conference
7
Physical Pages
Chunk 3
30023c 30023d
30023e 30023f
300240 300241 300242 300243
0xCCCPPPPP
c - chunk #
p - page offset
300244 300245 300246 300247
Informix
user.conference
8
Logical Pages
• Always with respect to a tablespace
• Numbering starts with 0
• Format simply 0 through x
Informix
user.conference
9
Logical Pages
30023e 30023f
extent 1 for
sparky
300240 300241 300242 300243
create table
sparky...
30023c 30023d
physical
page num
logical
page num
0
1
2
300244 300245 300246 300247
3
4
5
Usage Examples - Extent List
extent list on a partition page
(oncheck -pt skippy:sparky)
chunk 0x4
page 0x33
Informix
user.conference
11
Usage Examples - Bad Page
Informix
user.conference
12
Usage Examples - Lock Level
rowid format: 0xLLLLLLSS
L - logical page in the table
S - slot/row # on the page
onstat -k
oncheck -pp 0x100016 2
Informix
user.conference
13
Topic 2: Physical Log Overflow
Physical Log File
what
happens
now?
75% full: checkpoint
request is raised
back to the beginning, and keep writing!
1st before images of modified cache pages
Informix
user.conference
14
Physical Log Overflow
Physical Log File
75% full: checkpoint
request is raised
• Two potential scenarios:
• the chkpt completes, and we give the physical log a
new logical beginning. In that case, we don’t care
about the overwritten pages
• if the engine falls over, you’ll most likely get stuck
in fast recovery when trying to come back up
Informix
user.conference
15
Topic 3: Partnums
• Three areas focused on here:
• What is a partnum?
• How do we use it to get to stuff
• What is a tablespace tablespace?
Informix
user.conference
16
Definitions
• Tablespace tablespace
• Keeps track of tablespaces, or partitions,
in a dbspace
• Each dbspace has one
• Typical allocation is 50 pages for each extent
• Partition page
• A page in a tablespace tablespace
• Typically one page per tablespace
• It “describes” the tablespace
Informix
user.conference
17
partnum
Logical page num
within the tablespace
tablespace (starting at 0)
dbspace number
(starting at 1)
0x D D D L L L L L
1 1/2 bytes
(3 nibbles, or
3 hex digits)
2 1/2 bytes
(5 nibbles, or
5 hex digits)
4 bytes
Informix
user.conference
18
rootdbs
database tablespace
name
owner
created
sparky
informix 11-11-1999
flags
partnum
00200003
SELECT *sparky;
FROM mud;
DATABASE
dbspace4
tablespace tablespace
page 3c
CREATE
mud; sparky IN dbspace4;
CREATETABLE
DATABASE
systables
database
sparky
name
partnum
mud 0020003c
19
extents
for
mud
Informix
user.conference
table
mud
Topic 4: Max Number of Extents
• What’s the maximum number of extents
for a tablespace?
• Consider the previous topic, and the use
of the partition page for a tablespace
Informix
user.conference
20
The Partition Page
Informix
user.conference
21
The Partition Page
oncheck -pt skippy:sparky
Informix
user.conference
22
Oh by the Way...
• Do you really want to know the max?
• Fragmentation changes the max
for a logical table
• 4K vs. 2K pages
Informix
user.conference
23
Topic 5: Forward Pointers
• Forward pointer - a 4-byte number that “points”
to the remainder pieces of a row that
spans pages
• Used with rows longer than a page
• Format is same as a rowid, although it’s NOT the
rowid for the row
• Used with varchars or really long rows
(rows longer than a page typically)
• We’ll focus on varchars ...
Informix
user.conference
24
Forward Pointers w/ varchars
• Problem - you can easily end up with a “chain”
of forward pointer/remainder portions of rows
• This can happen when you’ve updated a varchar
column and increased it’s size
• The new row size won’t fit into it’s old slot,
and so we:
• Move the row - all or some of it - to another page
• Leave back a 4-byte forward pointer
on the home page
Informix
user.conference
25
Forward Pointers w/ varchars
• This can happen as many times as it needs
• Every move adds an additional 8 bytes to the
row length
• 4 bytes for the forward pointer in the home page
• 4 bytes for the slot table entry on the
new/remainder page
Informix
user.conference
26
Forward Pointers
Informix
user.conference
27
What Can I Do?
• To rid yourself of the “chaining” effect:
• Unload/reload the table
• If the row will fit onto a single page, then there is no need
for the forward pointer
• If it’s grown to be larger than a page (actual row length),
then you’ll have at least one. This can’t be avoided - the
row is now longer than a page
• Alter index to cluster
• Same caveats as above
Informix
user.conference
28
Topic 7:
How Do You Find Out More?
• Attend the “IDS Internal Architecture” class
• 5 days - very intense use of oncheck, and topics
covered in this presentation
• Taught in Denver, Chicago, Menlo Park most often
• Watch TechNotes for a full white paper
on this topic
• Send me email - [email protected]
• Checkout the website - www.markscranton.com
Informix
user.conference
29
Thanks...
• For listening. Hope you learned something
• See you in class
Informix
user.conference
30