32
1 Performance Data: What is Important and How Do I Make Sense of It Adam Backman A Nice Guy, DBAppraise

1 Performance Data: What is Important and How Do I Make Sense of It Adam Backman A Nice Guy, DBAppraise

Embed Size (px)

Citation preview

1

Performance Data: What is Important and How Do I Make

Sense of It

Adam BackmanA Nice Guy, DBAppraise

2

Shameless Plug

• DBAppraise is an OpenEdge specific database monitoring service

• DBAppraise provides our clients with the ability to offload as much of the DBA function as they need

• Customized to your environment• Backed by some of the top OpenEdge DBAs in

the world

3

A little note

All the information in the world is worth nothing if you cannot interpret it.

4

Agenda

• Why do you need a monitor?• Monitoring Alternatives• What Are VSTs?• ProTop Basic Capabilities• Advanced Features

5

Why monitor?

• Performance matters• Your workload changes– Number of users– Number of Records

• Application changes• Change in the weather

6

Monitoring

• You need to document where you are now• Change one thing at a time so you know the

affect of changes• Document what constitutes “good”

performance• Keeping historical records allows for targeted

future planning

7

Monitoring Tools/Services

• Free– Glance– top– promon– ProTop

• Not Free– OpenEdge Management (product)– DBAppraise (service)

8

What Are VSTs?

• Virtual System Tables• A 4GL View of Progress Data Structures (the

same as those shown in PROMON.)• No Performance Impact (mostly)• Primarily Read-Only• Knowing what to use can be a challenge

9

Some VST Quirks• Updateable:– _startup._spin– Private buffers

• Table & Index Ranges: -tablebase, -tablerangesize-indexbase, -indexrangesize – Table & Index Window can be reset!

• Quirky Keys:– _myconnection…– _tablestat & _indexstat

10

11

ProTop Basic Capabilities

• Summary Data• Blocked Clients & Open Transactions• Table & Index Activity• User Activity• Storage Area Capacity• Estimating Big B• Latches & Resources• Clients & Servers

12

Summary Data11:32:52 ProTop xvi -- Progress Database Monitor 07/05/05

Sample sports [/db/sports] Rate

Hit Ratio: 182:1 195:1 Commits: 149 195 Sessions: 2057

Miss% : 0.549% 0.512% Latch Waits: 13 16 Local: 953

Hit% : 99.45% 99.48% Tot/Mod Bufs: 60002 3167 Remote: 956

Log Reads: 76342 80927 Evict Bufs: 2 1 Batch: 1045

OS Reads: 419 414 Lock Table: 1516 3 Server: 97

Rec Reads: 23789 23619 LkHWM|OldTrx: 1392 00:00 Other: 51

Log/Rec: 3.2091 3.4264 Old/Curr BI: 54 54 TRX: 26

Area Full: 1 98.60% After Image: Disabled Blocked: 0

13

Blocked Sessions

Blocked Sessions

Usr Name Note

----- ------------ ----------------------------------

24 tom REC XQH 102 [Order] julia

14

Record Locks

• Nice to know• Generally, expensive• _Lock is not indexed

15

Locked Records

for each _Lock no-lock while _Lock-usr <> ?:

if _Lock-recid = _Connect-wait1 then

do:

find _file where _file._file-num = _Lock-table no-error.

bxtbl = _file._file-name.

end.

if _Lock-usr = _Connect-usr then

bxwait = bxwait + “ “ + _Lock-flags.

else

bxque = bxque + " " + _Lock-name.

end.

bxnote = bxtbl + bxwait + bxque.

16

Open TransactionsOpen Transactions

Usr Name TRX Num BI Clstr Start Trx Stat Duration Wait

---- ----- -------- -------- -------- -------- -------- ----------

9 root 2432897 1024 15:39:05 ACTIVE 00:00:01 -- 29440

20 root 2432896 - ALLOCATE 00:00:00 -- 20115

5 root 2432898 1024 15:39:06 ACTIVE 00:00:00 -- 21952

7 root 2432899 1024 15:39:06 ACTIVE 00:00:00 -- 19040

23 julia 2418661 - ALLOCATE 00:00:00 -- 0

22 tom 2417938 - ALLOCATE 00:00:00 -- 0

17

Table ActivityTable Statistics

Tbl# Table Name Create Read Update Delete

---- ---------------- --------- --------- --------- ---------

4 OrderLine 0 444 11 0

18 Order 0 98 1 0

24 POLine 0 92 1 0

23 PurchaseOrder 0 42 1 0

21 Bin 0 5 0 0

2 Customer 0 4 0 0

1 Invoice 0 1 0 0

10 Employee 0 0 0 0

13 Family 0 0 0 0

18

Table Stats

/** This does NOT work if –tablebase <> 1!!!

find _File no-lock where _File._File-num = p_tbl no-error.

find _TableStat no-lock where _TableStat-id = p_tbl no-error.

display p_tbl _file-num _TableStat-id.

**/

/*** use the following: ***/

find _TableStat no-lock where _TableStat-id = p_tbl no-error.

find _File no-lock where _File._File-num = _TableStat-id no-error.

display p_tbl _file-num _TableStat-id.

19

Index Activity

Index Statistics

Idx# Index Name Create Read Split Delete BlkDel

---- --------------- -- ------ ------ ------ ------ ------

22 orderline PU 0 44 0 0 0

12 CustNum PU 0 3 0 0 0

2 _File/Field PU 0 0 0 0 0

3 _Field-Name U 0 0 0 0 0

5 _File/Index PU 0 0 0 0 0

20

User IO ActivityUIO

Usr Name Flags PID DB Access OS Rd OS Wr Hit%

---- ------- ----- ------ --------- ----- ----- -------

13 tom SB 13590 2266 200 1 91.13%

10 jami SB 13584 190 6 1 97.10%

16 julia SB 13596 185 6 1 97.03%

17 peter SB 13598 181 5 1 97.07%

15 emily SB 13594 177 5 1 97.12%

11 tiger SB* 13586 166 4 0 97.58%

14 tucker SB 13592 159 5 1 97.10%

19 granite SB 13602 146 1 0 99.25%

7 astro SB 13578 145 4 1 97.16%

21

Estimating Big B

Big B GuessTimator

Pct Big B % db Size Hit:1 Miss% Hit% OS Rd

----- --------- --------- ----- ------ ------- -----

10% 6000 0.124% 30 3.306% 96.694% 1343

25% 15001 0.311% 48 2.091% 97.909% 849

50% 30001 0.622% 68 1.479% 98.521% 601

100% 60002 1.243% 96 1.046% 98.954% 425 <=

150% 90003 1.865% 117 0.854% 99.146% 347

200% 120004 2.486% 135 0.739% 99.261% 300

400% 240008 4.973% 191 0.523% 99.477% 213

22

Big B

MissPct = 100 * ( 1 – ( LogRd – OSRd ) / LogRd )).

HitPct = 100 – MissPct.

OSRd = LogRd * ( MissPct / 100 ).

m2 = m1 * exp(( b1 / b2 ), 0.5 ).

23

Latch WaitsLatch Waits

Id Latch Requests Waits Lock%

--- -------------------- ---------- ---------- -------

28 MTL_BF4 5540 33 99.40%

17 MTL_BHT 4205 106 97.49%

21 MTL_LRU 4154 55 98.68%

10 MTL_LHT 1800 24 98.65%

15 MTL_LKF 1798 0 100.00%

26 MTL_BF2 1218 6 99.48%

27 MTL_BF3 1184 10 99.13%

25 MTL_BF1 1150 10 99.16%

4 MTL_OM 913 4 99.60%

24

Resource WaitsResource Waits

Id Resource Locks Waits Lock%

--- -------------------- ---------- ---------- -------

10 DB Buf S Lock 2661 0 100.00%

6 Record Get 658 0 100.00%

7 DB Buf Read 40 0 100.00%

2 Record Lock 21 0 100.00%

11 DB Buf X Lock 11 0 100.00%

19 TXE Share Lock 11 0 100.00%

8 DB Buf Write 3 0 100.00%

21 TXE Commit Lock 2 0 100.00%

1 Shared Memory 0 0 0.00%

3 Schema Lock 0 0 0.00%

25

Servers and ClientsServers

Srv Type Port Con Max MRecv MSent RRecv RSent QSent TimeSlice

--- ----- ----- --- --- ----- ----- ----- ----- ----- ---------

1 Login 7150 0 1 0 0 0 0 0 0

2 Auto 1026 10 55 0 0 0 0 0 0

3 Auto 1027 10 55 23 13 0 6 10 86

Server IO

Srv Type Port Con Max DB Access OS Rd OS Wr Hit%

--- ----- ---- --- --- --------- ----- ------ -------

19 Auto 1043 10 55 5041 2 0 99.96%

20 Auto 1044 10 55 1348 1 0 99.96%

18 Auto 1042 10 55 157 1 0 99.51%

16 Auto 1040 10 55 42 1 0 98.70%

26

Storage Area Capacity

Area Statistics

Area Area Name Blocks Hi Water Free %Used RPB Note

---- ------------- ------- -------- ------- ------- --- ---------

1 Control Area 31 9 22 29.03% 64

3 Primary Recovery 31998 30720 1278 96.01% 1

6 Schema Area 11711 10688 1023 91.26% 64 i(25) **

7 Cust_Dat 895975 602498 293477 67.24% 64 t(48)

8 Cust_Idx 191991 115270 76721 60.04% 64 i(157)

9 Sales_Dat 1311962 1103066 208896 84.08% 64 t(41)

10 Sales_Idx 271986 184401 87585 67.80% 64 i(125)

27

Storage Area Capacity

for each _AreaStatus no-lock, _Area no-lock where

_Area._Area-num = _AreaStatus._AreaStatus-Areanum:

bfree = _AreaStatus-Totblocks - _AreaStatus-Hiwater.

if ( _AreaStatus-Freenum <> ? ) then

bfree = bfree + _AreaStatus-Freenum.

if bfree = ? then bfree = _AreaStatus-totblocks.

used = (( _AreaStatus-totblocks - bfree) /

_AreaStatus-totblocks ) * 100.

end.

28

Storage Area Contents

for each _storageobject no-lock where

_storageobject._area-number = xid and

_storageobject._object-num > 0 and

_storageobject._object-associate > 0:

if _storageobject._object-type = 1 then

so_tbl = so_tbl + 1.

else if _storageobject._object-type = 2 then

so_idx = so_idx + 1.

end.

29

Balancing IODatabase File IO

Id Extent Name Mode Blksz Reads Writes Extends

---- ------------------- -------- ----- ------ ------- --------

12 sports2000_11.d1 BUFIO 1024 28 3 0

6 sports2000_8.d1 BUFIO 1024 9 0 0

13 sports2000_11.d2 BOTHIO 1024 6 0 0

1 sports2000.db BOTHIO 1024 2 0 0

3 sports2000.d1 BOTHIO 1024 1 0 0

4 sports2000_7.d1 BUFIO 1024 1 0 0

8 sports2000_9.d1 BUFIO 1024 1 0 0

10 sports2000_10.d1 BUFIO 1024 1 0 0

2 sports2000.b1 UNBUFIO 8192 0 1 0

9 sports2000_9.d2 BOTHIO 1024 0 0 0

30

ProTop Architecture

• VST Based

• Multi-Platform– UNIX Character– HTML– Windows GUI

• Using Publish & Subscribe

31

DBAppraise

• It is a service not a product• Have us cover as much of the DBA function as

you want • 24x7 access to OpenEdge expertise• Please visit DBAppraise.com for more

information and a demo

32

Questions