To automatically scale down and up the OCPU on ExaCC cluster according to the CPU utilisation, we can use dynamic scaling. Dynamic scaling engine can be installed on each cluster nodes VM, from a remote machine as master or from container like doker or podman. We can also installed dynamic engine as a Grid HA resource. In this blog I will describe the installation, configuration and use of Dynamic Scaling on the VM from a single node cluster, as daemon configured as oracle linux service. In another blog I will describe how to install it as Grid HA resource.

Read more: How to automatically manage OCPU on ExaCC using Dynamic Scaling

Pros/cons of each installation

InstallationProsCons
Remote machine as masterNo Dynamic Scaling engine is installed on the Cluster nodes VMNeed to use Dynamic Scaling remote plug-in
One Dynamic Scaling engine can only manage one cluster
Docker or podman containerNo Dynamic Scaling engine is installed on the Cluster nodes VM
Several cluster can be managed from the same remote machine
Need to use Dynamic Scaling remote plug-in
Need to know docker and podman technology
Installation more complicated
Each VM ClusterEasy installation and use of
Dynamic scaling
Very limit host impact
Dynamic Scaling engine installed on each Cluster nodes VM
2 engine might decide for the scaling up/down, but with RAC database should not be a problem
Grid HA ResourceEasy installation and use of
Dynamic scaling
Very limit host impact
Only one node decide about the scaling up/down
Dynamic Scaling engine installed on each Cluster nodes VM

At our customer we have decided to install Dynamic Scaling engine on each Cluster nodes VM but running through one Grid HA resource that can be easily relocated from one node to the others.

Internet access is mandatory from the Cluster nodes to get access to OCI resource.

Installation of Dynamic Scaling

Our cluster nodes are running Oracle Linux 8.8.

[root@ExaCC-cl08n1 ~]# cat /etc/oracle-release
Oracle Linux Server release 8.8

The appropriate Dynamic Scaling package needs to be dowloaded from Doc ID 2719916.1, in our case, p36585874_202_Linux-x86-64.zip file.

We need to unzip it and to install the package.

[root@ExaCC-cl08n1 opc]# rpm -qa | grep -i dynam
[root@ExaCC-cl08n1 ~]# cd /home/opc/mwagner/dynscal-rpm/

[root@ExaCC-cl08n1 dynscal-rpm]# ls
p36585874_202_Linux-x86-64.zip

[root@ExaCC-cl08n1 dynscal-rpm]# unzip /home/opc/mwagner/dynscal-rpm/p36585874_202_Linux-x86-64.zip
Archive:  /home/opc/mwagner/dynscal-rpm/p36585874_202_Linux-x86-64.zip
  inflating: readme_dynamicscaling-2.0.2-3.el8.x86_64.txt
  inflating: dynamicscaling-2.0.2-3.el8.x86_64.rpm

[root@ExaCC-cl08n1 dynscal-rpm]# ls -ltrh
total 28M
-rw-rw-r-- 1 root root 14M May  6 13:57 dynamicscaling-2.0.2-3.el8.x86_64.rpm
-rw-rw-r-- 1 root root 740 May  6 14:27 readme_dynamicscaling-2.0.2-3.el8.x86_64.txt
-rw-r--r-- 1 opc  opc  14M Jul 26 08:38 p36585874_202_Linux-x86-64.zip

[root@ExaCC-cl08n1 dynscal-rpm]# rpm -i dynamicscaling-2.0.2-3.el8.x86_64.rpm
warning: dynamicscaling-2.0.2-3.el8.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID c9c430a5: NOKEY

dynamicscaling-2.0.2.3 binary has been installed on /opt/dynamicscaling succesfully!

[root@ExaCC-cl08n1 dynscal-rpm]# rpm -qa | grep -i dynam
dynamicscaling-2.0.2-3.x86_64

Install oci-cli

I have been installing oci-cli by downloading the offline installation package (oci-cli-3.43.2-Oracle-Linux-8-Offline.zip) from github project, maintained by Oracle Corp, https://github.com/oracle/oci-cli?tab=readme-ov-file.

[opc@ExaCC-cl08n1 ~]$ cd /home/opc/mwagner/dynscal-rpm/

[opc@ExaCC-cl08n1 dynscal-rpm]$ unzip -q oci-cli-3.43.2-Oracle-Linux-8-Offline.zip

[opc@ExaCC-cl08n1 dynscal-rpm]$ ls -ltrh
total 119M
-rw-rw-r-- 1 root root 14M May  6 13:57 dynamicscaling-2.0.2-3.el8.x86_64.rpm
-rw-rw-r-- 1 root root 740 May  6 14:27 readme_dynamicscaling-2.0.2-3.el8.x86_64.txt
drwxrwxr-x 3 opc  opc   58 Jun 18 23:26 oci-cli-installation
-rw-r--r-- 1 opc  opc  14M Jul 26 08:38 p36585874_202_Linux-x86-64.zip
-rw-r--r-- 1 opc  opc  92M Jul 26 08:47 oci-cli-3.43.2-Oracle-Linux-8-Offline.zip

[opc@ExaCC-cl08n1 dynscal-rpm]$ cd oci-cli-installation

[opc@ExaCC-cl08n1 oci-cli-installation]$ python --version
Python 3.6.8

[opc@ExaCC-cl08n1 oci-cli-installation]$ bash install.sh --offline-install

    ******************************************************************************
    You have started the OCI CLI Installer in interactive mode. If you do not wish
    to run this in interactive mode, please include the --accept-all-defaults option.
    If you have the script locally and would like to know more about
    input options for this script, then you can run:
    ./install.sh -h
    If you would like to know more about input options for this script, refer to:
    https://github.com/oracle/oci-cli/blob/master/scripts/install/README.rst
    ******************************************************************************
Starting OCI CLI Offline Installation
Running install script.
python3 ./install.py  --offline-install
-- Verifying Python version.
-- Python version 3.6.8 okay.

===> In what directory would you like to place the install? (leave blank to use '/home/opc/lib/oracle-cli'):
-- Creating directory '/home/opc/lib/oracle-cli'.
-- We will install at '/home/opc/lib/oracle-cli'.

===> In what directory would you like to place the 'oci' executable? (leave blank to use '/home/opc/bin'):
-- Creating directory '/home/opc/bin'.
-- The executable will be in '/home/opc/bin'.

===> In what directory would you like to place the OCI scripts? (leave blank to use '/home/opc/bin/oci-cli-scripts'):
-- Creating directory '/home/opc/bin/oci-cli-scripts'.
-- The scripts will be in '/home/opc/bin/oci-cli-scripts'.
-- Trying to use python3 venv.
-- Executing: ['/usr/bin/python3', '-m', 'venv', '/home/opc/lib/oracle-cli']
-- Executing: ['/home/opc/lib/oracle-cli/bin/pip', 'install', 'pip', '--upgrade', '--find-links', 'cli-deps/python36.html', '--no-index']
Collecting pip
Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-21.3.1
-- Executing: ['/home/opc/lib/oracle-cli/bin/pip', 'install', 'oci_cli', '--find-links', 'cli-deps/python36.html', '--no-index', '--ignore-requires-python']
Looking in links: cli-deps/python36.html
Processing ./cli-deps/oci_cli-3.43.2-py3-none-any.whl
Processing ./cli-deps/certifi-2024.6.2-py3-none-any.whl
Processing ./cli-deps/terminaltables-3.1.10-py2.py3-none-any.whl
Processing ./cli-deps/pyOpenSSL-23.2.0-py3-none-any.whl
Processing ./cli-deps/PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./cli-deps/oci-2.128.2-py3-none-any.whl
Processing ./cli-deps/python_dateutil-2.9.0.post0-py2.py3-none-any.whl
Processing ./cli-deps/prompt_toolkit-3.0.29-py3-none-any.whl
Processing ./cli-deps/arrow-1.2.3-py3-none-any.whl
Processing ./cli-deps/pytz-2024.1-py2.py3-none-any.whl
Processing ./cli-deps/six-1.16.0-py2.py3-none-any.whl
Processing ./cli-deps/click-8.0.4-py3-none-any.whl
Processing ./cli-deps/jmespath-0.10.0-py2.py3-none-any.whl
Processing ./cli-deps/cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl
Processing ./cli-deps/importlib_metadata-4.8.3-py3-none-any.whl
Processing ./cli-deps/circuitbreaker-1.4.0.tar.gz
  Preparing metadata (setup.py) ... done
Processing ./cli-deps/wcwidth-0.2.13-py2.py3-none-any.whl
Processing ./cli-deps/typing_extensions-4.1.1-py3-none-any.whl
Processing ./cli-deps/cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Processing ./cli-deps/pycparser-2.21-py2.py3-none-any.whl
Processing ./cli-deps/zipp-3.6.0-py3-none-any.whl
Using legacy 'setup.py install' for circuitbreaker, since package 'wheel' is not installed.
Installing collected packages: pycparser, cffi, zipp, typing-extensions, six, cryptography, wcwidth, pytz, python-dateutil, pyOpenSSL, importlib-metadata, circuitbreaker, certifi, terminaltables, PyYAML, prompt-toolkit, oci, jmespath, click, arrow, oci-cli
    Running setup.py install for circuitbreaker ... done
Successfully installed PyYAML-6.0.1 arrow-1.2.3 certifi-2024.6.2 cffi-1.15.1 circuitbreaker-1.4.0 click-8.0.4 cryptography-40.0.2 importlib-metadata-4.8.3 jmespath-0.10.0 oci-2.128.2 oci-cli-3.43.2 prompt-toolkit-3.0.29 pyOpenSSL-23.2.0 pycparser-2.21 python-dateutil-2.9.0.post0 pytz-2024.1 six-1.16.0 terminaltables-3.1.10 typing-extensions-4.1.1 wcwidth-0.2.13 zipp-3.6.0

===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n):

===> Enter a path to an rc file to update (file will be created if it does not exist) (leave blank to use '/home/opc/.bashrc'):
-- Backed up '/home/opc/.bashrc' to '/home/opc/.bashrc.backup'
-- Tab completion set up complete.
-- If tab completion is not activated, verify that '/home/opc/.bashrc' is sourced by your shell.

-- ** Run `exec -l $SHELL` to restart your shell. **

-- Installation successful.

Announcement
============
1. Interactive mode now available in CLI
Have you tried the new interactive features in OCI CLI yet? You can get started by typing `oci -i`.
Learn more by watching our informative video on YouTube -> https://www.youtube.com/watch?v=lX29Xw1Te54&ab_channel=OracleLearning
Also see https://docs.oracle.com/iaas/Content/API/SDKDocs/cliusing_topic-Using_Interactive_Mode.htm
============

-- Run the CLI with /home/opc/bin/oci --help

Configure oci config file

Before configuring oci, I have been creating a group and user with the OCI console, and imported the key using the add api key menu. I have been using a key that is already existing. This information will then be used to create the config file.

Here is the oci config file for the current node.

[opc@ExaCC-cl08n1 ~]$ cd .oci

[opc@ExaCC-cl08n1 .oci]$ ls -lrh
total 12K
-rw------- 1 opc opc  322 Jul 31  2023 config
-rw------- 1 opc opc  450 Jul 31  2023 exacc_dbaas_automation_public.pem
-rw------- 1 opc opc 1.7K Jul 31  2023 exacc_dbaas_automation.pem

[opc@ExaCC-cl08n1 .oci]$ vi config
[opc@ExaCC-cl08n1 .oci]$ cat config
[DEFAULT]
user=ocid1.user.oc1..aaaaaaaaz*****************************z2kndq
fingerprint=fc:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:84
tenancy=ocid1.tenancy.oc1..aaaaaaaa52q*******************************wka
region=eu-zurich-1
key_file=~/.oci/exacc_dbaas_automation.pem

Test oci cli

We can list all region in order to ensure our oci cli configuration is working.

[opc@ExaCC-cl08n1 ~]$ oci iam region list --output table
/home/opc/lib/oracle-cli/lib64/python3.6/site-packages/oci/_vendor/httpsig_cffi/sign.py:10: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6.
  from cryptography.hazmat.backends import default_backend  # noqa: F401
+-----+-------------------+
| key | name              |
+-----+-------------------+
| AMS | eu-amsterdam-1    |
| ARN | eu-stockholm-1    |
| AUH | me-abudhabi-1     |
| BOG | sa-bogota-1       |
| BOM | ap-mumbai-1       |
| CDG | eu-paris-1        |
| CWL | uk-cardiff-1      |
| DXB | me-dubai-1        |
| FRA | eu-frankfurt-1    |
| GRU | sa-saopaulo-1     |
| HYD | ap-hyderabad-1    |
| IAD | us-ashburn-1      |
| ICN | ap-seoul-1        |
| JED | me-jeddah-1       |
| JNB | af-johannesburg-1 |
| KIX | ap-osaka-1        |
| LHR | uk-london-1       |
| LIN | eu-milan-1        |
| MAD | eu-madrid-1       |
| MEL | ap-melbourne-1    |
| MRS | eu-marseille-1    |
| MTY | mx-monterrey-1    |
| MTZ | il-jerusalem-1    |
| NRT | ap-tokyo-1        |
| ORD | us-chicago-1      |
| PHX | us-phoenix-1      |
| QRO | mx-queretaro-1    |
| SCL | sa-santiago-1     |
| SIN | ap-singapore-1    |
| SJC | us-sanjose-1      |
| SYD | ap-sydney-1       |
| VAP | sa-valparaiso-1   |
| VCP | sa-vinhedo-1      |
| XSP | ap-singapore-2    |
| YNY | ap-chuncheon-1    |
| YUL | ca-montreal-1     |
| YYZ | ca-toronto-1      |
| ZRH | eu-zurich-1       |
+-----+-------------------+

Policy

In order to use Dynamic Scaling I have been added following OCI policy to the group.

Allow group exacc_dynamic_scaling to use exadata-infrastructures IN COMPARTMENT ExaCC_DBaaS
Allow group exacc_dynamic_scaling to use vmclusters IN COMPARTMENT ExaCC_DBaaS

Test Dynamic Scaling

We can now test Dynamic Scaling with the check option and getocpu option (to get current ocpu).

Test with check option is successful:

[opc@ExaCC-cl08n1 .oci]$ /opt/dynamicscaling/dynamicscaling.bin check \
> --ocicli \
> --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba \
> --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-09 14:28:31: Checking OCI connectivity...
SUCCESS: 2024-07-09 14:28:32: OCI connectivity check done successfully

getocpu option is also working and giving us current OCPU to be equal to 2 OCPU, 1 VM, so 2 per VM.

[opc@ExaCC-cl08n1 .oci]$ /opt/dynamicscaling/dynamicscaling.bin getocpu \
> --ocicli \
> --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba \
> --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-09 14:29:54: Checking DB System status

- -------------------------------------------------------
  VM Cluster OCID        : ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba
  OCI profile name       : DEFAULT
- -------------------------------------------------------
  DB System status       : AVAILABLE
  Current OCPU           : 2
  Current physical CPUs  : 2
- -------------------------------------------------------
  Dynamicscaling Log file: '/tmp/dynamicscaling.log'
---------------------------------------------------------

Functionning

From the DocId, we can read that “Oracle DynamicScaling can be executed as standalone executable or as daemon on one or more ExaDB-D compute nodes or ExaDB-C@C vmcluster nodes. By default DynamicScaling is monitoring the CPUs with very limited host impact and if the load goes over the Maximum CPU threshold (“–maxthreshold”) for an interval of time (“–interval”), it will automatically will scale-up the OCPU by a factor (“–ocpu”) till a maximum limit (“–maxocpu”). If the load goes under the Minimum CPU threshold (“–minthreshold”) for an interval of time (“–interval”) scale down will be executed util the minimum limit (“–minocpu”) of ocpu.”

To avoid too frequent scale up and down, Dynamic Scaling will wait for one hour after having scaled up the OCPU before scaling it down again.

Minimun 4 OCPU factor for half rack.
Mininum 2 OCPU factor for quater rack.

Log file rotation

I have configured log file rotation.

First I have created needed log directory.

[opc@ExaCC-cl08n1 ~]$ sudo mkdir -p /acfs01/dynscal_logs/node1
[opc@ExaCC-cl08n1 ~]$ sudo chown -R opc: /acfs01/dynscal_logs

Then I have configured log file rotation as following:

[root@ExaCC-cl08n1 ~]# cd /etc/logrotate.d/

[root@ExaCC-cl08n1 logrotate.d]# ls -ltrh
total 76K
-rw-r--r-- 1 root root 145 Feb 19  2018 wtmp
-rw-r--r-- 1 root root 408 Mar  7  2019 psacct
-rw-r--r-- 1 root root 172 Mar 11  2021 iscsiuiolog
-rw-r--r-- 1 root root  88 Apr 12  2021 dnf
-rw-r--r-- 1 root root 160 Dec 16  2021 chrony
-rw-r--r-- 1 root root 155 Feb  7  2022 aide
-rw-r--r-- 1 root root  91 Apr 11  2022 bootlog
-rw-r--r-- 1 root root  67 Dec  2  2022 ipmctl
-rw-r--r-- 1 root root 130 Mar 31  2023 btmp
-rw-r--r-- 1 root root  93 Sep 21  2023 firewalld
-rw-r--r-- 1 root root 226 Oct 25  2023 syslog
-rw-r--r-- 1 root root 237 Feb 22 15:50 sssd
-rw-r--r-- 1 root root 155 Mar  7 05:29 samba
-rw-r--r-- 1 root root 125 Apr 11 07:00 nscd
-rw-r--r-- 1 root root 103 May 14 11:51 oraiosaudit
-rw-r--r-- 1 root root 103 May 14 11:51 oraasmaudit
-rw-r--r-- 1 root root 103 May 14 11:51 oraapxaudit
-rw-r--r-- 1 root root  89 May 14 12:18 asmaudit
-rw-r--r-- 1 root root 172 May 14 14:06 ora_rdbms_uniaud

[root@ExaCC-cl08n1 logrotate.d]# vi dynamicscaling

[root@ExaCC-cl08n1 logrotate.d]# cat dynamicscaling
/acfs01/dynscal_logs/node1/* {
su opc opc
daily
notifempty
missingok
sharedscripts
copytruncate
rotate 10
size 30M
compress
}

Create linux service for Dynamic Scaling

I have created a linux service to have Dynamic Scaling running automatically as a daemon.

[root@ExaCC-cl08n1 ~]# vi /etc/systemd/system/dynamicscaling.service
[root@ExaCC-cl08n1 ~]# cat /etc/systemd/system/dynamicscaling.service
[Unit]
Description=Dynamicscaling
Wants=network-online.target local-fs.target
After=network-online.target local-fs.target

[Service]
User=opc
Type=simple
Environment="HTTP_PROXY=http://webproxy.domain.com:XXXX"
Environment="HTTPS_PROXY=http://webproxy.domain.com:XXXX"
Environment="http_proxy=http://webproxy.domain.com:XXXX"
Environment="https_proxy=http://webproxy.domain.com:XXXX"
Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/opc/bin:/home/opc/.local/bin"
ExecStart=/bin/sh -c "/opt/dynamicscaling/dynamicscaling.bin --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he***********************************j3ba --ociprofile DEFAULT --interval 60 --maxthreshold 70 --minthreshold 40 --maxocpu 12 --minocpu 4 --ocpu 4 --logpath /acfs01/dynscal_logs/node1"

TimeoutStartSec=300
PIDFile=/tmp/.dynamicscaling.pid
Restart=on-failure
RestartSec=5s

ExecStop=/bin/kill -s SIGINT $MAINPID

[Install]
WantedBy=multi-user.target

[root@ExaCC-cl08n1 ~]# systemctl daemon-reload
[root@ExaCC-cl08n1 ~]# systemctl enable dynamicscaling.service
Created symlink /etc/systemd/system/multi-user.target.wants/dynamicscaling.service → /etc/systemd/system/dynamicscaling.service.

Linux service has been tested.

[root@ExaCC-cl08n1 ~]# ps -ef | grep -i [d]ynamic
[root@ExaCC-cl08n1 ~]# systemctl start dynamicscaling.service

[root@ExaCC-cl08n1 ~]# systemctl status dynamicscaling.service
● dynamicscaling.service - Dynamicscaling
   Loaded: loaded (/etc/systemd/system/dynamicscaling.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-07-09 22:47:16 CEST; 2s ago
 Main PID: 272574 (/opt/dynamicsca)
    Tasks: 2 (limit: 319999)
   Memory: 119.6M
   CGroup: /system.slice/dynamicscaling.service
           ├─272574 /opt/dynamicscaling/dynamicscaling.bin                                            --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba >
           └─272590 /home/opc/lib/oracle-cli/bin/python3 /home/opc/bin/oci db vm-cluster get --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba --profile DEFAULT

Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]: │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]:  Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
...
...
...

[root@ExaCC-cl08n1 ~]# ps -ef | grep -i [d]ynamic
opc      272677      1  0 22:47 ?        00:00:00 /opt/dynamicscaling/dynamicscaling.bin                                            --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************3ba --ociprofile DEFAULT --interval 60 --maxthreshold 70 --minthreshold 40 --maxocpu 24 --minocpu 4 --ocpu 4

[root@ExaCC-cl08n1 ~]# systemctl stop dynamicscaling.service

[root@ExaCC-cl08n1 ~]# systemctl status dynamicscaling.service
● dynamicscaling.service - Dynamicscaling
   Loaded: loaded (/etc/systemd/system/dynamicscaling.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2024-07-09 22:47:32 CEST; 2s ago
  Process: 273462 ExecStop=/bin/kill -s SIGINT $MAINPID (code=exited, status=0/SUCCESS)
  Process: 272677 ExecStart=/bin/sh -c /opt/dynamicscaling/dynamicscaling.bin --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba --ociprofile DEFAULT --i>
 Main PID: 272677 (code=exited, status=1/FAILURE)

Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]:  Author: Ruggero Citton 
Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]:  RAC Pack, Cloud Innovation and Solution Engineering Team
Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]: │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]: INFO: 2024-07-09 22:47:17: ================================================
Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]: INFO: 2024-07-09 22:47:17: Dynamicscaling version '2.0.2-03' is starting...
Jul 09 22:47:17 ExaCC-cl08n1 sh[272574]: INFO: 2024-07-09 22:47:17: ================================================
Jul 09 22:47:32 ExaCC-cl08n1 systemd[1]: Stopping Dynamicscaling...
Jul 09 22:47:32 ExaCC-cl08n1 systemd[1]: dynamicscaling.service: Main process exited, code=exited, status=1/FAILURE
Jul 09 22:47:32 ExaCC-cl08n1 systemd[1]: dynamicscaling.service: Failed with result 'exit-code'.
Jul 09 22:47:32 ExaCC-cl08n1 systemd[1]: Stopped Dynamicscaling.

[root@ExaCC-cl08n1 ~]# ps -ef | grep -i [d]ynamic
[root@ExaCC-cl08n1 ~]#

Test Dynamic Scaling scale down

The OCPU has been increased to 12 OCPU. We have only one nodes in this cluster so 12 OCP per VM.

Check current OCUP.

[opc@ExaCC-cl08n1 ~]$ /opt/dynamicscaling/dynamicscaling.bin getocpu \
> --ocicli \
> --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba \
> --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-09 22:54:31: Checking DB System status

- -------------------------------------------------------
  VM Cluster OCID        : ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba
  OCI profile name       : DEFAULT
- -------------------------------------------------------
  DB System status       : AVAILABLE
  Current OCPU           : 12
  Current physical CPUs  : 12
- -------------------------------------------------------
  Dynamicscaling Log file: '/tmp/dynamicscaling.log'
---------------------------------------------------------

Let’s start Dynamic Scaling service.

[root@ExaCC-cl08n1 ~]# ps -ef | grep -i [d]ynamic
[root@ExaCC-cl08n1 ~]# systemctl start dynamicscaling.service

[root@ExaCC-cl08n1 ~]# ps -ef | grep -i [d]ynamic
opc      348304      1  0 23:07 ?        00:00:00 /opt/dynamicscaling/dynamicscaling.bin                                            --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT --interval 60 --maxthreshold 70 --minthreshold 40 --maxocpu 24 --minocpu 4 --ocpu 4

Check the logs.

[opc@ExaCC-cl08n1 ~]$ tail -f /acfs01/dynscal_logs/node1dynamicscaling.log
2024-07-09 23:07:49: Getting lifecycle-state
2024-07-09 23:07:50: DB System status......: AVAILABLE
2024-07-09 23:07:50: Resetting consecutive DB System 'UPDATING' status count
2024-07-09 23:07:50: Checking current core count
2024-07-09 23:07:50: Getting cpu core count for 'ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba' with oci-cli
2024-07-09 23:07:50: Running on ExaCC getting cpus enabled
2024-07-09 23:07:50: Current OCPU=12
2024-07-09 23:07:52: Local host load ......:  1.5
2024-07-09 23:07:52: CPU usage is under minthreshold
2024-07-09 23:07:52: Next measure in about 60 secs...
2024-07-09 23:08:52: Checking current core count
2024-07-09 23:08:52: Getting cpu core count for 'ocid1.vmcluster.oc1.eu-zurich-1.an5h*****************************************j3ba' with oci-cli
2024-07-09 23:08:53: Running on ExaCC getting cpus enabled
2024-07-09 23:08:53: Current OCPU=12
2024-07-09 23:08:55: Local host load ......:  0.9
2024-07-09 23:08:55: Current load is under/equal minimum threshold '40' for '60' secs
2024-07-09 23:08:55: Checking DB System status
2024-07-09 23:08:55: Getting lifecycle-state
2024-07-09 23:08:56: DB System status......: AVAILABLE
2024-07-09 23:08:56: Resetting consecutive DB System 'UPDATING' status count
2024-07-09 23:08:56: Requesting OCPU scale-Down by a factor of '4'
2024-07-09 23:08:56: Scaling-down the core-count...
2024-07-09 23:08:57: Scaling-down in progress, sleeping 180 secs...
2024-07-09 23:11:57: Resetting consecutive scale-up operation count
2024-07-09 23:11:57: zzzzzz

Monitoring Dynamic Scaling

Monitoring Dynamic Scaling, I could also see some scale up in the logs.

Threshold value used in that case:

2024-07-19 18:16:17: - Dynamicscaling is running as daemon with pid '395012'
2024-07-19 18:16:17: VM Cluster OCID : ocid1.vmcluster.oc1.eu-zurich-1.anXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXj5gq
2024-07-19 18:16:17: OCI-Client Profile : DEFAULT
2024-07-19 18:16:17: DB System shape : ExadataCC.X9M
2024-07-19 18:16:17: Maximum OCPU Number : 48
2024-07-19 18:16:17: Minimum OCPU Number : 4
2024-07-19 18:16:17: OCPU scale factor : 4
2024-07-19 18:16:17: Incremental scale-up : DISABLE
2024-07-19 18:16:17: Measure interval : 60
2024-07-19 18:16:17: Maximum Load threshold : 75
2024-07-19 18:16:17: Minimum Load threshold : 60
2024-07-19 18:16:17: Scale-down wait time : 60 minutes
2024-07-19 18:16:17: Cluster-aware : DISABLE
2024-07-19 18:16:17: Dry-run : DISABLE

No action:

2024-07-19 18:25:41: Local host load ……: 67.8
2024-07-19 18:25:41: Current load is between minimum '60' and maximun '75' threshold, no actions taken

Scale up:

2024-07-19 18:51:28: Local host load ……: 99.4
2024-07-19 18:51:28: Current load is over/equal maximun threshold '75' for '60' secs
2024-07-19 18:51:28: Checking DB System status
2024-07-19 18:51:28: Getting lifecycle-state
2024-07-19 18:51:31: DB System status……: AVAILABLE
2024-07-19 18:51:31: Resetting consecutive DB System 'UPDATING' status count
2024-07-19 18:51:31: Requesting OCPU scale-Up by a factor of '4'
2024-07-19 18:51:31: Scaling-up the core-count

Scaling down not possible for the next 60 min following a scale-up:

2024-07-19 18:56:52: Scaling-Down currently not possible, waiting '2024-07-19 19:51:31', 60 minutes after latest scale-Up time

Setocpu with Dynamic Scaling

With Dynamic Scaling we can also set the OCPU.

Get current OCPU :

[opc@ExaCC-cl08n1 ~]$ /opt/dynamicscaling/dynamicscaling.bin getocpu --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-19 08:06:02: Checking DB System status

- -------------------------------------------------------
  VM Cluster OCID        : ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba
  OCI profile name       : DEFAULT
- -------------------------------------------------------
  DB System status       : UPDATING
  Current OCPU           : 4
  Current physical CPUs  : 4
- -------------------------------------------------------
  Dynamicscaling Log file: '/tmp/dynamicscaling.log'
---------------------------------------------------------

Set OCPU to 16:

[opc@ExaCC-cl08n1 ~]$ /opt/dynamicscaling/dynamicscaling.bin setocpu --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT --ocpu 16

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-19 08:05:23: dynamicscaling log file at '/tmp/dynamicscaling.log'
INFO: 2024-07-19 08:05:26: Checking DB System status
INFO: 2024-07-19 08:05:28: Current OCPU=4
SUCCESS: 2024-07-19 08:05:29: Scaling-up to OCPU=16 in progress, please wait...

Check by getting ocpu with Dynamic Scaling:

[opc@ExaCC-cl08n1 ~]$ /opt/dynamicscaling/dynamicscaling.bin getocpu --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-19 08:08:40: Checking DB System status

- -------------------------------------------------------
  VM Cluster OCID        : ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba
  OCI profile name       : DEFAULT
- -------------------------------------------------------
  DB System status       : UPDATING
  Current OCPU           : 16
  Current physical CPUs  : 16
- -------------------------------------------------------
  Dynamicscaling Log file: '/tmp/dynamicscaling.log'
---------------------------------------------------------

We have now 16 OCPU.

And in the log I could already see it was immediately scaled down by Dynamic Scaling daemon. This is why, when we have Dynamic Scaling running, there is no sense to manual increase OCPU. Dynamic Scaling daemon will do it for us.

[opc@ExaCC-cl08n1 ~]$ tail -f /acfs01/dynscal_logs/node1/dynamicscaling.log                                                                                                         2024-07-19 08:08:19: Current OCPU=16
2024-07-19 08:08:21: Local host load ......:  1.1
2024-07-19 08:08:21: Current load is under/equal minimum threshold '40' for '60' secs
2024-07-19 08:08:21: Checking DB System status
2024-07-19 08:08:21: Getting lifecycle-state
2024-07-19 08:08:22: DB System status......: AVAILABLE
2024-07-19 08:08:22: Resetting consecutive DB System 'UPDATING' status count
2024-07-19 08:08:22: Requesting OCPU scale-Down by a factor of '4'
2024-07-19 08:08:22: Scaling-down the core-count...
2024-07-19 08:08:23: Scaling-down in progress, sleeping 180 secs...

Scheduling

With Dynamic Scaling we can schedule weekly or long term period. The scheduling has got the priority over the load mesure.

Let’s schedule a weekly schedule for Friday between 9am and 4pm to have 16 OCPU. This will be done with the option --scheduling "Friday:9-16:16". Of course we can not change scheduling while the daemon is running as the scheduling is part of the daemon.

Get current OCPU:

[opc@ExaCC-cl08n1 ~]$ /opt/dynamicscaling/dynamicscaling.bin getocpu --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-19 07:54:12: Checking DB System status

- -------------------------------------------------------
  VM Cluster OCID        : ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba
  OCI profile name       : DEFAULT
- -------------------------------------------------------
  DB System status       : AVAILABLE
  Current OCPU           : 4
  Current physical CPUs  : 4
- -------------------------------------------------------
  Dynamicscaling Log file: '/tmp/dynamicscaling.log'
---------------------------------------------------------

We have currently 4 OCPU.

Let’s stop the daemon, change its configuration to have the scheduling option as well and start it again.

[opc@ExaCC-cl08n1 ~]$ sudo systemctl stop dynamicscaling.service
[opc@ExaCC-cl08n1 ~]$ ps -ef | grep -i [d]ynamic
[opc@ExaCC-cl08n1 ~]$

[opc@ExaCC-cl08n1 ~]$ sudo vi /etc/systemd/system/dynamicscaling.service

[opc@ExaCC-cl08n1 ~]$ sudo systemctl daemon-reload

[opc@ExaCC-cl08n1 ~]$ cat /etc/systemd/system/dynamicscaling.service
[Unit]
Description=Dynamicscaling
Wants=network-online.target local-fs.target
After=network-online.target local-fs.target

[Service]
User=opc
Type=simple
Environment="HTTP_PROXY=http://webproxy.domain.com:XXXX"
Environment="HTTPS_PROXY=http://webproxy.domain.com:XXXX"
Environment="http_proxy=http://webproxy.domain.com:XXXX"
Environment="https_proxy=http://webproxy.domain.com:XXXX"
Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/opc/bin:/home/opc/.local/bin"
ExecStart=/bin/sh -c "/opt/dynamicscaling/dynamicscaling.bin --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT --interval 60 --maxthreshold 70 --minthreshold 40 --maxocpu 12 --minocpu 4 --ocpu 4 --logpath /acfs01/dynscal_logs/node1 --scheduling 'Friday:9-16:16'"

TimeoutStartSec=300
PIDFile=/tmp/.dynamicscaling.pid
Restart=on-failure
RestartSec=5s

ExecStop=/bin/kill -s SIGINT $MAINPID

[Install]
WantedBy=multi-user.target
[opc@ExaCC-cl08n1 ~]$

[opc@ExaCC-cl08n1 ~]$ ps -ef | grep -i [d]ynamic
[opc@ExaCC-cl08n1 ~]$ sudo systemctl start dynamicscaling.service
[opc@ExaCC-cl08n1 ~]$ ps -ef | grep -i [d]ynamic
opc      278950      1 26 08:30 ?        00:00:00 /opt/dynamicscaling/dynamicscaling.bin                                            --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT --interval 60 --maxthreshold 70 --minthreshold 40 --maxocpu 12 --minocpu 4 --ocpu 4 --logpath /acfs01/dynscal_logs/node1 --scheduling Friday:9-16:16
[opc@ExaCC-cl08n1 ~]$

It is not already 9am, so OCPU are still configured with 4 OCPU.

[opc@ExaCC-cl08n1 ~]$ date
Fri Jul 19 08:31:36 CEST 2024

[opc@ExaCC-cl08n1 ~]$ /opt/dynamicscaling/dynamicscaling.bin getocpu --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-19 08:32:36: Checking DB System status

- -------------------------------------------------------
  VM Cluster OCID        : ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba
  OCI profile name       : DEFAULT
- -------------------------------------------------------
  DB System status       : AVAILABLE
  Current OCPU           : 4
  Current physical CPUs  : 4
- -------------------------------------------------------
  Dynamicscaling Log file: '/tmp/dynamicscaling.log'
---------------------------------------------------------

In the logs, we can now see such message, if we are out of the scheduling time.

[opc@ExaCC-cl08n1 ~]$ grep -i weekly /acfs01/dynscal_logs/node1/dynamicscaling.log
2024-07-19 08:30:57: No applicable OCPU weekly scheduling found
2024-07-19 08:32:04: No applicable OCPU weekly scheduling found
2024-07-19 08:33:10: No applicable OCPU weekly scheduling found
2024-07-19 08:34:17: No applicable OCPU weekly scheduling found
2024-07-19 08:35:24: No applicable OCPU weekly scheduling found

Now we are in the scheduling, on Friday after 9am and before 5pm. And we can see that the OCPU have been increased.

[opc@ExaCC-cl08n1 ~]$ date
Fri Jul 19 09:04:29 CEST 2024

[opc@ExaCC-cl08n1 ~]$ /opt/dynamicscaling/dynamicscaling.bin getocpu --ocicli --vm-cluster-id ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba --ociprofile DEFAULT

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
 Dynamicscaling for ExaCC & ExaCS - Version: 2.0.2-03
 Copyright (c) 2020-2024 Oracle and/or its affiliates.
----------------------------------------------------------
 Author: Ruggero Citton 
 RAC Pack, Cloud Innovation and Solution Engineering Team
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│

INFO: 2024-07-19 09:04:32: Checking DB System status

- -------------------------------------------------------
  VM Cluster OCID        : ocid1.vmcluster.oc1.eu-zurich-1.an5he*****************************************j3ba
  OCI profile name       : DEFAULT
- -------------------------------------------------------
  DB System status       : AVAILABLE
  Current OCPU           : 16
  Current physical CPUs  : 16
- -------------------------------------------------------
  Dynamicscaling Log file: '/tmp/dynamicscaling.log'
---------------------------------------------------------

And now we will find such message in the log telling us we are in the configured scheduled time.

[opc@ExaCC-cl08n1 ~]$ tail -f /acfs01/dynscal_logs/node1/dynamicscaling.log
2024-07-19 09:35:18: Current OCPU=16
2024-07-19 09:35:18: OCPU=16 is defined by scheduling
2024-07-19 09:35:20: Local host load ......:  0.5
2024-07-19 09:35:20: Current OCPU=16 is equal to scheduled OCPU, no action taken

To wrap up

Dynamic Scaling is a great tool that will help to automatically manage OCPU. We will not pay for non used OCPU and we will have enough OCPU if needed. Also we can configure specific scheduling for OCPU. Following DocId from Oracle MOS might be interesting to review for further details:

  • (ODyS) Oracle Dynamic Scaling engine – Scale-up and Scale-down automation utility for OCI DB System (ExaDB-D/ExaDB-C@C) (Doc ID 2719916.1)
  • (ODyS) Oracle Dynamic Scaling – Remote Plug-in (Doc ID 2770544.1)
  • (ODyS) How to make Oracle Dynamic Scaling an HA cluster resource (Doc ID 2834931.1)