Ensemble 2015.2
New Features in Ensemble 2015.2
Ensemble 2015.2 introduced the following minor new features and enhancements:
-
Improved Efficiency with Pass-Through Generic InProc Operations
-
Message Bank Improvements
-
Production Monitor Shows Retry Status
-
Purge Improvements
-
Transformation and Subtransformation Restrictions Removed
Compatibility Issues for Upgrades to Ensemble 2015.2
The following changes in this release may affect the operation of your existing system. Review these following issues before upgrading a previous instance of Ensemble.
Upgrading Enterprise Message Bank Requires Rebuilding Indices
If you are upgrading an Ensemble Message Bank system from Ensemble 2015.1 or earlier to Ensemble 2015.2 or later, you must disable and rebuild four new indices on the Message Bank System that are created during the upgrade. Until you disable the indices, Message Bank search will not find any messages that were sent to the Message Bank before the upgrade. Once you have rebuilt the indices, the Message Bank will use them and you will get improved performance on message search.
Ensemble 2015.2 includes a development change that improved Message Bank searches by replacing date-based searches with the equivalent searches based on IDs. This substantially improves the efficiency of searches especially when searching on date ranges. This change is dependent on new indices that are created when you upgrade Ensemble, but, by default, the new indices are only populated for messages received after the upgrade. This means that Message Bank search will only find these new messages and will not find old messages until you rebuild the indices.
Rebuilding indices is covered in the Caché documentation in “Building Indices on a READ and WRITE Active System” in Caché SQL Optimization Guide. The procedure described in this compatibility issue is slightly different from the procedures described there.
This procedure assumes that your Message Bank production is live and is actively receiving messages during this procedure. You only have to perform this procedure on the Message Bank system and do not have to make any changes to the client systems that are sending messages to the Message Bank.
To disable the four indices that were created during the upgrade, rebuilt the indices, and re-enable them, follow this procedure:
-
Inactivate the indices with the following:
Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeIdTime",0) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeId",0) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NTrg",0) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NSrc",0)
-
If new messages have been added to the message bank since the upgrade, you should purge any cached queries. See “Purging Cached Queries ” in Caché SQL Optimization Guide. At this point, queries should work using the other indices on the Message Bank. They will not have any improved efficiency, but they will return old as well as new messages.
-
You can skip steps 2 through 5 as listed In “Building Indices on a READ and WRITE Active System”. The Message Bank code performs these steps automatically.
-
If you are upgrading to Ensemble 2016.2 or later, use the %BuildIndices method to rebuild the indices.
Set tSC = ##class(Ens.Enterprise.MsgBank.MessageHeader).%BuildIndices($LB("NodeIdTime","NSrc","NTrg","NodeId"),...)
See the %Library.PersistentOpens in a new tab %BuildIndices() method for a description of the method parameters. Since this method can take a long time to complete, you may want to build the indices in batches using the pStartID and pEndID parameters.
-
If you are upgrading to Ensemble 2015.2 or Ensemble 2016.1, use the %ConstructIndicesParallel() method to build the index or indices. This method can take a long time to complete depending on the size of the Message Bank. [This is step 6 in the original procedure.]
Set tSC=##class(Ens.Enterprise.MsgBank.MessageHeader).%ConstructIndicesParallel(,,,0,0,2,0)
These parameters mean:
-
pSortBegin=0 do not use the SortBegin feature (using SortBegin is incompatible with using row level locking).
-
pDroneCount=0 allows the method to set the number of background jobs.
-
pLockFlag=2 says to use row level locking.
-
pJournalFlag=0 means the index building will not be journaled. If the system fails during the index building, you will have to restart by re-entering this call.
This call will only build the four new indices because the %ConstructIndicesParallel uses the INDEXBUILDERFILTER class parameter, which specifies these four indices.
-
-
Enable the index to be used in search with the following commands:
Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeIdTime",1) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeId",1) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NTrg",1) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NSrc",1)