Skip to main content

DSMaxFetchArraySize = -1 Could Result IN High Memory Usage / Crash Of OM PIDs in Siebel

APPLIES TO:

Siebel CRM - Version 7.5.3 SIA [16157] to 18.8 [Release V7 to V17]
Information in this document applies to any platform.
Area(s):Client Functionality, System Administration
Release(s):V7 (Enterprise), V7 (MidMarket), V7 (Professional) and Later (IP2013, IP2014, IP2015, IP2016 and IP2017)
Database(s):All Supported Databases
App Server OS(s):All Supported Platforms
Latest release tested against:V7 (Enterprise)
Keywords:crash, SBL-DAT-00500, fetch, 10000, DSMaxFetchArraySize, leak, exception

DESCRIPTION

This Alert applies to all versions.

In Siebel 7 there are two cursor modes specified with the ExecuteQuery method, ForwardOnly and ForwardBackward.

  • ForwardOnly: Selected records can be processed only from the first record to the last record. Focus cannot return to a record.

  • ForwardBackward: Selected records can be processed from first to last or from last to first. This is the default if no value is specified.

DSMaxFetchArraySize is a named subsystem parameter that controls the maximum number of records that can be returned by a business component in ForwardBackward mode. It does not restrict the number of records returned for ForwardOnly cursors. By default, the DSMaxFetchArraySize parameter has a value of 0. When this parameter is set to 0, the Object Manager initializes the parameter to 10,000. This means that a maximum of 10,000 records can be returned by a business component in ForwardBackward mode.

When records are being retrieved from a business component in ForwardBackward mode, if the number of records retrieved is greater than the value of DSMaxFetchArraySize, (10,000 by default) then the following message will be displayed:

SBL-DAT-00500: "There were more rows than could be returned. Please refine your query to bring back fewer rows."

This is the expected behavior. An example of when this message would appear is when a user scrolls through the records in a list applet and tries to access the 10,001 th record (assuming the default value of DSMaxFetchArraySize is in place).

It is possible to alter this behavior by setting the DSMaxFetchArraySize to -1 (unlimited). This means that there is no limit to the number of records returned by a business component in ForwardBackward mode. All the records of the business component are enumerated. Essentially, all the records retrieved will stay in the memory until the next business component execution or when the business component is destroyed.

Setting DSMaxFetchArraySize to -1 has been found to cause large memory use and growth of the Object Manager process (siebmtshmw.exe), and could cause the Object Manager to crash from memory exhaustion. OM PIDs crashing when trying to allocate memory when process memory usage reached limit:

One of the call stacks noted for such crash type :

KERNELBASE!RaiseException+48
msvcr110!_CxxThrowException+57
msvcr110!operator new+4e

sslcshar!CCFBlockAllocator::AllocateBlock
sslcshar!CCFProcessMemPool::Allocate
sslcshar!CCFArray<CCFElemPtr<void> >::SetSize
sslcshar!CCFArray<CCFElemPtr<void> >::InsertAt
sscfdm!CSSACRSCEngine::UnRestrictBS
sscfdm!CSSSqlObj::DoAddListRow
sscfdm!CSSSqlObj::AddListRow
sscfdm!CSSSqlObj::NextRecord

 

NOTE: Setting the parameter DSMaxFetchArraySize to -1 or to a value greater than 10000 is not recommended.

OCCURRENCE

The behavior will occur if DSMaxFetchArraySize is set to -1. To verify this setting, in the Siebel Client, navigate to Site Map > Server Administration > Enterprise Configuration > Enterprise Profile Configuration, then highlight the ServerDataSrc named subsystem in the Component Profiles applet. In the Enterprise Profile Configuration applet, verify the DSMaxFetchArraySize parameter setting as shown below:

DSMaxFetchArraySize_img


Additionally, you can use the srvrmgr command line utility to verify the setting of the DSMaxFetchArraySize parameter. In the srvrmgr command line utility, type the following:

Srvrmgr> list parameter DSMaxFetchArraySize for named subsystem ServerDataSrc
For Siebel v8.x and above Command will be :
Srvrmgr> list ADVANCED parameter DSMaxFetchArraySize for named subsystem ServerDataSrc

SYMPTOMS

  • Large memory use by the Object Manager processes; single processes, siebmtshmw.exe, using greater than 1GB of physical memory have been observed.

  • Object Manager memory leaks. For detailed information about memory usage and memory leaks, refer to Technical Note 361.

  • Object Manager crashes caused by memory exhaustion.

WORKAROUND

The workaround for this behavior is to make sure that the DSMaxFetchArraySize is set to 0 (the default). If it needs to be reset to 0, this can be done as follows:

For Version before 7.7 navigations:

  • You can use the Siebel Client to navigate to Site Map > Server Administration > Enterprise Configuration > Enterprise Profile Configuration, then highlight the ServerDataSrc named subsystem in Component Profiles applet. In the Enterprise Profile Configuration applet, set the DSMaxFetchArraySize parameter to.

  • For Version before 7.8 and later  navigations:

    • You can use the Siebel Client to navigate to Site Map >  Administration - Server configuration > Enterprise > Enterprise Profile Configuration, then highlight the ServerDataSrc named subsystem in Component Profiles applet. In the Enterprise Profile Configuration applet, set the DSMaxFetchArraySize parameter to.

  • You can use the srvrmgr command line utility to also change the value of the DSMaxFetchArraySize parameter. In the srvrmgr command line utility, type the following:

    Srvrmgr> change parameter DSMaxFetchArraySize=0 for named subsystem ServerDataSrc
  • Restart all the Siebel servers for this change to take effect.

Source: Oracle Doc ID 477558.1

See Alos:
SBL-DAT-00590 Error While Trying to Pick A Value For A Picklist Field (Doc ID 1335003.1)
There were more rows than could be returned error occurs when executing LookupValue in an UI data map (Doc ID 1925807.1)

Comments

Popular posts from this blog

How to set Profile Attribute in Siebel Workflow

For setting the Profile Attribute in Siebel Workflow, follow below steps: Add Business Service box in workflow. Open Business Service properties. Set  SessionAccessService in Business Service Name. Set  SetProfileAttr in Method Name. Then click on Business Service and set Input Arguments as below: Against Name argument you will add your profile attribute name and against Value argument you will add value for the new profile attribute, it could be from Process Property or Literal.

How to call Popup Applet through Server Script in Siebel

Background: Based on the requirements you need to show data or reports on a popup applet. You can invoke popup applet using workflow (below business service will be used in business service step), applet server script or browser script and using vanilla method and setting field user properties. Procedure: Below is the script for calling popup applet through server script: if (MethodName == "MethodName") { var oServiceAF = TheApplication().GetService("SLM Save List Service"); var inputPropAF = TheApplication().NewPropertySet(); var outputPropAF = TheApplication().NewPropertySet(); inputPropAF.SetProperty("Applet Name","ABC Popup Applet"); inputPropAF.SetProperty("Applet Mode","6"); inputPropAF.SetProperty("Applet Height", "700"); inputPropAF.SetProperty("Applet Width", "700"); oServiceAF.InvokeMethod("LoadPopupApplet", inputPropAF, outputPropAF) return (CancelOperati...

How to create and publish Inbound Web Service in Siebel based on Workflow

Inbound Web Services: The Inbound Web Service allows an external system to call a Siebel published Web Service. You can publish a business service or a business process as a Web Service and generate a Web Service Definition Language (WSDL) file that an external system can import. The Inbound Web Services can only be published from Siebel C using SOAP-RPC binding. Source: Oracle Docs What Is The Difference Between Web Services and APIs? An API is an interface that allows you to build on the data and functionality of another application, while a web service is a network-based resource that fulfills a specific task. Yes, there’s overlap between the two: all web services are APIs, but not all APIs are web services. Both web services and APIs are — at their core — very useful and very much used today. However, it’s the web services associated with SOAP and/or Service Oriented Architecture which are falling out of favor. Source: NordicApis Process: Prepare the workflow which will serve as Si...