Problem solve Get help with specific problems with your technologies, process and projects.

Configuring Solaris to be a Sybase data server host

Could you please give an example of how to configure a Solaris server as a Sybase data server host? I like to understand more about shared memory and swap space.

Operating System Installation

Prior to installation of Sybase, the Unix Server needs to be prepared for Sybase installation. This is a task that will be performed by the local Unix system administrator (and it should not be assumed that he/she will be familiar with all aspects of data server setup, i.e. preparing a Unix host as a data server). You need to check the Unix operating system (OS) level to be installed. You need to check the application and its corresponding data server to ensure that the package is certified with Sybase databases on Solaris 2.8 (most common Solaris level at this moment, I think), etc. and you have the correct Unix and kernel patches.

Shared memory settings

The shared memory value of the operating system needs to be adjusted, otherwise Sybase server cannot be created. On Solaris 2.8, which is a 64-bit OS, the maximum shared addressable memory is 7FFFFFFFFFFFFFFF in HEX. For a 32-bit OS, the maximum value that can be set is 4096 MB.

The maximum size of a single shared memory is set by the shmsys:shminfo_shmmax parameter in /etc/system. This depends on how much physical memory is available on the host. The upper limits on shmsys:shminfo_shmmax parameter are given below.

For a 32-bit OS this setting would be:

Set shmsys:shminfo_shmmax = (4096 x 1024 x 1024)-1 =  4294967295
For a 64-bit OS:
Set shmsys:shminfo_shmmax = (available physical memory [in multiples of
1024MB] x 1024 x 1024)-1 =  4294967295999999
For example, for a host with 8192 MB of physical memory running under a 64-bit OS this would be:
eqpgdbdev1:/apps/sybase/lon_epg_sql_dev2/data% prtconf | grep Mem
Memory size: 8192 Megabytes
eqpgdbdev1:/apps/sybase/lon_epg_sql_dev2/data% bc
eqpgdbdev1:/apps/sybase/lon_epg_sql_dev2/data%  cat /etc/system |grep
set shmsys:shminfo_shmmax=8589934591
Note that the 32-bit Sybase cannot address more than 3.5-3.75 GB of memory per server in practice. That is to say the total memory of Sybase cannot be more than 3750 MB. For Sybase version 12 (64-bit), the maximum amount of shared memory that has been set so far is something around 150+ GB.

The shared memory segments parameter in /etc/system file may need to be adjusted. The default value is 6, which should be sufficient for most of our requirements. Otherwise if you are using multiple servers with large number of dump and load devices you may have to increase this.

Set shmsys:shminfo_shmseg = 50
There should be a forceload of semaphores in /etc/system. An example is shown below:
forceload: sys/semsys
forceload: sys/shmsys
set semsys:seminfo_semmap=250
set semsys:seminfo_semmni=500
set semsys:seminfo_semmns=500
set semsys:seminfo_semmsl=500
set semsys:seminfo_semmnu=500
set semsys:seminfo_semume=100

Swap space

As an additional data point, large applications such as Sybase tend to have processes with large virtual address spaces. This is typically the result of attaching to large shared memory segments used by Sybase and large copy-on-write (COW) segments that get mapped but sometimes never actually get touched. The net effect of this is that on this host supporting multiple Sybase servers, the virtual address space requirements will grow to be quite large, typically exceeding the physical memory size of 8 GB in this case. Consequently, we will require a fair amount of swap disk configured to support these multiple Sybase servers with large virtual address space running concurrently. As a result we will need to configure 1.5 or 2 times the amount of RAM for swap so Sybase processes can fully utilize all of the physical memory without running out of virtual swap space.

Dig Deeper on Linux servers