Ryszard Musielak
Member
Hello,
I know this question is floating around, but I would like to try a simplified approach. I have a dedicated VM Red Hat Linux Server with Progress 11 and we are about to upgrade it, so it will have to move to new hardware with other systems. Questions are being raised, how much RAM does our DB and application actually need. I spent all day yesterday trying to analyse my usage. My current server was setup by a third party, it has 24GB allocated, as that was what the box had.
From the command "top" it shows this:
KiB Mem : 23942392 total, 347632 free, 3638500 used, 19956260 buff/cache
KiB Swap: 16777212 total, 12021000 free, 4756212 used. 13941312 avail Mem
Not sure if this is the tool I can rely on.
So roughly 3.7 is in use. The Linux server requires at least 2GB (min. requirement). That leaves me with less than 3GB used.
Here is what Linux may be using:
I gathered this based on this document:
https://access.redhat.com/sites/default/files/attachments/memory_usage.pdf
The database config file has these number allocated to the buffer cache:
My database is at 60GB in size.
Base on this article:
Progress KB - What value should -B be set to?
Memory Allocation And Usage
My Infrastructure planner will never give me what I want, he wants to know how much less below the 24GB we can allocated, so I need proof.
This is what "promon" shows me:
It looks like 4.7.GB is rightly allocated to the database buffers.
This is what is in the buffer (Promon -> R&D -> 1 -> 7 )
Then we come to the processes.
I have a test server, so I stared the process and checked the size in memory using the command "pmap <PID>" to check the size of each process.
I also made a note of what the DB shows during startup:
Here I show the DB processes and the related processes and the total memory usage (if this is correct)
I have yet to check user processed (background, user sessions).
Do I understand correctly that the "brokers" work in shared mode, so many of the processes are actually spawned and part of the main DB engine?
Can anyone show some advice how to approach those and check if they are part of the engine or a shared "broker"?
For example this process (background task)
They all seem to be using about 4.9GB, which is similar to one of the DB "brokers".
Thanks,
RIchard
I know this question is floating around, but I would like to try a simplified approach. I have a dedicated VM Red Hat Linux Server with Progress 11 and we are about to upgrade it, so it will have to move to new hardware with other systems. Questions are being raised, how much RAM does our DB and application actually need. I spent all day yesterday trying to analyse my usage. My current server was setup by a third party, it has 24GB allocated, as that was what the box had.
From the command "top" it shows this:
KiB Mem : 23942392 total, 347632 free, 3638500 used, 19956260 buff/cache
KiB Swap: 16777212 total, 12021000 free, 4756212 used. 13941312 avail Mem
Not sure if this is the tool I can rely on.
So roughly 3.7 is in use. The Linux server requires at least 2GB (min. requirement). That leaves me with less than 3GB used.
Here is what Linux may be using:
Code:
[root@accordrush rmusielak]# more /proc/meminfo
Buffers: 0 kB <-- data read off disk
Cached: 19331400 kB
Dirty: 14836 kB
Slab: 439780 kB <-- kernel memory
I gathered this based on this document:
https://access.redhat.com/sites/default/files/attachments/memory_usage.pdf
The database config file has these number allocated to the buffer cache:
broker.pf |
-B 524288 -B2 16384 |
My database is at 60GB in size.
Base on this article:
Progress KB - What value should -B be set to?
Based on this I think I should increase the -B parameter, although I know that some of you say here:Advice was that as a rule of thumb start with setting -B to be 10% – 15% of the database size.
Example: For a 50 GB database, 10% would be 5120 MB of RAM (5GB)
If the database blocksize is 1KB, set -B 5242880 (5242880/1)
If the database blocksize is 4KB bytes, set -B 1310720 (5242880/4)
If the database blocksize is 8KB bytes, set -B 655360 (5242880/8)
Memory Allocation And Usage
In reality it is a trade off between best performance and cost of RAM.
....
The notion that your buffer pool should be x% of your database size is antiquated and is now considered a worst practice. You want as much buffer pool as you can get, increasing it to the point that the increases continue to improve the ratio of logical to physical I/O and they don't hurt server performance by causing swapping.
My Infrastructure planner will never give me what I want, he wants to know how much less below the 24GB we can allocated, so I need proof.
This is what "promon" shows me:
Code:
Rec Lock Waits 0 % BI Buf Waits 0 % AI Buf Waits 0 %
Writes by APW 91 % Writes by BIW 79 % Writes by AIW 0 %
Buffer Hits 99 % Primary Hits 99 % Alternate Hits 100 %
DB Size 60 GB BI Size 582 MB AI Size 0 K
FR chain 1433 blocks RM chain 7 blocks
Shared Memory 4678M Segments 1
26 Servers, 170 Users (117 Local, 53 Remote, 117 Batch),2 Apws
It looks like 4.7.GB is rightly allocated to the database buffers.
This is what is in the buffer (Promon -> R&D -> 1 -> 7 )
Code:
06/07/22 Status: Buffer Cache
14:35:46
Total buffers: 540674
Hash table size: 137743
Used buffers: 536009
Empty buffers: 4665
On lru chain: 524288
On lru2 chain: 16384
On apw queue: 0
On ckp queue: 37
Modified buffers: 357
Marked for ckp: 37
Last checkpoint number: 553513
LRU force skips: 50
LRU2 force skips: 0
Then we come to the processes.
I have a test server, so I stared the process and checked the size in memory using the command "pmap <PID>" to check the size of each process.
I also made a note of what the DB shows during startup:
Code:
[root@accordwell pack]# proserve package -pf broker.pf
OpenEdge Release 11.6.1 as of Fri Feb 19 18:20:45 EST 2016
10:40:13 BROKER The startup of this database requires 4677Mb of shared memory. Maximum segment size is 8192Mb.
10:40:16 BROKER 0: Multi-user session begin. (333)
10:40:16 BROKER 0: Before Image Log Initialization at block 957 offset 2790. (15321)
10:40:16 BROKER 0: Login by root on /dev/pts/1. (452)
10:40:16 BROKER 0: Started for 12500 using TCP IPV4 address 0.0.0.0, pid 32302. (5644)
Here I show the DB processes and the related processes and the total memory usage (if this is correct)
Code:
[root@accordwell pack]# proadsv -start
OpenEdge Release 11.6.1 as of Fri Feb 19 18:20:45 EST 2016
31245 1 71 10:31 pts/1 00:00:21 /bcp/dlc/jdk/jre/bin/java
Pmap: total 5,038,712K
31419 1 3 10:31 ? 00:00:00 /bcp/dlc/jdk/jre/bin/java
Pmap: total 8,394,680K
31332 31245 0 10:31 pts/1 00:00:00 _pphpriv
( TOP shows: aprox 300MB )
DB start process:
32302 1 3 10:40 pts/1 00:00:02 /bcp/dlc/bin/_mprosrv
PMap: total 4,813,140K
32589 1 0 10:44 pts/1 00:00:00 /bcp/dlc/bin/_mprshut package -C biw
Pmap: total 4,812,928K
I have yet to check user processed (background, user sessions).
Do I understand correctly that the "brokers" work in shared mode, so many of the processes are actually spawned and part of the main DB engine?
Can anyone show some advice how to approach those and check if they are part of the engine or a shared "broker"?
For example this process (background task)
Code:
usr pid time of login user id Type tty Limbo?
65 32742 Sat Mar 5 15:44:36 2022 in060.p1 BAT batch no
PMAP:
total 4,851,044K
They all seem to be using about 4.9GB, which is similar to one of the DB "brokers".
Thanks,
RIchard