The ONCONFIG file contains configuration parameters and the server uses it during initialization and startup.

1 etc/onconfig

Informix comes by default with the template file onconfig.std

Copy it with the name onconfig (without extension):

Copy
cp onconfig.std onconfig

Change owner and group to informix:

Copy
chown informix:informix onconfig

And edit it to modify the default values in order to improve server performance and other features:

Copy
vi onconfig

2 Parameters to consider

Propuesta de valores

The following parameters are the minimums to take into consideration to initialize and start the server. In the case that you don't have an idea to how configure we give you the next values of configuration file how an example, just in the case that you don't have a pre-configuration of another server to modify.

2.1 Root dbspace

Parameter Description Recommended value
ROOTNAME The root dbspace name to contain reserved pages and internal tracking tables rootdbs
ROOTPATH The path for the device containing the root dbspace /INFORMIXDEV/rootdbs
ROOTOFFSET The offset, in KB, of the root dbspace into the device. The offset is required for some raw devices. 0
ROOTSIZE The size of the root dbspace, in KB. The value of 200000 allows for a default user space of about 100 MB and the default system space requirements. 2000000

2.2 Physical Log

PHYSFILE The size of the physical log on disk, in KB 50000

PHYSFILE

50 MB es un tamaño pequeño porque se presupone que se usará un shell script de DEISTER que automatiza el proceso de inicialización y amplía el tamaño del physical log.

2.3 Logical Log

LOGFILES Number of logical log files 6
LOGSIZE The size of each logical log, in KB 100000

LOGFILES

It is assumed that the DEISTER shell script will be used to automate the initialization process. During initialization the logical logs Are stored in the DBspace rootdbs. For this reason, an initial configuration of only 6 logical logs, to avoid the error: oninit: Not enough room in ROOT DBspace. The initialization script will create additional logical logs.

Formula

During the initialization process, since the logical logs are stored in the rootdbs, the following formula must be met: ROOTSIZE > LOGFILES * LOGSIZE

2.4 Temporary dbspace

DBSPACETEMP The list of dbspaces used to store temporary tables and other objects t_tmp1,t_tmp2,t_tmp3,t_tmp4
SBSPACETEMP The list of sbspaces used to store temporary tables for smart large objects s_sbtmp

2.5 Dbspace and sbspace

SBSPACENAME The default sbspace name where smart large objects are stored if no sbspace is specified during smart large object creation s_sbstd
SYSSBSPACENAME The default sbspace for system statistics collection s_sbsys

2.6 System

DBSERVERNAME The name of the default database server <servidor>
DBSERVERALIASES The list of up to 32 alternative dbservernames, separated by commas ol_<servidor>

Server Name

Where <servidor> should be replaced with the name of the Informix server, which is recommended to match that of the host.

2.7 CPU

MULTIPROCESSOR Specifies whether the computer has multiple CPUs. Acceptable values are:
  • 0 (single processor)
  • 1 (multiple processors or multi-core chips)
1
VPCLASS Configures the CPU VPs cpu,num=<procesadores>,noage

Number of processors

Execute the command cat /proc/cpuinfo to know the total number of virtual processors of the host. Keep in mind that for example 2 CPUs of 2 cores, are 4 virtual processors. In this case, the number of processors recommended to be allocated to Informix would be 3 (the remainder dedicated to the OS).

2.8 AIO and Cleaner

CLEANERS Number of page cleaner threads 32
DIRECT_IO Specifies whether direct I/O is used for cooked files used for dbspace chunks 1

libaio

If you do not have a current OS distribution, you probably need to install the libaio package: yum install libaio
Copy
dnf install ncurses-compat-libs libaio

2.9 Lock

LOCKS The initial number of locks when Informix starts. Dynamic locking can add extra locks if needed. 1000000
DEF_TABLE_LOCKMODE The default table lock mode for new tables. Acceptable values are ROW and PAGE (default). row

2.10 Shared Memory

RESIDENT Controls whether shared memory is resident. Acceptable values are:
  • >0 off (default)
  • 1 lock the resident segment only
  • n lock the resident segment and the next n-1 virtual segments, where n<100
  • -1 lock all resident and virtual segments
1
SHMVIRTSIZE The initial size, in KB, of the virtual segment of shared memory <25% RAM>
SHMTOTAL The maximum amount of shared memory for Informix, in KB. A 0 indicates no specific limit. <85-90% RAM>

Available RAM

Execute the command cat /proc/meminfo to know the total RAM of the host.

Formula

The formula must be met: SHMTOTAL > BUFFERPOOL (size * buffers) + SHMVIRTSIZE

2.11 ontape Tape Device

TAPEDEV The tape device path for backups. To use standard I/O instead of a device, set to STDIO /backup/IFMX-ONTAPES

2.12 ontape Logical Log Tape Device

LTAPEDEV The tape device path for logical logs /backup1/IFMX-LBACKUP
LTAPESIZE The maximum amount of data to put on one logical log tape. Acceptable values are 0 (unlimited) or any positive integral multiple of LTAPEBLK. 0

2.13 Backup and Restore

BACKUP_FILTER Specifies the pathname of a filter program to transform data during a backup, plus any program options '/usr/bin/gzip'
RESTORE_FILTER Specifies the pathname of a filter program to transform data during a restore, plus any program options '/usr/bin/gzip -d'

2.14 Data Dictionary Cache

DD_HASHSIZE The number of data dictionary pools. Set to any positive integer; a prime number is recommended. 512
DD_HASHMAX The number of entries per pool. Set to any positive integer. 32

2.15 Data Distribution

DS_HASHSIZE The number of data distribution pools. Set to any positive integer; a prime number is recommended. 512
DS_POOLSIZE The maximum number of entries in the data distribution cache. Set to any positive integer. 256

2.16 User Defined Routine (UDR)

PC_HASHSIZE The number of UDR pools. Set to any positive integer; a prime number is recommended. 127
PC_POOLSIZE The maximum number of entries in the UDR cache. Set to any positive integer. 1024

2.17 Parallel Database Query (PDQ)

MAX_PDQPRIORITY The maximum amount of resources, as a percentage, that PDQ can allocate to any one decision support query 50
DS_TOTAL_MEMORY The maximum amount, in KB, of decision support query memory 2048000
DS_NONPDQ_QUERY_MEM The amount of non-PDQ query memory, in KB. Acceptable values are 128 to 25% of DS_TOTAL_MEMORY. 512000

2.18 Diagnostic Dump

DUMPDIR The location Assertion Failure (AF) diagnostic files /tmp
DUMPSHMEM Controls shared memory dumps. Acceptable values are:
  • 0 Disabled
  • 1 Dump all shared memory
  • 2 Exclude the buffer pool from the dump
0

2.19 Alarm Program

ALARMPROGRAM Specifies the alarm program to display event alarms $INFORMIXDIR/etc/alarmprog_deister.sh

Copy the following code:

Copy
#!/bin/sh
# ======================================================================
# Este documento contiene datos propiedad intelectual de DEISTER
# S.A. Este documento no puede ser  publicado,  copiado o cedido
# total o parcialmente sin permiso escrito de DEISTER S.A.
#
# Al utilizar este software, usted reconoce y concuerda que su uso
# es bajo su responsabilidad y que ninguna de las partes involucradas
# en la creación, producción o prestación del servicio es responsable
# de cualquier perjuicio directo, incidental, consecuente, indirecto
# o punitivo o de pérdida, costo o gasto alguno (incluyendo honorarios
# legales, honorarios de peritos u otro desembolso) que pueda surgir
# directa o indirectamente a través de su uso, incluyendo pero no
# limitado a lo causado por virus, defectos, acción humana o inacción
# del sistema informático, línea telefónica, hardware, software o errores
# en el programa.
#
# description: Version of Informix log_full.sh sample event script to backup
#              automatically logical logs to disk using ontape -a triggered by
#              the log completed event.
#
# Comments:
#     Be sure to adjust the directory and file name of the log archive file
#     to match the value of the ONCONFIG parameter LTAPEDEV.  If the IDS engine
#     is running you will have to use onmonitor to change LTAPEDEV for the
#     running instance.  You will have to bounce the engine to install this
#     script as the event handler (modify the ONCONFIG parameter ALARMPROGRAM).
#
# processname: alarmprog_deister.sh
#
# $Id: alarmprog_deister.sh  $
#
#   Severity Description
#   1        Trivial.
#            The event is not reported to the alarm program
#            (for example, date change in the message log).
#   2        Information.
#            No error has occurred, but some routine event completed successfully
#            (for example, checkpoint or log backup completes).
#   3        Attention. This event does not compromise data or prevent the use of the system; however,
#            it warrants attention (for example, one chunk of a mirrored pair goes down).
#   4        Emergency. Something unexpected occurred that might compromise data or access to data
#            (assertion failure, or oncheck reports data corrupt).  Take action immediately.
#   5        Fatal. Something unexpected occurred and caused the database server to fail.
#
# Descripcion de los eventos:
# ID    Class Message
# 1     Table failure: 'dbsname:"owner".tabname'
# 2     Index failure: 'dbsname:"owner".tabname-idxname'
# 3     Blob failure: 'dbsname:"owner".tabname'
# 4     Chunk is offline, mirror is active: chunk number
# 5     Dbspace is offline: 'dbspace name'
# 6     Internal subsystem failure: 'message'
# 7     Database server initialization failure
# 8     Physical restore failure
# 9     Physical recovery failure
# 10    Logical recovery failure
# 11    Cannot open chunk: 'pathname'
# 12    Cannot open dbspace: 'dbspace name'
# 13    Performance improvement possible
# 14    Database failure. 'database name'
# 15    High-Availability Data-Replication failure
# 16    Backup completed: 'dbspace list'
# 17    Backup aborted: 'dbspace list'
# 18    Log backup completed: log number
# 19    Log backup aborted: log number
# 20    Logical logs are full?backup is needed
# 21    Database server resource overflow: 'resource name'
# 22    Long transaction detected
# 23    Logical log 'number' complete
# 24    Unable to allocate memory
# 25    Internal subsystem initialized: 'message' (starts the optical subsystem)
# 26    Dynamically added log file logid
# 27    Log file required
# 28    No space for log file
#
# Los eventos 6, 15, 21 y 24 puede producirse de forma muy seguida por lo
# que tenemos que proteger el envio de e-mails
# ======================================================================
 
# ########################################
# PUBLIC SECTION : CONFIGURATION VARIABLES
# ########################################
 
EVTMINUTE=60            # Expiration minutes for renotify special events
DAYSSAVED=2             # Dias que se almacenan los logical logs
ALARMADMIN=0            # Severity event to send e-mail
ADMINEMAIL=email1@company.com,email2@company.com
 
# ########################################
#     PRIVATE SECTION : INTERNAL VARIABLES
# ########################################
 
[ `uname -s` = "SunOS" ] && MAIL=mailx || MAIL=mail
 
ALRM_NOTWORTHY=1
ALRM_INFO=2
ALRM_ATTENTION=3
ALRM_EMERGENCY=4
ALRM_FATAL=5
 
EVENT_SEVERITY=$1
EVENT_CLASS=$2
EVENT_MSG="$3"
EVENT_ADD_TEXT="$4"
EVENT_FILE="$5"
 
INFORMIXDIR=${INFORMIXDIR:-`grep "^informix:" /etc/passwd | awk -F: '{ print $6 }'`}
INFORMIXSERVER=${INFORMIXSERVER:-`uname -n|awk -F'.' '{print $1}'`}
DB_LOCALE=${DB_LOCALE:-es_es.8859-1}
export INFORMIXDIR INFORMIXSERVER DB_LOCALE
 
TMPFILE=/tmp/__TMPFILE_$$
MAILBODY=/tmp/__MAILBODY_$$
BACKUPCMD="$INFORMIXDIR/bin/ontape -a -d"
ONSTATCMD="$INFORMIXDIR/bin/onstat"
eval MSGPATH=`${INFORMIXDIR}/bin/onstat -c | grep '^MSGPATH' | awk '{ print $2 }'`
eval LTAPEDEV=`${INFORMIXDIR}/bin/onstat -c | grep '^LTAPEDEV' | awk '{ print $2 }'`
 
EXIT_STATUS=0
 
case "$EVENT_SEVERITY" in
  1) EVENT_SEVERITY_NAME="Trivial";;
  2) EVENT_SEVERITY_NAME="Information";;
  3) EVENT_SEVERITY_NAME="Attention";;
  4) EVENT_SEVERITY_NAME="EMERGENCY!!";;
  5) EVENT_SEVERITY_NAME="FATAL EVENT!!";;
esac
 
echo "`date +%H:%M:%S`  `basename $0`: Started for event $EVENT_CLASS severity: $EVENT_SEVERITY_NAME ***" >> $MSGPATH
 
# Cleanup the mail header and the mail body file
rm -f $MAILBODY
 
# Set mail header for all events
MAILHEAD="$INFORMIXSERVER : $EVENT_SEVERITY_NAME : $EVENT_MSG"
echo "$EVENT_ADD_TEXT" >> $MAILBODY
 
case "$EVENT_CLASS" in
         4)
                # CHUNK IS OFFLINE
 
                echo "$EVENT_ADD_TEXT" >> $MAILBODY
                echo "-------------------------------------" >> $MAILBODY
                echo "RELATED INFORMATION:" >> $MAILBODY
                echo "-------------------------------------" >> $MAILBODY
                $ONSTATCMD -d | grep -v Blocked: | grep -v Block: | tail +4 >> $MAILBODY
                echo "-------------------------------------" >> $MAILBODY
                $ONSTATCMD -m | grep -v Blocked: | grep -v Block: | tail +4 >> $MAILBODY
                ;;
        6)
                # INTERNAL SUBSYSTEM FAILURE
 
                echo "$EVENT_ADD_TEXT" >> $MAILBODY
 
                # Many things cause this problem see the online.log
                echo "-------------------------------------" >> $MAILBODY
                echo "RELATED INFORMATION:" >> $MAILBODY
                echo "-------------------------------------" >> $MAILBODY
                $ONSTATCMD -m | grep -v Blocked: | grep -v Block: | tail +4 >> $MAILBODY
                ;;
        17)
                # ARCHIVE FAILED
                echo "$EVENT_ADD_TEXT\n" >> $MAILBODY
                # With we will be able to get the stack trace for the ontape thread
                echo "-------------------------------------" >> $MAILBODY
                echo "RELATED INFORMATION:" >> $MAILBODY
                echo "-------------------------------------" >> $MAILBODY
                onstat -g ath | grep ontape > $TMPFILE
                for i in `cat $TMPFILE | awk '{print $1}'`; do
                        $ONSTATCMD -g stk $i | grep -v Blocked: | grep -v Block: | tail +4 >> $MAILBODY
                        echo "-------------------------------------" >> $MAILBODY
                done
                ;;
 
        16)     # Archive completed
                # Remove old logical logs...
                if [ "$LTAPEDEV" != "/dev/null" ]; then
                  echo "`date +%H:%M:%S`  `basename $0`: Cleanning logs from `dirname $LTAPEDEV` $DAYSSAVED days old" >> $MSGPATH
                  #Log file name
                  #cd /tmp; find `dirname $LTAPEDEV` -name "`basename $LTAPEDEV`.*" -ctime +$DAYSSAVED -print -exec rm "{}" \; >> $MSGPATH
                  #Auto log file name
                  cd /tmp; find $LTAPEDEV -name "$INFORMIXSERVER_*" -ctime +$DAYSSAVED -print -exec rm "{}" \; >> $MSGPATH
                  echo STATUS = $? >> $MSGPATH
                fi
                ;;
 
        23)
                # LOGICAL LOG FILE COMPLETED
                if [ "$LTAPEDEV" != "/dev/null" ]; then
 
                  # This is compatible with Sun, Linux and AIX
                  logno=`echo $4 | awk '{ print $3 }'`
 
                  # If logical log file is writable, perform the backup
                  if [ -w $LTAPEDEV ]; then
                    $BACKUPCMD 2>&1 >> $MSGPATH
                    EXIT_STATUS=$?
                    echo "`date +%H:%M:%S` `basename $0`: logical log backup completed" >> $MSGPATH
                  else
                    EVENT_SEVERITY=3    # Attention
                    echo "-------------------------------------" >> $MSGPATH
                    echo "WARNING: Can not write in file $LTAPEDEV" >> $MSGPATH
                    echo "-------------------------------------" >> $MSGPATH
                  fi
                fi
                ;;
 
# One program is shared by all event alarms.  If this ever gets expanded to
# handle more than just archive events, uncomment the following:
        *)
#               EXIT_STATUS=1
        ;;
esac
 
# Special processing when alarm class is 6, 15,21 or 24 to prevent duplicate alarms from swamping mail.
# If alarm class is 23 (log filled), perform a logical (transaction) log backup to UNIX file system.
# If any other class, simply exit.  Our work is complete.
case "$EVENT_CLASS" in
       6|15|21|24) # Special processing for these classes since they can create many alarms quickly.
                # Ignore if severity is only 1 or 2.
                if [ $EVENT_SEVERITY -lt 3 ]; then
                        ALARMADMIN=0
                fi
                ISSUE="old"
                # Determine if this is a new or "existing" issue by checking to see if a
                # previous event file with this class is in /tmp.  If not, it is a new issue.
 
                # Si no existe el evento es que es la primera vez...
                if [ ! -f /tmp/ibmids_event.${EVENT_CLASS} ]; then
                   ISSUE="new"
                else
                   FOUND=`find /tmp -name "ibmids_event.${EVENT_CLASS}" -cmin +${EVTMINUTE} -print | wc -l`
                   # Si encuentra el fichero y es mas antiguo de lo esperado, lanza de nuevo el mensaje
                   if [ $FOUND -gt 0 ]; then
                      ISSUE="new"
                   fi
                fi
 
                if [ "${ISSUE}" = "new" ]; then
                        # Create file containing status information for review later.
                        rm -f /tmp/ibmids_event.${EVENT_CLASS}
                        STFILE=/tmp/ibmids_event.${EVENT_CLASS}
                        cp ${MAILBODY} ${STFILE}
                        date >> ${STFILE}
                else
                        # Since the event file is less than 1 hour old, this is an
                        # existing issue.  Do not notify operations or email DBA's.
                        ALARMADMIN=0
                fi
                ;;
esac
 
if [ $ALARMADMIN -ne 0 ]; then
  if [ $EVENT_SEVERITY -ge $ALARMADMIN ]; then
    if [ x"$ADMINEMAIL" != x"" ]; then
        MAILTO=$ADMINEMAIL
    fi
  fi
else
  echo "Event Severity = $EVENT_SEVERITY is lower than ALARMADMIN=$ALARMADMIN"
  echo "No mail will be sent to $ADMINEMAIL"
fi
 
# Intenta averiguar la sesion que ha producido el error
SESSION=`grep "session id" $MAILBODY | head -n 1 | sed -e 's/.*session id/session /' | awk '{ print $2 }'`
if [ -n "$SESSION" ]; then
    ${INFORMIXDIR}/bin/onstat -g sql $SESSION >> $MAILBODY
fi
 
if [ x${MAILTO} != x ]; then
    $MAIL -s "$MAILHEAD" $MAILTO < $MAILBODY
fi
 
rm -f $MAILBODY $TMPFILE 2>&1 >>/dev/null
 
exit $EXIT_STATUS

Paste it into a new file named alarmprog_deister.sh

Copy
cat > alarmprog_deister.sh

Give it execution permissions:

Copy
chmod +x alarmprog_deister.sh

And change the owner and group toinformix:

Copy
chown informix:informix alarmprog_deister.sh

2.20 Buffer pool and LRU

BUFFERPOOL Specifies the default values for buffers and LRU queues in each buffer pool. Each page size used by a dbspace has a buffer pool and needs a BUFFERPOOL entry. The onconfig.std file contains two initial entries: a default entry from which to base new page size entries on, and an entry for the OS default page size. When you add a dbspace with a different page size, IDS adds a BUFFERPOOL entry to the onconfig file with values that are the same as the default BUFFERPOOL entry, except that the default keyword is replaced by size=Nk, where N is the new page size. With interval checkpoints, these values can now be set higher than in previous versions of IDS in an OLTP environment. size=2k,buffers=<nº>,lrus=8,lru_min_dirty=50,lru_max_dirty=60

Número de buffers

Where <nº> is the buffer number, taking into account that multiplied by the size of the buffer (2K) should be approximately 25% of the RAM.

Fórmula

The formula must be met: SHMTOTAL > BUFFERPOOL (size * buffers) + SHMVIRTSIZE

3 Additional parameters

3.1 Automatic space management

SP_AUTOEXPAND It is used to enable or disable the automatic creation or extension of chunks. Acceptable values are:
  • 0 The automatic creation or extension of chunks is not enabled
  • 1 The automatic creation or extension of chunks is enabled (default)
1

3.2 Parameters related to connectivity

MAX_INCOMPLETE_CONNECTIONS It is used to specify the maximum number of incomplete connections in a session. 1024
NETTYPE It is used to adjust the number and type of virtual processors the database server uses for communication. Each type of network connection (for example, ipcshm or soctcp) can have a separate NETTYPE entry in the configuration file. NETTYPE ipcshm,1,50,CPU NETTYPE soctcp,4,250,NET
NUMFDSERVERS It is used to specify the maximum number of poll threads to handle network connections migrating between Informix virtual processors (VPs). Specifying NUMFDSERVERS information is useful if Informix has a high rate of new connect and disconnect requests or if you find a high amount of contention between network shared file (NSF) locks.. 4