system namespace to monitor the DQL environment & peer information, and to provide statement diagnostics.
SYSTEM:ACTIVE_REQUESTS
ACTIVES is an alias for ACTIVE_REQUESTS.- When executing in an environment with multiple subscription servers, only data from the servicing server is reported.
- It is expected to see any query retrieving data from
active_requestsin the output in “executing” state. - Operators will record information whilst processing so it is normal to see changes in the content for
active_requests. - Zero values (times, counts) are omitted from the output.
SYSTEM:ALL_COLLECTIONS
Reports all collections in all namespaces.SYSTEM:COLLECTIONS
Reports all collections in thedefault namespace.
SYSTEM:DATA_SYNC_INFO
Reports statistics related to data sync operations.SYSTEM:DQL_INDEXES
Reports the user defined indexes (Ditto SDK only).SYSTEM:DUAL
Contains a single document with a single field. It can be used to execute and test DQL statements.SYSTEM:REQUEST_HISTORY
Records information about requests that have completed. This is the same basic information as reported byactive_requests. Information is only recorded when some aspect of the request execution meets the user-configurable qualifiers. (See configuration.)
request_history has a configurable maximum number of documents it will keep with oldest being dropped when attempting to add beyond the limit. (See configuration.)
Some points to note about the content:
- When executing in an environment with multiple subscription servers, only data from the servicing server is reported.
- There should not be any requests in
request_historyin “executing” state- The state should reflect the final state of the request: successful completion or failure.
- Zero values (times, counts) are omitted from the output.
DELETE statement.
See also: Diagnosing problems
SYSTEM:SYSTEM_INFO
Reports a system information dump’s contents.SYSTEM:TRANSPORTS_INFO
Reports available transports information.SYSTEM:VITALS
Reports overview statistics about the query engine. It is typically the starting point for general query engine diagnostics. When executing in an environment with multiple subscription servers, only data from the servicing server is reported.- The histograms decay over a 15 minute interval.
- “other” is all statements not covered by the individual metrics, e.g.
ALTER SYSTEM - All timings are in nanoseconds
Configuration
Where appropriate, the virtual collections content is determined by configuration settings allowing a user some control over what information is available.Request History
The system:request_history collection’s size is determined by theDQL_REQUEST_HISTORY_SIZE system parameter, defaulting to 4096, indicating the number of entries to retain. The larger the size and the larger the statements captured, the greater the memory use.
system:request_history collection is determined by the DQL_REQUEST_HISTORY_QUALIFIERS system parameter which can be set to an object listing all desired qualifiers. Qualifiers not included in the object are removed (or reset).
The following qualifiers can be set:
threshold- the total execution time in milliseconds over which qualifies the request for inclusion. This is set by default to 1000 (1 second) and is always active. It can be set to 0 to include all statements.failed- if a statement’s execution fails.trueby default.system_delete- any delete statement run against asystemnamespace collection.trueby default.mutation- if a statement is a mutation of any sort. Not active (false) by default.
Diagnosing problems
Profile analysis
The profile (#stats elements added to the plan) information permits assessment of where in the execution the time was spent and is therefore useful in directing next steps.
request_history entries show how many results the statement and each of its operators processed. This may give insight into what may need to be changed in a statement.
Analysis of the profile from multiple runs of the same statement may highlight things like selectivity-skew in filter values.
Some possible indications from profile analysis include:
- Stalled execution: If a request appears in the
active_requestsoutput but doesn’t appear to be making any progress it likely indicates an issue with the earliest (apart fromsequence) operator in the plan.- Commonly indicated by unchanging document counts anywhere in the profile.
- Excessive processing: An operator with a high document count potentially indicates this.
- Possibly a filter isn’t as selective as thought, etc.
- It may also show where “dam” operators are requiring all prior plan processing to complete before the remainder of the plan can run.
- e.g. a
GROUP BYneeds all input records before it can begin emitting the groups.
- e.g. a
- Data access issues: Underlying collection access issues may be indicated by high scan operator receive times.
- High
scanorfetchtimes are potentially indicative of collection access issues. - High index scan receive times are potentially indicative of index access issues.
- High
- Selectivity issues: Indications of index selectivity as compared to the entire predicate’s selectivity may be highlighted with a large number of documents being excluded by the
filteroperator.- The difference in document in & out counts for the
filteroperator indicate the filtering taking place.- A large amount of filtering may not indicate a problem if there are filters that cannot be applied by index scans.
- A large amount of filtering may indicate the query would benefit from different or additional indexes.
- The difference in document in & out counts for the
- Memory requirements: Document counts for operators that must process the entire prior pipeline - such as sorting and grouping - may give an indication of which statements will have larger memory requirements.
- Bottlenecks downstream in a plan may be indicated by a high operator
sendtime.- This may be observed for any operator and attention should be focused on later operators.
- Bottlenecks upstream in a plan may be indicated by a high operator
recvtime.- This may be observed for any operator and attention should be focused on earlier operators.
- Possible problems in an operator may be highlighted by a high
exectime.- This must be considered in conjunction with the number of documents being processed.
- Operator issues should be reported via support channels.
SYSTEM:ACTIVE_REQUESTS & SYSTEM:REQUEST_HISTORY
When initially developing DQL statements the explain statement is used to determine the execution plan a query will use. Once deployed it may not always be possible to revert to examination of such a plan or there might be concern that the plan has materially changed. Thesystem:active_requests and system:request_history collections contain1 instances of the actual execution plan used by a request, annotated with timing and document count information. These can be used to discover where in the execution a statement is taking time and can highlight things like unexpectedly low selectivity of filters or failure to find a suitable index.
Sometimes it may be possible to execute a statement directly when diagnosing issues. The
PROFILE keyword appends the request_history entry (without having to pass qualification) to the statement’s results. This allows dynamic access all the same information as is included in request_history without having to capture a live instance of its execution.Producer operators are executed in parallel with their consumers and may show a much higher
"documentsOut" count than the consumer’s "documentsIn". For completed requests, this is an indication that the consumer has stopped processing early and has not processed all of the documents sent by the producer. This might be perfectly normal, for instance when a LIMIT operator has hit the document count and has therefore stopped processing, or it may be that a downstream operator has encountered an error and has stopped the statement execution as a result.1. Currently only available for select statements.