BusinessObjects Board

Calculate number of BODS services in use

I currently am performing performance tuning on ETL jobs. I would like to set the ETL job not to run if large amount of BODS service is actively running. This control is not to further adding burden to the BODS server. Is there a way to check number amount of BODS services running across several job server environment - windows and UNIX?

Thanks… :wave:


StevenK (BOB member since 2009-12-30)

Any solution :?: :nonod:


StevenK (BOB member since 2009-12-30)

There’s a setting in DSCONFIG (a file that controls the DI environment) that will let you limit how many things run in parallel. But that’s only parallel threads within a job, not multiple separate jobs running at the same time.


dnewton :us: (BOB member since 2004-01-30)

I having a working environment where there are different job being trigger. These jobs are either trigger by existing scheduling services or manually being trigger. In a nut shell, there a chance too many BODS jobs being trigger. Is there no way of controlling this? :nonod:

Ps: All these job are not interrelated. Therefore it can’t merge into a single job.


StevenK (BOB member since 2009-12-30)

There is setting in DI Designer to control parallel threads. Goto Tools->Options->Job Server->Environment-> Max # of engine processes, 8 is default number, you can re-set this number depends upon your CPU’s.

Hope this might help you out.


gssharma :india: (BOB member since 2006-10-30)

That setting is the same one in DSCONFIG that I mentioned. It controls parallel threads within a job, but not across many jobs.


dnewton :us: (BOB member since 2004-01-30)

True, I just pointed out the Designer option. :yesnod:


gssharma :india: (BOB member since 2006-10-30)

Is that true?? I’ve always thought that it limited the number of AL_Engines running that were kicked off by any job?

So if you had 2 jobs that each had 8 parallel dataflows running say, The Job Server would limited the number of active AL_Engines to 8 with other 8 sat waiting?

Can see another request for improvment coming along if thats not the case :mrgreen:


ScoobyDoo :uk: (BOB member since 2007-05-10)

Any ideas on this anyone :?:


ScoobyDoo :uk: (BOB member since 2007-05-10)

Doug is right, it is a per-job setting. So if you have 19 jobs running in parallel and each job runs 500 dataflows in parallel, each job would be limited to 8 dataflow processes being executed at any time, making it 80 processes overall.


Werner Daehn :de: (BOB member since 2004-12-17)

The only solutions I can think of are rather ugly.

  1. You could build a process poller and include it in your start script for every job. Simple enough to do for Linux, just write a bash script to parse the PS for al_engine. Not sure about the windows side.

  2. Maintain a job running list. We do this as a side effect of running our own scheduler and job run table. Each job puts an entry in the jobs table and has a status (started, done, failed) which is updated by the job. Abends can be cleaned up either manually or via a expected run time value or a combination of the two.

Neither is fun but both should work.

  • E

eepjr24 :us: (BOB member since 2005-09-16)

In Windows you can use the command-line TASKLIST command.
(Not to be confused with the Windows GUI Task Manager):

TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

Description:
This command line tool displays a list of application(s) and
associated task(s)/process(es) currently running on either a local or
remote system.

Parameter List:
/S system Specifies the remote system to connect to.

/U [domain]user Specifies the user context under which
the command should execute.

/P [password] Specifies the password for the given
user context. Prompts for input if omitted.

/M [module] Lists all tasks that have DLL modules loaded
in them that match the given pattern name.
If the module name is not specified,
displays all modules loaded by each task.

/SVC Displays services in each process.

/V Specifies that the verbose information
is to be displayed.

/FI filter Displays a set of tasks that match a
given criteria specified by the filter.

/FO format Specifies the output format.
Valid values: “TABLE”, “LIST”, “CSV”.

/NH Specifies that the “Column Header” should
not be displayed in the output.
Valid only for “TABLE” and “CSV” formats.

/? Displays this help/usage.

Filters:
Filter Name Valid Operators Valid Value(s)
----------- --------------- --------------
STATUS eq, ne RUNNING | NOT RESPONDING
IMAGENAME eq, ne Image name
PID eq, ne, gt, lt, ge, le PID value
SESSION eq, ne, gt, lt, ge, le Session number
SESSIONNAME eq, ne Session name
CPUTIME eq, ne, gt, lt, ge, le CPU time in the format
of hh:mm:ss.
hh - hours,
mm - minutes, ss - seconds
MEMUSAGE eq, ne, gt, lt, ge, le Memory usage in KB
USERNAME eq, ne User name in [domain]user
format
SERVICES eq, ne Service name
WINDOWTITLE eq, ne Window title
MODULES eq, ne DLL name

Examples:
TASKLIST
TASKLIST /M
TASKLIST /V
TASKLIST /SVC
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U domain\username /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI “USERNAME ne NT AUTHORITY\SYSTEM” /FI “STATUS eq running”


ErikR :new_zealand: (BOB member since 2007-01-10)

This is a very old thread but I’ve been working on the same thing. It was suggested that I use the WMIC command line utility on Windows. That works great at the DOS prompt but I can’t seem to get it to work from an ETL job using the EXEC() function. The job hangs.

The TASKLIST command line utility works great! Thank you to ErikR for the tip. Here is the command I use to get a count of the current running processes:

EXEC(‘cmd.exe’,‘TASKLIST /FO “TABLE” /NH | FIND /C “al_engine.exe”’)

Keep in mind that the number of al_engine processes running isn’t an exact handle on how much is going on within the job server. Each job spawns an al_engine process and then each Dataflow spawns one too. A job can run multiple Dataflows in parallel so the overall al_engine count isn’t the number of jobs running.


eganjp :us: (BOB member since 2007-09-12)

Cool that is really a useful information. Especially useful when we have window periods to load the warehouse :stuck_out_tongue:


ganeshxp :us: (BOB member since 2008-07-17)

@Jim: Can you please edit your post? You used the SQL() function instead of the EXEC() function.

…this post here will self-destruct in 24 hours…


Werner Daehn :de: (BOB member since 2004-12-17)

Corrected. Boy do I feel silly. :oops: The odd thing is it worked. OK, not really, it was tested on my laptop and it doesn’t have access to the Internet at this client site.


eganjp :us: (BOB member since 2007-09-12)