Today I want to write a little about ACFS. In case you are using the latest and greatest Oracle Grid Infrastructure and you still run 11.2 databases, you are required to use ACFS. This especially applies to the Database Appliances, ExaDatas and for the Cloud Services, if you use Grid Infrastructure there. Having that, you might run into situations where your ACFS filesystem grows which it does automatically. But what if you want to shrink the filesystem to it’s original or at least a smaller size? With version 18.3 this should work quite well. Version before did had some issues when there was no contigous free space at the end of the volume to do the shrinking. Read more about that in MOS Note “ODA (Oracle Database Appliance): Resizing ACFS DBStorage File System (Doc ID 1990430.1)“.
Basically, there are two major topics. First, the shrinking of ACFS volumes and second, limiting the auto resize of ACFS.
Current situation
Given a customers ODA, this is the current situation.
[root@oda-x7m ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroupSys-LogVolRoot
30G 3.4G 25G 13% /
tmpfs 189G 1.3G 187G 1% /dev/shm
/dev/md0 477M 40M 412M 9% /boot
/dev/sda1 500M 320K 500M 1% /boot/efi
/dev/mapper/VolGroupSys-LogVolOpt
59G 24G 33G 43% /opt
/dev/mapper/VolGroupSys-LogVolU01
99G 78G 16G 84% /u01
/dev/asm/commonstore-241
5.0G 319M 4.7G 7% /opt/oracle/dcs/commonstore
/dev/asm/dattfstar01-241
170G 158G 13G 93% /u02/app/oracle/oradata/TFSTAR01
/dev/asm/reco-135 883G 693G 191G 79% /u03/app/oracle
/dev/asm/datxvgvg-241
100G 5.9G 95G 6% /u02/app/oracle/oradata/XVGVG
/dev/asm/datxdovg-241
410G 399G 12G 98% /u02/app/oracle/oradata/XDOVG
/dev/asm/datxvgovg-241
100G 5.7G 95G 6% /u02/app/oracle/oradata/XVGOVG
/dev/asm/datxdoovg-241
390G 376G 15G 97% /u02/app/oracle/oradata/XDOOVG
/dev/asm/datxvgfg-241
100G 5.1G 95G 6% /u02/app/oracle/oradata/XVGFG
/dev/asm/datxdofg-241
100G 46G 55G 46% /u02/app/oracle/oradata/XDOFG
/dev/asm/datsfstar01-241
100G 6.3G 94G 7% /u02/app/oracle/oradata/SFSTAR01
/dev/asm/dattvgfg01-241
100G 5.1G 95G 6% /u02/app/oracle/oradata/TVGFG01
/dev/asm/dattfstar03-241
100G 4.9G 96G 5% /u02/app/oracle/oradata/TFSTAR03
/dev/asm/dattfstar04-241
100G 7.0G 94G 7% /u02/app/oracle/oradata/TFSTAR04
/dev/asm/dattfstar02-241
1.9T 1.9T 76M 100% /u02/app/oracle/oradata/TFSTAR02
/dev/asm/dattdomea01-241
100G 20G 81G 20% /u02/app/oracle/oradata/TDOMEA01
/dev/asm/dattfstar05-241
100G 5.2G 95G 6% /u02/app/oracle/oradata/TFSTAR05
/dev/asm/datifstar01-241
100G 5.1G 95G 6% /u02/app/oracle/oradata/IFSTAR01A
/dev/asm/datrfstar01-241
1.1T 1.1T 9.4G 100% /u02/app/oracle/oradata/RFSTAR01A
jus-srv-rz50.justiz.sachsen.de:/u01/app/DB-dumps
3.0T 2.0T 924G 68% /u99/nfs/DB-dumps
/dev/asm/datsfstar02-241
100G 3.6G 97G 4% /u02/app/oracle/oradata/SFSTAR02
Shrinking an ACFS Filesystem
As to be seen above, there are quite a lot of databases that have a lot of free space in their filesystems. The initial size is defined by the shapes that an ODA provides. But in our case, even 100GB are too much, so we wanted to reduce the occupied space.
First, we get some basic information.
[oracle@oda-x7m ~]$ /sbin/advmutil volinfo /dev/asm/datxvgvg-241
Device: /dev/asm/datxvgvg-241
Size (MB): 102400
Resize Increment (MB): 512
Redundancy: mirror
Stripe Columns: 8
Stripe Width (KB): 1024
Disk Group: DATA
Volume: DATXVGVG
Compatible.advm: 12.2.0.1.0
The “resize” feature requires the ADVM compatibility to be at least 12.2.0.1, so this is the case. Now let’s do the shrink.
[oracle@oda-x7m ~]$ acfsutil size -h
Usage: acfsutil [-h] size [[-|+]nnn[K|M|G|T|P]] [-a nnn[K|M|G|T|P]] [-x nnn[K|M|G|T|P]] [-d ]
- Resize file system and configure auto-resize
[-a] - Auto-resize increment
[-x] - Auto-resize maximum
[-d] - Resize only this device
[oracle@oda-x7m ~]$ acfsutil size -80G /u02/app/oracle/oradata/XVGVG
acfsutil size: new file system size: 21474836480 (20480MB)
After that, the volume is at the desired size of 20GB.
[oracle@oda-x7m ~]$ /sbin/advmutil volinfo /dev/asm/datxvgvg-241
Device: /dev/asm/datxvgvg-241
Size (MB): 20480
Resize Increment (MB): 512
Redundancy: mirror
Stripe Columns: 8
Stripe Width (KB): 1024
Disk Group: DATA
Volume: DATXVGVG
Compatible.advm: 12.2.0.1.0
Limiting auto increment of ACFS
The automatic increment of ACFS volumes has two implications. First, it makes monitoring difficult because you never know is the filesystem is really full or will it automatically resize if needed. To figure out, if you are having a critical issue, you need to perform several steps. Implementing this with a monitoring system will be cumbersome in most cases. The other thing is, managing the storage resources is not straight-forward. You might overcommit your storage. My approach and advise is, to disable automatic resizing by setting the ACFS size and maximum size to the value, that you commited for this specific database. Let’s check the setup before doing that.
[oracle@oda-x7m ~]$ acfsutil info fs /u02/app/oracle/oradata/ICM01A
/u02/app/oracle/oradata/ICM01A
ACFS Version: 12.2.0.1.0
on-disk version: 46.0
compatible.advm: 12.2.0.0.0
ACFS compatibility: 12.2.0.0.0
flags: MountPoint,Available,AutoResizeEnabled
mount time: Fri Mar 15 10:09:28 2019
mount sequence number: 4
allocation unit: 4096
metadata block size: 4096
volumes: 1
total size: 107374182400 ( 100.00 GB )
total free: 91318923264 ( 85.05 GB )
auto-resize increment: 10737418240 ( 10.00 GB )
auto-resize maximum: 0 ( 0.00 )
file entry table allocation: 262144
primary volume: /dev/asm/daticm01-411
label:
state: Available
major, minor: 246, 210435
logical sector size: 512
size: 107374182400 ( 100.00 GB )
free: 91318923264 ( 85.05 GB )
metadata read I/O count: 54838
metadata write I/O count: 51022
total metadata bytes read: 242651136 ( 231.41 MB )
total metadata bytes written: 233385984 ( 222.57 MB )
ADVM diskgroup: DATA
ADVM resize increment: 536870912
ADVM redundancy: mirror
ADVM stripe columns: 8
ADVM stripe width: 1048576
number of snapshots: 0
snapshot space usage: 0 ( 0.00 )
replication status: DISABLED
compression status: DISABLED
So I set the maximum size to the current size.
[oracle@oda-x7m ~]$ acfsutil size -x 100G /u02/app/oracle/oradata/ICM01A
acfsutil size: ACFS-03642: successfully updated auto-resize settings
Just crosscheck that.
[oracle@oda-x7m ~]$ acfsutil info fs /u02/app/oracle/oradata/ICM01A
/u02/app/oracle/oradata/ICM01A
ACFS Version: 12.2.0.1.0
on-disk version: 46.0
compatible.advm: 12.2.0.0.0
ACFS compatibility: 12.2.0.0.0
flags: MountPoint,Available,AutoResizeEnabled
mount time: Fri Mar 15 10:09:28 2019
mount sequence number: 4
allocation unit: 4096
metadata block size: 4096
volumes: 1
total size: 107374182400 ( 100.00 GB )
total free: 91318923264 ( 85.05 GB )
auto-resize increment: 10737418240 ( 10.00 GB )
auto-resize maximum: 107374182400 ( 100.00 GB )
file entry table allocation: 262144
primary volume: /dev/asm/daticm01-411
label:
state: Available
major, minor: 246, 210435
logical sector size: 512
size: 107374182400 ( 100.00 GB )
free: 91318923264 ( 85.05 GB )
metadata read I/O count: 54840
metadata write I/O count: 51022
total metadata bytes read: 242659328 ( 231.42 MB )
total metadata bytes written: 233385984 ( 222.57 MB )
ADVM diskgroup: DATA
ADVM resize increment: 536870912
ADVM redundancy: mirror
ADVM stripe columns: 8
ADVM stripe width: 1048576
number of snapshots: 0
snapshot space usage: 0 ( 0.00 )
replication status: DISABLED
compression status: DISABLED
You could also combine the resize operation which returns the final ACFS size which in turn can be used for setting the maximum size.
And that’s basically it, there is nothing more to do.