Each time a query using
a SAS_EP table function is invoked to execute a score, it requests
a set of semaphore arrays (sometimes referred to as semaphore "sets")
from the operating system. The SAS Embedded Process releases the semaphore
arrays back to the operating system after scoring is complete.
The number of semaphore
arrays required for a given SAS Embedded Process execution is a function
of the number of Greenplum database segments that are engaged for
the query. The Greenplum system determines the number of segments
to engage as part of its query plan based on a number of factors,
including the data distribution across the appliance.
The SAS Embedded Process
requires five semaphore arrays per database segment that is engaged.
The maximum number of semaphore arrays required per database host
node per SAS Embedded Process execution can be determined by the following
formula:
maximum_number_semaphore_arrays = 5 * number_database_segments
Here is an example.
On a full-rack Greenplum appliance configured with 16 host nodes and
six database segment servers per node, a maximum of 30 (5 * 6) semaphore
arrays are required on each host node per concurrent SAS Embedded
Process execution of a score. If the requirement is to support the
concurrent execution by the SAS Embedded Process of 10 scores, then
the SAS Embedded Process requires a maximum of 300 (5* 6 * 10) semaphore
arrays on each host node.
SAS recommends that
you configure the semaphore array limit on the Greenplum appliance
to support twice the limit that is configured by default on the appliance.
For example, if the default limit is 2048, double the default limit
to 4096.
Note: The semaphore limit discussed
here is the limit on the number of "semaphore arrays", where
each semaphore array is allocated with an application-specified number
of semaphores. For the SAS Embedded Process, the limit on the number
of semaphore arrays is distinct from the limit on the "maximum
number of semaphores system wide". The SAS Embedded Process requests
semaphore arrays with two or fewer semaphores in each array. The limit
on the maximum semaphores system wide should not need to be increased.
The Linux
$ ipcs -sl
command output shows
the typical default semaphore-related limits set on a Greenplum appliance:
------ Semaphore Limits --------
max number of arrays = 2048
max semaphores per array = 250
max semaphores system wide = 512000
max ops per semop call = 100
semaphore max value = 32767