Feedback
Did this article resolve your question/issue?

   

Article

Starting the multithreaded database server

« Go Back

Information

 
TitleStarting the multithreaded database server
URL Namestarting-the-multithreaded-database-server
Article Number000129297
EnvironmentProduct: OpenEdge
Version: 12.x
OS: All supported platforms
Question/Problem Description
How to start a threaded database server?
How to run a multi thread OpenEdge 12 database
How to start a database multithreaded for remote client requests?
How to verify a database is running multi-threaded remote servers?
How to assure the threaded model is used to process remote client requests concurrently.
Can the database use both classic and multi-threaded remote servers?
Does _mtprosrv need to be used to start multithreaded db server instead of _mprosrv?
Starting the multi-threaded database server without proserve fails "-m1 required with this executable"
Steps to Reproduce
Clarifying Information
Error Message
Defect Number
Enhancement Number
Cause
Resolution
This Article serves to compliment the current Documentation:

While the Documentation correctly states that the threaded server is enabled by default in OpenEdge 12:

a. You still need to start your database with proserve or _mprosrv to start a threaded database Broker
  • It is the "-threadedServer 1" startup parameter which makes that Broker spawn multi-threaded remote servers, which is enabled by default.

b. In order for the Database Broker (_mprosrv.exe) to spawn a multi-threaded server (_mtprosrv), an Enterprise RDMBS (or the Advanced RDBMS license) must be installed
  • Without an Enterprise Database, the threaded server is disabled by default. 

Example: The database will fail to start when "-threadedServer 1" is used without an Enterprise Database License 
$   _mprosrv <dbname> -S 9898 -Mn 5 -Mpb 2 -Ma 3 -Mi 2 -threadedServer 1 -threadedServerStack 2048

The argument -threadedServer is valid for Enterprise RDBMS licenses only. (14070)
 

Example: The database will start if -threadedServer 1 is not explicitly specified without an Enterprise Database, the default is disabled:

$   _mprosrv <dbname> -S 9898 -Mpb 2 -Ma 3 -Mi 2 
BROKER  0: (19151) Threaded database server (-threadedServer): Not Enabled

c. A remote ABL client must connect for the Login Broker (_mprosrv) to spawn a multithreaded server (_mtprosrv)

Example:   With an Enterprise Database, it is still possible to start threaded and non-threaded Brokers.
           
$   _mprosrv <dbname> -S 9898 -Mn 5 -Mpb 2 -Ma 3 -Mi 2
$   _mprosrv <dbname> -m3 -S 8989 -Mpb 1 -Ma 3 -Mi 2 -threadedServer 0
$   prowin <dbname> -S 9898
$   prowin <dbname> -S 9898
$   prowin <dbname> -S 8989
 
Verify multi-threaded vs single-threaded remote servers:
 
$   promon <dbname> > R&D > 1. Status Displays > 20. Broker Startup Parameters
           
Broker: 0 Pid: 1212 Logins: 3 
...
                              Database server side join support (-ssj): Enabled
                            Threaded database server (-threadedServer): Enabled

Broker: 1 Pid: 16324 Logins: 1 
...
                              Database server side join support (-ssj): Not Enabled
                            Threaded database server (-threadedServer): Not Enabled
                            
$   promon <dbname> > R&D > 1. Status Displays > 17. Servers By Broker
(parsed out non-relevant columns)
 
Sv         Server          Pend.   Cur.   Max.   Port  User
No    Pid  Type    Logins  Users  Users  Users    Num  Type Threaded

  0   3560 Login        3      0      0      3   9898  BROK        1 (_mprosrv / BROKER)
  2  16244 Auto         2      0      2      3   3000  TSRV        1 (_mtprosrv / TSRV )

  1   8888 Login        1      0      0      3   8989  SERV        0 (_mprosrv / BROKER)
  3   9476 Auto         1      0      1      3   3001  SERV        0 (_mprosrv / SRV)
 
$   promon <dbname> > R&D > 1. Status Displays > 4. Processes/Clients > 6. Remote Clients 

(parsed out non-relevant columns)
(Note the Remote Clients each have their own thread when connected to a multi-threaded server. This information is reflected in the database lg file)
 
  Usr:Ten   Name      Type      ... Serv   SPid   STid
                                 
   22       user1     REMC/ABL  ...   3   9476  11160
   23       user1     REMC/ABL  ...   3   9476  11160 
   24       user1     REMC/ABL  ...   2  16244  16068 
   25       user1     REMC/ABL  ...   2  16244   6280 

VST: _Servers._srvparam* contains the values of Broker-specific startup parameters.

The following example is modified from Article: How to find the Database Startup parameters for all login Brokers  
DEFINE VARIABLE iParamCount AS INTEGER NO-UNDO.  

FOR EACH _servers WHERE _Server-Pid = _Server-Broker-Pid:
    DO iParamCount = 1 TO EXTENT( _servers._srvparam-name): 
        IF _srvparam-name[iParamCount] = "-threadedServer" THEN 
            DISPLAY _servers._server-type _servers._server-num 
            _servers._Server-Pid _servers._Server-Broker-Pid  _servers._server-portnum
             _servers._srvparam-name[iParamCount] _servers._srvparam-value[iParamCount]. 
    END.

 
Workaround
Notes
Last Modified Date9/29/2020 12:55 PM
Attachment 
Disclaimer The origins of the information on this site may be internal or external to Progress Software Corporation (“Progress”). Progress Software Corporation makes all reasonable efforts to verify this information. However, the information provided is for your information only. Progress Software Corporation makes no explicit or implied claims to the validity of this information.

Any sample code provided on this site is not supported under any Progress support program or service. The sample code is provided on an "AS IS" basis. Progress makes no warranties, express or implied, and disclaims all implied warranties including, without limitation, the implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample code is borne by the user. In no event shall Progress, its employees, or anyone else involved in the creation, production, or delivery of the code be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample code, even if Progress has been advised of the possibility of such damages.