FAQs and tips for troubleshooting
Can I remove DWH actions?
DWH actions can only be removed if the operation has not been started yet, i.e. have the status NEW. In this case, a Delete icon is shown in the row of the action on the Administration page. This is useful to remove an action, if you have created it accidentally.
The action entries on the Administration page are never removed, but you can filter them to locate a certain entry more easily.
On the Tasks page, the action entries are automatically removed once the processing has finished successfully.
In which order are tasks executed in live mode?
Tasks are created automatically in the cmas_dwh_task table, when there are configuration changes affecting the DWH, e.g. the setting Transfer to the DWH was applied to a data field. On the Tasks page, you can choose whether you want to apply administrative changes automatically or not. When a task is executed, a new entry is created in the cmas_dwh_synchronization table. The DWH transfer service reads the data from the table and writes chunks into INT_TRANSFER_QUEUE in the DWH. The CMRF service reads the data from INT_TRANSFER_QUEUE and INT_LIVE_QUEUE. Transfer data has a higher priority than the live data. Therefore, the new data which results from the configuration change is processed first, then the live data processing is continued.
How can I reduce the transfer and update duration?
When starting a transfer or update operation on the Administration page, you can provide appropriate advanced settings to improve performance.
The following settings are available:
-
CM package size: Number of transferred objects per transaction from CM to the DWH control tables. Higher values mean better performance and bigger memory usage.
-
CM retry count: Number of retries performed before the action is finished with the CM status Error.
-
Language: Select one or several languages for localized names of entities in the DWH. This adds localizations to various DWH tables which are not localized by default.
Performance hintAdding additional localizations may have a significant performance impact. Only select languages here if they are really needed for reporting. Consider that some entities, such as enum values, are localized by default.
-
CMRF cache size: Number of transferred objects per transaction from the DWH control tables to the DWH tables.
-
CMRF retry count: Number of retries performed before the action is finished with the CMRF status Error.
-
CMRF thread count: Number of threads used to transfer the history data. The default value is 1, it can be increased to improve the transfer and update performance.
You can either modify these settings manually or choose one of the predefined configurations:
- Default: default settings providing a balance between safety and velocity
- Safe: settings to avoid out of memory errors, the action will take longer
- Fast: settings for fast execution, might cause out of memory errors
- Last: same settings as the last execution
How can I increase the log level of CMRF?
The log level is determined in the CMRF configuration file, <JBOSS_CMRF_HOME>/standalone/configuration/cmrf-<DB>.xml:
<logger category="com.consol.cmrf">
<level name="${logger.com.consol.cmrf.level:INFO}"/>
<handlers>
<handler name="CMRF_FILE"/>
<handler name="ERROR_FILE"/>
</handlers>
</logger>
It can be changed in the properties file cm6-config.properties or cmrf.properties. For example, you can change the level from the default INFO to DEBUG to get more information for troubleshooting. Add an entry logger.com.consol.cmrf.level=DEBUG to the properties file. Please see Configuring the log files.
Why are updates missing although the live mode is active?
The latest changes to objects in ConSol CM are not visible instantaneously in the DWH because the live mode runs asynchronously. It can take several minutes or longer depending on the update volume until the updates are applied to the DWH database. In addition, the CMRF only checks for updates in certain intervals.
If you need live reports you must implement them using the production database. Live reports can be implemented in CM by using the detail search, case list or dashboard widgets.
How do I know if there are performance problems?
The following kinds of log entries indicate that the execution of SQL queries is especially slow:
-
Check the
server.logfor slow CM queries:2022-10-14 10:40:56,303 INFO [Thread-timerFactory] [rvice.impl.TransferServiceImpl] Still waiting on messages...
2022-10-14 10:55:56,394 INFO [Thread-timerFactory] [rvice.impl.TransferServiceImpl] Still waiting on messages... -
Check the
cmrf.logfor slow insert operations in the DWH:2022-03-20 10:23:46,757 INFO [rvice.impl.TransferServiceImpl] Still processing unit history(estimated progress 0%, estimated remaining time 40:23:10)...
2022-03-20 10:24:46,757 INFO [rvice.impl.TransferServiceImpl] Still processing unit history(estimated progress 0%, estimated remaining time 41:23:10)...
Special case Oracle
SQL performance problems due to stale or missing table statistics can occur for large data transfers when the tables size is significantly extended or during the initial transfer when the DWH tables are empty. The update time can also be significantly degraded if the DWH is not updated regularly.
You can significantly reduce the duration of the actions by forcing an update of the table statistics on the whole CM and CMRF schemes. The following example command creates statistics for the schema CM6:
exec DBMS_STATS.GATHER_SCHEMA_STATS('CM6', OPTIONS => 'GATHER')
With the standard Oracles statistics setting, this creates histograms statistics which are needed for the specific DWH update SQLs, which allow the optimizer to find a better execution plan. You may need to repeat several times, as the different objects have different SQLs. If the data volume is very large, this can still take several hours.
How can I avoid that the transfer stops after an error?
Usually, the transfer stops when an error occurs. You can avoid this by defining recoverable exceptions which are ignored so that the transfer continues. You can provide a comma-separated list of the Java classes of the exceptions which should be ignored. Use + at the end of the class name to ignore all exceptions which inherit from the class.
Example: java.lang.Exception+ . In this case, all exceptions will be ignored, because java.lang.Exception is the parent class of all exceptions in Java.
A regular expression can be provided as optional parameter. The regular expression is applied to the message of the exception as a filter.
The following characters need to be escaped in the regular expression:
- , -> ,
- : -> :
- \ -> \
Example: java.sql.SQLRecoverableException,java.lang.RuntimeException+:.*T.{1\,2}T.*
Please note that the value for recoverable exceptions has to be set at two locations:
- CM: in the system property
cmas-dwh-server,recoverable.exceptions - CMRF: in the start command of the application server
-Dcmrf.recoverable.exceptions=java.sql.SQLRecoverableException,java.lang.RuntimeException+:.*T.{1\,2}T.*
In addition, you can also set a large number of retries.
What should I do when the live mode was aborted?
When the live mode was aborted, there will be an error message An error occurred. Update is needed. Live packages will be processed again after update. in the log files. In this case, you need to perform an update. All changes since the last successful live message will be retransmitted. This date is displayed on the Monitor page of the Web Admin Suite in the Status section (Last Live message date) and also available as epoch timestamp in the system property last.success.live.timestamp of the module cmas-dwh-server.