There are multiple reasons why a scope query can take longer to run. Sometimes there are simply too many objects in the monitored environment.
Check the documentation for reference to the Query Language.
Here are a few tips that may speed up a scope query.
Don't use a scope in this format:
Host where name='Server1' OR name='Server2' OR name='Server3' OR name='Server4'
The scope query above has to read the name property four times, it's faster to use a scope query like this:
Host where name in {'Server1','Server2','Server3','Server4'}
It's almost inevitable to use within, but avoid using within^inf:
Host where $object within^inf(FSMService where name = 'MY FOGLIGHT SERVICE')
Using within^inf looks for every object within that parent object on all levels. Limit the amount of levels deep it will look for the objects in the required scope, like this:
Host where $object within^3(FSMService where name = 'MY FOGLIGHT SERVICE')
Avoid querying for all objects of this type contained within a service using $object like this:
LogicalDisk where $object within^5(FSMService where name = 'MY FOGLIGHT SERVICE')
Most of these objects have a reference to the Host object it's associated with, which is not as deep within that service to require too much within depth, for the example above, use the host property and use a lower depth value:
LogicalDisk where host within^3(FSMService where name = 'MY FOGLIGHT SERVICE')
For VMWVirtualMachineLogicalDisk objects, the property that needs to be compared against is monitoredHost:
VMWVirtualMachineLogicalDisk where monitoredHost within^3(FSMService where name = 'MY FOGLIGHT SERVICE')
Avoid using within^inf. The optimal depth value varies depending on how many nested parent-child objects are needed to be traversed to get to the object required. Experimentation in the script console goes a long way to compare different approaches.
Use this script to compare the performance of different combinations of these recommendations, just make sure that the strings in the scope are between single quotes (') consistently. Special characters like the dollar sign symbol ($) need to be escaped within the string.
//--------------Begin script
qrySvc = server.get("QueryService");
long now = System.currentTimeMillis();
// Replace with a valid query
queryString = "VMWVirtualMachineLogicalDisk where \$object within^6(FSMService where name = 'MY FOGLIGHT SERVICE')"
stmt = qrySvc.createStatement(queryString).setQueryTopologyObjects(true);
topObjs = qrySvc.executeStatement(stmt).getTopologyObjects();
if (topObjs.size() > 0)
"Found "+topObjs.size().toString()+" objects. Done in "+(System.currentTimeMillis()-now)/1000+"s";
else
"No objects found";
//--------------End script
© 2024 Quest Software Inc. ALL RIGHTS RESERVED. Nutzungsbedingungen Datenschutz Cookie Preference Center