OE11.5.1 Win32: May I ask for comments about protop performa

Posted by Stefan Marquardt on 20-May-2016 07:38

         Hit%     91.57          Commits:     3,813         New RM:    3,553       Oldest TRX:  00:00:00   Connections:      15
   Log Reads:    11,346            Undos:         0        From RM:    3,549     Curr BIClstr:        84       Brokers:       1
    OS Reads:       956     Lock Tbl HWM:       388      From Free:        3   Oldest BIClstr:        83   4gl Servers:       1
   Rec Reads:     3,815     Curr # Locks:         4       Examined:    3,699      Checkpoints:        83   SQL Servers:       0
 LogRd/RecRd:      2.97    Modified Bufs:    10,361       Front2Bk:        0   Curr AI Extent:  Disabled   4gl Clients:       5
  Log Writes:    16,256      IO Response:      6.38      Remove Lk:        0     Curr AI Seq#:         0   SQL Clients:       0
   OS Writes:     1,056         BogoMIPS:      4.17                             Empty AI Exts:        -1    App Server:       3
 Rec Creates:         0         BogoMIP%:     91.67                              Full AI Exts:        -1           BIW:       1
 Rec Updates:     3,813                                                                                            AIW:       0
 Rec Deletes:         0            Notes:    23,885               0                APW Writes:     1,034          APWs:       3
   Rec Locks:     7,624    BIW/AIW Write%        94               0                 APW Write%        98          WDOG:       1
   Rec Waits:         0    Writes to Log:       370               0              Bufs Scanned:        32         Local:       1
 Idx Blk Spl:         0   BIW/AIW Writes:       346               0             APW Scan Wrts:         0        Remote:       0
 Resrc Waits:       837   Partial Buf Wr:         1               0                APW Q Wrts:         0         Batch:       7
 Latch Waits:        29   Busy Buf Waits:         9               0              Chkpt Q Wrts:     1,034           TRX:       1
                           Empty Buf Wts:        30               0              Flushed Bufs:         0       Blocked:       0
┌───────────────────────────────────────────────────────── Table Activity ─────────────────────────────────────────────────────────
│    Tbl# Area# Table Name                            #Records        Turns     Create     Read v     Update     Delete    OS Read
│  ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ √    17    15 Table1                                                 0.00          0      2,734      2,734          0         56
│     267    20 Table2                                                 0.00          0      1,115      1,115          0        900
│     338    11 Table3                                                 0.00          0          0          0          0          0
┌───────────────────────────────────────────────────────── Index Activity ─────────────────────────────────────────────────────────
│    Idx# Area# Index Name                           Blocks Util   Idx Root     Create     Read v      Split     Delete BlkDl Note
│  ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ √    27    16 Table1.Main                               0   0%         87          0      2,698          0          0     0 P
│     589    21 Table2.Main                               0   0%         15          0      1,113          0          0     0 P
│     767    16 Table3.Main                               0   0%       1983          0          1          0          0     0 PU
┌──────────────────────────────────────────────────────── User IO Activity ────────────────────────────────────────────────────────
│   Usr# Name            PID      Flags Blk Ac v    OS Rd    OS Wr     Hit%  Rec Lck  Rec Wts  Line# Program Name
│  ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ √   17 User1           700      S4B*     16111       57       22   99.65%     5479        0
│     18 User2           59852    S4B*      7435      898        0   87.93%     2226        0
│     19 6748            6748     S4          12        0        0  100.00%        0        0
┌────────────────────────────────────────────────────────── Checkpoints ───────────────────────────────────────────────────────────
│     Chkpt# v  Start           Finish     Length         Dirty      ChkPtQ        Scan       APW Q     Flushed Duration Sync Time
│  ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ √         83  May 20 14:32:37            ?             11,766       8,245           0           0           0     0.12      0.11
│           82  May 20 14:32:27 14:32:37   00:00:10      11,053      11,053           2           0           0     0.35      0.34
│           81  May 20 14:32:15 14:32:26   00:00:11      10,789      10,786           0           0           0     0.14      0.13
│           80  May 20 14:32:04 14:32:14   00:00:10      10,862      10,855           0           0           0     0.21      0.19

All Replies

Posted by gus on 20-May-2016 07:58

i see nothing interesting or surprising

Posted by ChUIMonster on 20-May-2016 08:10

The "c" configuration screen would tell us interesting things too.

My initial impression is that you must have -B set quite small.  You have quite a few OS reads with very low demand.  So maybe you are scanning those tables.  If that is intentional then I suppose it is ok.

OTOH you seem to be updating as many records as you are reading.

3,800 TRX/sec is not horrible.   But you could probably improve things.  You might want to start by looking at the code and grouping multiple updates into a TRX.  50 or 100 at a time for instance rather than 1 update per TRX.

You have a lot of empty bi buffer waits.  I would increase -bibufs.  I don't know what your bi cluster size is.

You should run a dbanalys and put the output in the $PROTOP/dbanalys directory -- that way you can see how this activity compares to the table sizes and index characteristics.  (ProTop should do this for you in the background if you use the "A" command.)

I doubt that you need 3 APWs.

After-imaging is disabled.  Presumably this is a throw-away db?

IO response is not very good.  Is  this a SAN?  Or slow rotating rust?

BogoMIPs is decent.  That's a reasonably modern CPU.

Posted by ChUIMonster on 20-May-2016 08:15

(This post also shows how awful the communities website is at supporting technically focused content.  This ridiculous space wasting screen format drives me nuts.  Less than 20% of the my browser window is showing me useful content -- most if it is just empty.  Meanwhile the content of the post is almost unreadable because of the line wrapping that the website is forcing.  Communities should not be "Facebook for Progress".)

Posted by George Potemkin on 20-May-2016 08:23

One record update per transaction, 6 recovery notes per transaction (including RL_TBGN/RL_TEND notes), the average size of recovery notes is 127 bytes. Transactions are really small => inefficient.

No index creates/deletes?

Posted by Stefan Marquardt on 20-May-2016 11:18

   DB Version:    11.5.1 32bit       Sessions (-n):         61        PF Delay:         Not        Area Config: Extended, Mixed

   DB Up Time:        04:02:33      Max Srvs (-Mn):          6       PF Factor:           0%       # Ext Areas:              16

   Backup Age:        3d 10:08       Cnx/Srv (-Ma):         10        PF #Recs:          16       # of Extents:              19

 DB Bufs (-B):         115,002       Min Cnx (-Mi):         10     PF Priority:           0       Lrgst Extent:        63.59 GB

        -spin:           2,000       Max Msg (-Mm):      1,024       -Nmsgwait:           2        Schema Area:           Clean

Lock Tbl Size:       2,000,000       After-Imaging:   Disabled       -lruskips:           0       RPB Settings:           Mixed

DB Block Size:            8 KB         AI Archiver:  Available      -lru2skips:           0         Areas Full:               0

AI Block Size:            8 KB      OE Replication:  Available     -recspdepth:           0         Worst Area:               0

BI Block Size:            8 KB       Crash Protect:    Enabled             -B2:           0           AI Areas:               0

BI Clstr Size:           32 MB          BI IO (-r):   Reliable          -Bpmax:          64       AI Area Type:        Disabled

   AI Buffers:              20      BI Delay (-Mf):          3           -hash:      35,863       AI Sequence#:               0

   BI Buffers:              20      BI Cluster Age:          0        -semsets:           3      Tbl Stat Base:               1

      DB Size:          88,155           Direct IO:         No         -omsize:       1,024     Tbl Stat Range:             500

 Alloc Blocks:             128                 2PC:         No           -pica:          64        # of Tables:             380

   Var Blocks:          88,155        Tainted (-F):      Clean            -Mxs:          35      Idx Stat Base:               1

      BI Size:             128       Index Rebuild:         Ok      # SHM Segs:           1     Idx Stat Range:           1,000

     -bithold:               0         Large Files:    Enabled      SHM Seg Sz:    2,048 MB       # of Indexes:           1,345

     -bistall:        Disabled            Failover:  Available      SHM Pinned:         Yes          # of LOBs:               0

     -aistall:        Disabled         DB Auditing:  Available     -cpinternal:   ISO8859-1

Posted by Stefan Marquardt on 20-May-2016 11:24

This database is not production, I am testing the performance during the inital load of new fields in every table.

hQueryHandle:query-prepare("for each " + cTableName + " exclusive-lock where RecordGUID = ~"~"").

repeat transaction:

       hQueryHandle:get-next().

       if hQueryHandle:query-off-end = true then

           leave.

       assign

              hBufferHandle:buffer-field("RecordGUID"):buffer-value()    = guid(generate-uuid).                

end.

Posted by Stefan Marquardt on 20-May-2016 11:29

IO response is not very good: Yes, it's something somewhere attached to my virtual Windows Server for OpenEdge.

Do I need to complain at IT-OP?

Posted by Stefan Marquardt on 20-May-2016 11:33

"This post also shows how awful the communities website is at supporting technically focused content - See more at: community.progress.com/.../86864

And It was perfect during the creation in full screen mode!

Posted by Stefan Marquardt on 20-May-2016 11:37

Meanwhile the second job finished and with one job I have now 2-3 seconds checkpoints.

  Chkpt# v  Start           Finish     Length         Dirty      ChkPtQ        Scan       APW Q     Flushed Duration Sync Time

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

     4,242  May 20 18:36:20            ?              2,109         249           0           0           0     0.19      0.18

     4,241  May 20 18:36:18 18:36:20   00:00:02       2,106       2,069           1           0           0     0.10      0.10

     4,240  May 20 18:36:15 18:36:18   00:00:03       2,110       2,073           1           0           0     0.20      0.19

     4,239  May 20 18:36:12 18:36:15   00:00:03       2,153       2,068           0           0           0     0.18      0.17

     4,238  May 20 18:36:10 18:36:12   00:00:02       2,101       2,016           0           0          48     0.13      0.12

     4,237  May 20 18:36:07 18:36:10   00:00:03       2,207       2,170           0           0           0     0.24      0.23

     4,236  May 20 18:36:04 18:36:07   00:00:03       2,117       2,080           1           0           0     0.18      0.16

     4,235  May 20 18:36:01 18:36:04   00:00:03       2,109       2,072           0           0           0     0.23      0.22

Posted by Stefan Marquardt on 20-May-2016 11:38

I reduced the APWs too:

        Hit%     97.90          Commits:    12,424         New RM:   10,778       Oldest TRX:  00:00:00   Connections:      12

  Log Reads:    35,990            Undos:         0        From RM:   10,777     Curr BIClstr:     4,280       Brokers:       1

   OS Reads:       755     Lock Tbl HWM:       388      From Free:        1   Oldest BIClstr:     4,280   4gl Servers:       1

  Rec Reads:    12,428     Curr # Locks:         3       Examined:   11,114      Checkpoints:     4,279   SQL Servers:       0

LogRd/RecRd:      2.90    Modified Bufs:     2,097       Front2Bk:        0   Curr AI Extent:  Disabled   4gl Clients:       5

 Log Writes:    45,440      IO Response:      4.77      Remove Lk:        0     Curr AI Seq#:         0   SQL Clients:       0

  OS Writes:     1,110         BogoMIPS:      4.17                             Empty AI Exts:        -1    App Server:       1

Rec Creates:         0         BogoMIP%:     91.67                              Full AI Exts:        -1           BIW:       1

Rec Updates:    12,425                                                                                            AIW:       0

Rec Deletes:         0            Notes:    70,289               0                APW Writes:       751          APWs:       2

  Rec Locks:    24,851    BIW/AIW Write%        88               0                 APW Write%        68          WDOG:       1

  Rec Waits:         0    Writes to Log:     1,487               0              Bufs Scanned:        96         Local:       1

Idx Blk Spl:         0   BIW/AIW Writes:     1,307               0             APW Scan Wrts:         1        Remote:       1

Resrc Waits:        39   Partial Buf Wr:         1               0                APW Q Wrts:         0         Batch:       4

Latch Waits:         3   Busy Buf Waits:        38               0              Chkpt Q Wrts:       750           TRX:       1

                          Empty Buf Wts:       202               0              Flushed Bufs:         4       Blocked:       0

Posted by gus on 20-May-2016 11:44

> On May 20, 2016, at 9:16 AM, ChUIMonster wrote:

>

> This ridiculous space wasting screen format drives me nuts.

Low, low information desnity is the current fashion, Tom. It was a deliberate design goal to limit the amount of information per page, along with increasing the number clicks required to retrieve information.

Low information desnity became fashionable because it allows for more advertising and other useless stuff. That then became the norm for pages that don't have advertising as well.

Posted by George Potemkin on 20-May-2016 11:52

> Meanwhile the second job finished and with one job I have now 2-3 seconds checkpoints.

Two simultaneous processes:

Commits: 3,813 per sec

Chkpt Length: 10 sec

One process is running 3 times faster than two processes:

Commits: 12,424 per sec

Chkpt Length: 3 sec

Two processes seemed to spend too much time to compete for some shared resources. MTX latch contention?

> 6 recovery notes per transaction (including RL_TBGN/RL_TEND notes)

Aren't the records get fragmented during updates? I guess the RecordGUID field is not a part of any index. So each your transaction should create only three notes: RL_TBGN, RL_RMCHG, RL_TEND. Exception is a record fragmentation.

> hBufferHandle:buffer-field("RecordGUID"):buffer-value()    = guid(generate-uuid). 

Length of guid(generate-uuid) is 32 bytes. The size of your records is increasing by more than 32 bytes.

What is RPB in the table's area? What is the mean record size?

Posted by ChUIMonster on 20-May-2016 11:53

IMHO, in the year 2016 If your IO response is higher than 1ms you should complain.

Posted by ChUIMonster on 20-May-2016 11:58

It is 2016 -- nobody should be running 32 bit database servers.

Posted by ChUIMonster on 20-May-2016 12:01

It's your code.  "Chunk" the transactions:

define variable i as integer no-undo.

outer: do while true transaction:

 repeat:

   /* your stuff ... */

   i = i + 1.

   if i modulo 100 = 0 then next outer.

 end.

 leave.

end.

Posted by ChUIMonster on 20-May-2016 12:05

I would also increase the bi cluster size, the bi blocksize and number of bi bufs.

Posted by ChUIMonster on 20-May-2016 12:07

While you are complaining about IO run the standard write performance test:

#!/bin/sh
#
# Similar to:
#   dd if=sports.b1 of=foo oflag=dsync
#
# minimum acceptable result is 10MB/sec -- or 9 seconds
#   4 or 5 seconds is "good"
#   3 or less is excellent (probably SSD)

prodb sports sports

proutil sports -C truncate bi -bi 16384

ls -ltr sports.b1

time proutil sports -C bigrow 2 # -zextendSyncIO

ls -ltr sports.b1

# time dd if=sports.b1 of=sports.b1.dd oflag=dsync

Posted by mfurgal on 20-May-2016 12:14

This makes me happy that this has become “standard”.  We find it very useful and we have seen if the write speed with this test is less than 10 MB/Sec, then most applications run slow.

Mike
-- 
Mike Furgal
Director – Database and Pro2 Services
PROGRESS Bravepoint
678-225-6331 (office)
617-803-2870 (cell)


Posted by Stefan Marquardt on 20-May-2016 12:19

Tom,

no Linux, it's windows.

What do you use? cywin and time or ResourceKit and timeit

Posted by Stefan Marquardt on 20-May-2016 12:25

~5-6 seconds parallel to the running job (used my clock)

Posted by George Potemkin on 20-May-2016 12:25

> it's windows

You can run bigrow on Windows as well. ;-)

Timestamps are in db log.

Posted by Stefan Marquardt on 20-May-2016 12:27

               Fri May 20 19:24:32 2016

[2016/05/20@19:24:32.123+0200] P-16636      T-45752 I DBUTIL   : (451)   Bigrow session begin for .... on CON:.

[2016/05/20@19:24:32.124+0200] P-16636      T-45752 I DBUTIL   : (15321) Before Image Log Initialization at block 0  offset 36679560.

[2016/05/20@19:24:36.292+0200] P-16636      T-45752 I DBUTIL   : (7129)  Usr 0 set name to ....

[2016/05/20@19:24:36.293+0200] P-16636      T-45752 I DBUTIL   : (6600)  Adding 2 clusters to the Before Image file.

[2016/05/20@19:24:38.312+0200] P-16636      T-45752 I DBUTIL   : (15109) At Database close the number of live transactions is 0.

[2016/05/20@19:24:38.313+0200] P-16636      T-45752 I DBUTIL   : (15743) Before Image Log Completion at Block 0 Offset 235.

[2016/05/20@19:24:38.320+0200] P-16636      T-45752 I DBUTIL   : (334)   Bigrow session end.

4 seconds for the init and 2 for adding the clusters?

Posted by George Potemkin on 20-May-2016 12:33

> 4 seconds for the init and 2 for adding the clusters?

4 seconds to allocate 4 initial bi clusters.

2 seconds to add 2 bi clusters specified by bigrow's parameter

Posted by ChUIMonster on 20-May-2016 13:47

If it were up to me, I would apply the Linux patch before I went much further ;)

Posted by ChUIMonster on 20-May-2016 13:48

So 6 seconds -- that's on the high side of "good" but a  long ways from *great*.

At least it isn't "horrible".

Posted by Carly on 23-May-2016 15:55

Hi,

Thank you for your feedback. I am working with the developer team to determine steps we can take to make this a more enjoyable user experience. I will update you once I've met with the team. Thanks again for your feedback. Carly Connor

Posted by James Palmer on 24-May-2016 09:54

Just run the -bigrow test on a customer's DB server. 21 seconds. I wonder why they have performance issues when the application is busy?!

Posted by Stefan Marquardt on 25-May-2016 01:39

Got new virtual disks and copied .d files from C to E: ~ Remaining window shows 100MB/sec, is this a good value?

Posted by Stefan Marquardt on 04-Aug-2016 03:31

Hi Tim,

how to chunk:

FOR EACH table EXCL-LOCK WHERE FIELD BEGINS "B":

DELETE table.

END.

I have a rate of 3000 records a second and the query matches 99% of each record.

Isn't this too slow?

This thread is closed