The ONCONFIG file contains configuration parameters and the server uses it during initialization and startup.
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:
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.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
|