#Database Transaction Processing

0 Followers · 17 Posts

Databases and other data stores which treat the integrity of data as paramount often include the ability to handle transactions to maintain the integrity of data. A single transaction consists of one or more independent units of work, each reading and/or writing information to a database or other data store.

Documentation.

Article Sanjib Pandey · Oct 17, 2025 13m read

Overview

This web interface is designed to facilitate the management of Data Lookup Tables via a user-friendly web page. It is particularly useful when your lookup table values are large, dynamic, and frequently changing. By granting end-users controlled access to this web interface (read, write, and delete permissions limited to this page), they can efficiently manage lookup table data according to their needs.

The data managed through this interface can be seamlessly utilized in HealthConnect rules or data transformations, eliminating the need for constant manual monitoring and management of the lookup tables and thereby saving significant time.

Note:
If the standard Data Lookup Table does not meet your mapping requirements, you can create a custom table and adapt this web interface along with its supporting class with minimal modifications. Sample class code is available upon request.

0
1 59
Question Rutvik ISM · Aug 19, 2025

I would like to learn about the binary and document reference FHIR Resources. For the PDF data stored in those resources. But I think Binary Resource for the Document PDF stored in FHIR, so this resource is best for it. So sometimes Large PDF 15-page (~35md) data converts into base64 then data length is ~50 lac charecters length of base64binary data. this data store in Binary Resource on data field https://www.hl7.org/fhir/R4/binary.html follow this url this resource used in my case. so it's support the 50 lac charecter of the base64 length? This resource can be Insert into IRIS?

3
0 81
Question Stefan Cronje · Apr 5, 2024

Hi all,

I have a situation where I am writing to global from different processes - let's call it an Event Queue.
There is then a different process that uses $order to read through the data - the PubSub processing BP.

Sometimes the writing of this global will form part of a transaction that also insert data into other tables, using tstart and tcommit.
If there is some issue, it will roll back, and the entry written to the global will also roll back.

6
0 203
Discussion Eduard Lebedyuk · Mar 5, 2024

Work Queue Manager (WQM) is a feature of InterSystems IRIS that enables you to improve performance by distributing work to multiple concurrent processes programmatically. The idea is that you split the work into chunks, and WQM distributes the chunks across worker processes and can provide the info that the work is done.

However, recently, I got an interesting question: there's a large logical transaction composed of ~1,000,000 individual objects and SQL inserts and updates. Some updates are CPU-intensive, so the original idea was to use WQM to split an update into chunks to speed things up. 

But, here's a catch: if one of the individual 1,000,000 changes fails (there's a variety of application-level checks so that it can fail, and that's not even that abnormal a behavior), the entire transaction must be rolled back. That creates a problem: each chunk must report success before committing their individual transactions, and someone must get all these reports and decide if we are committing or not.

Unfortunately, it looks like WQM does not have a bidirectional communication between workers and manager, so I suggested an approach using events:

  1. Start jobs.
  2. Wait for all jobs to report success using $System.Event.WaitMsg().
  3. Send Commit or Rollback using the $System.Event.Signal().
9
2 331
Question Stefan Cronje · Dec 21, 2023

Hi,

The system I am working on processes large numbers of records. Inserts, updates and so forth. There are multiple processes that can potentially work on the same table at the same time. 

It is an almost impossible task to try and time these processes to not run at the same time, due to volumes, SLAs, etc.

Every now and then there are a few locking issues, Not many considering the volumes. It is just a bit of a nuisance as we need to reprocess these records later.

All the selects on the processes run at IsolationMode 0 and the transactions are kept as short as possible.

6
0 377
Question Norman W. Freeman · Feb 8, 2023

I use the following code (which is a simplified version of what happen on a server) :

tstartfor I=1:1:N {
  set test = ##class(Test.Test).%New()
  set test.ID = I
  do test.%Save() //create a "Exclusive_e->Delock" lock on ^Test.TestD(..)
}
hang 5tcommit//locks are removed here

Test.Test is a persistent class that inherit from %Persistent :

Class Test.Test Extends %Persistent
{
   Property ID As%Integer [ Required ];
   Index IDKEY On ID [ IdKey ];//...      
}
6
0 376
Article Piyush Adhikari · Oct 19, 2022 3m read

The capacity of taking numerous records every second while also facilitating real-time queries simultaneously in real time is called Hybrid Transactional Analytical Processing (HTAP). It is also called Transactional analytics or Transanalytics or Translytics and is a very useful element in scenarios where there is constant flow of real time data coming from IIOT sensors or data on fluctuations in stock market, and supporting the need for querying these data sets in real-time or near real-time.

4
0 891
Question Ciaran Mooney · Mar 12, 2020

Hi All

When performing an update transaction on  patient data in GUI Apex 5.8 cache2017, we randomly get a ‘Database Connection Lost’ error. Subsequently the application quits and the incomplete transaction is rolled back.
 

We have confined its not a network issue as we can still query the database using CHUI Apex when these events occur.

so any input appreciated.

1
0 349
Question Dmitry Maslennikov · Jan 12, 2020

In one of the projects, when we have ECP with 10 ECP application servers, from time to time we faced the issue when our journals fail to purge, due to open transactions. While we have about 100-150 GB journal files per day, it quite quickly became a big issue, and with mirroring a very big issue. Mostly we just rebooted our ECP Data server, so it searches rollbacks any transactions, but such process is too long, may steal a few hours. I did not find any way, how to get the list of the open transactions from one place from ECP Data Server. We just migrated our Data server to 2018.1. while our

4
0 1037
Question Stefan Rieger · Feb 2, 2020

will InterSystems fix the Transaction-Handling for  the  .Net Connection Provider?

Nor the  Property IsTransactionAcvtive nor TransactionLevel is set on the  Connection  when using BeginTransaction.

Latest PreView will give me   problem as InterSystems removed removed the TStart() Option to create the Transaction that way which gave back a TransactionObject whith working versions...

2
1 369
Article Sergey Kamenev · Nov 11, 2019 11m read

InterSystems IRIS supports a unique data structure, called globals, for information storage. Essentially, globals are persistent arrays with multi-level indices, having several extra capabilities—transactions, quick traversal of tree structures, and a programming language known as ObjectScript.

I'd note that for the remainder of the article, or at least the code samples, we'll assume you have familiarised yourself with the basics of globals:

7
2 1044
Question Laura Cavanaugh · Nov 7, 2019

Hello community!

I have a question about the %OnSave method of a class.  We have a class that  has two properties that are classes. 

Class A

Class B

Class C

Class A.PropertyB as Class B

ClassA.PropertyC as Class C

Classes B and C also need to point back to Class A - it's just the way it is.  We need to be able to use any one of these classes and get to the others (it's actually even more complicated than this, as Classes B and C also have a PropertyC and PropertyB as well, respectively) :

ClassB.PropertyA as Class A

ClassC.PropertyA as Class A

3
0 1090
Article Alexander Koblov · Jul 1, 2019 2m read

It’s often useful to make changes inside the current transaction, that would not be rolled-back if transaction is rolled-back. For example to do some logging.

This can be achieved by using global that is mapped to temporary database -- IRISTEMP. All globals that start with ^IRIS.Temp* are mapped to IRISTEMP by default. Problem with such approach is that IRISTEMP is cleaned on InterSystems IRIS restart, so this log is lost.

What else you can do is -- suspend transaction temporarily, do the logging, and then resume the same transaction.

Method that suspends/resumes transaction is $System.Process.TransactionsSuspended(switch).

If switch is 1 transactions are suspended, if switch is 0 transactions are resumed.

For example:

USER>tstart
 
TL1:USER>set ^a=1
 
TL1:USER>do $system.Process.TransactionsSuspended(1)
 
TL1:USER>set ^log($I(^log)) = "we set ^a to 1"
 
TL1:USER>do $system.Process.TransactionsSuspended(0)
 
TL1:USER>trollback
 
USER>zw ^a
 
USER>zw ^log
^log=1
^log(1)="we set ^a to 1"

Notice, in this case changes in ^log global are still journaled (if it is mapped to journaled-database).

Some details are in “Suspending All Current Transactions” section of “Transaction Processing” chapter of documentation.

8
1 612
Question Guillaume Rongier · Sep 20, 2018

Hi, We recover a large amount of data from an external database (SQLServer, about 1 million rows in JDBC).
However, we have treatment time issue.
This process takes more than 30 minutes whereas on a "classic" SQL Server Management Studio type request takes less than a minute.

While searching on the internet, I came across this article: http://makejavafaster.blogspot.com/2015/06/jdbc-fetch-size-performance.html
It explains how in Java, we can tweak the FetchSize parameter of the JDBC driver to optimize this kind of process.

Is there a way to access this JDBC parameter through the EnsLib.SQL.OutboundAdapter adapter?

If not, how do you deal with this kind of situation of large volumetry?

Code used in the EnsLib.SQL.OutboundAdapter :

Method GetResultSetView(pRequest As Ens.StringRequest, Output pResponse As Ens.StringResponse) As %Status {

set tStatus = $$$OK

//Set ..Adapter.StatementAttrs = "fetchSize:200"  <-- Make no difference
//Set ..Adapter.StatementAttrs = "Type=TYPE_FORWARD_ONLY" <-- Make no difference

$$$ThrowOnError(..Adapter.SetAutoCommit(0))


try{
	
	set pResponse = ##class(Ens.StringResponse).%New()
	set sqlGetView = "SELECT * from TableOfMillionsLignes"
	
	
	Set pSnap = ##class(EnsLib.SQL.Snapshot).%New()
	
	//dimension du snapshot
	// -1 = Max
	set pSnap.MaxRowsToGet = -1
	
	$$$ThrowOnError(..Adapter.ExecuteQuery(.pRS,sqlGetView))	
	
	//Most of the time is spend here
	$$$ThrowOnError(pSnap.ImportFromResultSet(pRS,0))

	
	$$$ThrowOnError(pSnap.%Save())
	

	set pResponse.StringValue = pSnap.%GblRef	
}
catch exp
{
	Set tStatus = exp.AsStatus()
}
Quit tStatus

}

7
1 1528
Question Scott Beeson · Jun 21, 2016

If I wanted to build a web-based dashboard that monitored various HIE transactions where would I start?

Examples of measures would be Provide & Registers by Facility, Patient Views by facility or even PHR related data.

I have a successful POC that uses nodejs, html and SQL but I think it makes more sense to use Intersystems technology all the way around, I just don't know where to begin.

CSP for the web piece I assume?  How would I access the data, for instance all P&R requests on the BUS?  Any other tips or starting points?  Maybe examples of a similar project?

We do not have a DeepSee license

10
0 671