#TrakCare

0 Followers · 94 Posts

InterSystems TrakCare is the leading international multi-language, multi-currency Healthcare Information System designed to meet your needs.

Learn more.

Announcement Celeste Canzano · Nov 10, 2025

Hello InterSystems EHR community, 

InterSystems Certification is currently developing a certification exam for InterSystems EHR integration specialists, and if you match the exam candidate description below, we would like you to beta test the exam! The exam will be available for beta testing starting November 10, 2025. 

Please note, completion of the TrakCare Healthcare Messaging Framework (HMF) course is required for non-InterSystems employees to be eligible to take the beta. Please see Required Training under Exam Details below for more information about eligibility.
0
0 21
Article Murray Oldfield · Aug 26, 2025 6m read

I am regularly contacted by customers about memory sizing when they get alerts that free memory is below a threshold, or they observe that free memory has dropped suddenly. Is there a problem? Will their application stop working because it has run out of memory for running system and application processes? Nearly always, the answer is no, there is nothing to worry about. But that simple answer is usually not enough. What's going on?

Consider the chart below. It is showing the output of the free metric in vmstat. There are other ways to display a system's free memory, for example, the free -m command. Sometimes, free memory will gradually disappear over time. However, the chart below is an extreme example, but it is a good example to illustrate what's going on.

image

As you can see, at around 2 am, some memory is freed, then suddenly drops close to zero. This system is running the IntelliCare EHR application on the InterSystems IRIS database. The vmstat information came from a ^SystemPerformance HTML file that collects vmstat, iostat and many other system metrics. What else is going on on this system? It is the middle of the night, so I don't expect much is happening in the hospital. Let's look at iostat for the database volumes.

image

There is a burst of reads at the same time as the free memory drops. The drop in reported free memory aligns with a spike in large block-sized reads (2048 KB request size) shown in iostat for the database disk. This is very likely a backup process or file copy operation. Ok, so correlation isn't causation, but this is worth looking at, and it turns out, explains what's going on.

Let's look at some other output from ^SystemPerformance. The command free -m is run at the same rate as vmstat (for example, every 5 seconds), and is output with a date and time stamp, so we can also chart the counters in free -m.

The counters are:

  • Memtotal – Total physical RAM.
  • used – RAM in active use (apps + OS + cache).
  • free – Completely unused RAM.
  • shared – Memory shared between processes.
  • buf/cache – RAM used for buffers & cache, reclaimable if needed.
  • available – RAM still usable without swapping.
  • swaptotal – Total swap space on disk.
  • swapused – Swap space currently in use.
  • swapfree – Unused swap space.

Why does free memory drop at 2 am?

  • The large sequential reads fill the filesystem page cache, temporarily consuming memory that appears as "used" in free -m.
  • Linux aggressively uses otherwise idle memory for caching I/O to improve performance.
  • Once the backup ends (≈ 03:00), memory is gradually reclaimed as processes need it.
  • Around 6 am, the hospital starts to get active, and memory is used for IRIS and other processes.

Low free memory is not a shortage, but rather the system utilising "free" memory for caching. This is normal Linux behaviour! The backup process is reading large amounts of data, which Linux aggressively caches in the buffer/cache memory. The Linux kernel converts "free" memory into "cache" memory to speed up I/O operations.

Summary

The filesystem cache is designed to be dynamic. If a process requires memory, it will be immediately reclaimed. This is a normal part of Linux memory management.


Does Huge Pages have an impact?

For performance and to reserve memory for IRIS shared memory, the best practice for production IRIS deployments on servers with large memory is to use Linux Huge Pages. For IntelliCare, a rule of thumb I use is to use 8 GB memory per core and around 75% of memory for IRIS shared memory -- Routine and Global buffers, GMHEAP, and other shared memory structures. How shared memory is divided up depends on application requirements. Your requirements could be completely different. For example, using that CPU to memory ratio, is 25% enough for your application IRIS processes and OS processes?

InterSystems IRIS uses direct I/O for database and journal files, which bypasses the filesystem cache. Its shared memory segments (globals, routines, gmheap, etc.) are allocated from Huge Pages.

  • These huge pages are dedicated to IRIS shared memory and do not appear as "free" or "cache" in free -m.
  • Once allocated, huge pages are not available for filesystem cache or user processes.

This explains why the free -m metrics look "low" even though the IRIS database itself is not starved of memory.


How is the free memory for a process calculated?

From above, in free -m, the relevant lines are:

  • free – Completely unused RAM.
  • available – RAM still usable without swapping.

Available is a good indicator — it includes reclaimable cache and buffers, showing what’s actually available for new processes without swapping. What processes? For a review, have a look at InterSystems Data Platforms and Performance Part 4 - Looking at Memory . A simple list is: Operating system, other non-IRIS application processes, and IRIS processes.

Let's look at a chart of the free -m output.

image

Although free drops near zero during the backup, available remains much higher (tens of GB). That means the system could provide that memory to processes if needed.

Where do huge pages appear in free?

By default, free -m does not show huge pages directly. To see them, you need /proc/meminfo entries like HugePages_TotalHugePages_Free, and Hugepagesize.

Because the OS reserves huge pages at startup, they are effectively invisible to free -m. They are locked away from the general memory pool.

Summary

  • The low "free memory" seen around 02:00 is caused by the Linux page cache being filled by backup reads. This is expected behaviour and does not indicate a memory shortage.
  • Huge pages reserved for IRIS are unaffected and continue serving the database efficiently.
  • The actual memory available to applications is best measured by the available column, which shows the system still has sufficient headroom.

But wait, what about if I don't use Huge Pages?

It is common not to use Huge Pages on non-production or systems with limited memory -- performance gains of Huge Pages are usually not significant under 64 GB, although it is still best practice to use Huge Pages to protect IRIS shared memory.

Sidebar. I have seen sites get into trouble by allocating Huge Pages smaller than shared memory, which causes IRIS to try and start with very small global buffers or fail to start if memlock is used (consider memlock=192 for production systems).

Without Huge Pages, IRIS shared memory segments (globals, routines, gmheap, etc.) are allocated from normal OS memory pages. This would show up under “used” memory in free -m. It would also contribute to “available” going lower, because that memory can’t easily be reclaimed.

  • used – Much higher, reflecting IRIS shared memory + kernel + other processes.
  • free – Likely lower, because more RAM is permanently allocated to IRIS in the regular pool.
  • buf/cache – Would still rise during backups, but the apparent headroom for processes would look tighter because IRIS memory is in the same pool.
  • available – Closer to the true “free + reclaimable cache” minus IRIS memory. This would look smaller than in your Huge Pages setup.

So, should you use Huge Pages on production systems?

YES!

For memory protection. IRIS shared memory is protected from:

  • Swap out during memory pressure.
  • Competition with filesystem operations like backups and file copies, as we have seen in this example.

Other notes - into the weeds...

How is the data collected?

The command used in ^SystemPerformance for a 24-hour collection (17280 seconds) with 5 second tick is:

free -m -s 5 -c 17280 | awk '{now=strftime(""%m/%d/%y %T""); print now "" "" $0; fflush()}' > ","/filepath/logs/20250315_000100_24hours_5sec_12.log

2
7 172
Article Vachan C Rannore · Oct 21, 2025 3m read

Hello!!!

Data migration often sounds like a simple "move data from A to B task" until you actually do it. In reality, it is a complex process that blends planning, validation, testing, and technical precision.

Over several projects where I handled data migration into a HIS which runs on IRIS (TrakCare), I realized that success comes from a mix of discipline and automation.

Here are a few points which I want to highlight.

1. Start with a Defined Data Format.

Before you even open your first file, make sure everyone, especially data providers, clearly understands the exact data format you expect. Defining templates early avoids unnecessary bank-and-forth and rework later. 

While Excel or CSV formats are common, I personally feel using a tab-delimited text file (.txt) for data upload is best. It's lightweight, consistent, and avoids issues with commas inside text fields. 

PatID   DOB Gender  AdmDate
10001   2000-01-02  M   2025-10-01
10002   1998-01-05  F   2025-10-05
10005   1980-08-23  M   2025-10-15

Make sure that the date formats given in the file is correct and constant throughout the file because all these files are usually converted from an Excel file and an Basic excel user might make mistakes while giving you the date formats wrong. Wrong date formats can irritate you while converting into horolog.

8
1 103
Announcement Kimi Niittyniemi · Sep 14, 2025

We are excited to announce the general availability of JediSoft IRISsync®, our new synchronization and comparison solution built on InterSystems IRIS technology.  IRISsync makes it easy to synchronize and compare IRIS instances.

IRISsync was voted runner-up in the "Most Likely to Use" category at InterSystems READY 2025 Demos and Drinks.

A huge thanks to everyone who supported us — we’re thrilled to see IRISsync resonating with the InterSystems user community!

0
0 74
Article Vachan C Rannore · Aug 18, 2025 3m read

While starting with Intersystems IRIS or Cache, developers often encounter three core concepts: Dynamic Objects, Globals & Relational Table. Each has its role in building scalable and maintainable solutions. In this article, we'll walk through practical code examples, highlight best practices, and show how these concepts tie together. 

1. Working with Dynamic Objects:

Dynamic objects (%DynamicObject and %DynamicArray) allow developers to manipulate JSON-like structures directly in Objectscript. They are especially useful for modern applications that need to parse, transform or generate JSON.

2
4 134
Announcement Celeste Canzano · Jun 27, 2025

Hello InterSystems EHR community,

InterSystems Certification is currently developing a certification exam for InterSystems EHR Reports specialists, and if you match the exam candidate description given below, we would like you to beta test the exam! The exam will be available for beta testing starting June 30, 2025.

1
2 214
Article Harshitha · Aug 3, 2025 2m read

Working in healthcare IT as a young developer, especially on InterSystems TrakCare, you quickly realize one thing: it’s not just about HL7 messages or backend integrations. A hugepart of making TrakCare work smoothly for hospitals comes down to how it’s configured, customized, and supported on the application side.

That’s where people like me come in—techno-functional developers who understand both the tech and how it impacts actual hospital workflows.

We’re Not Just Techies (or Functional Consultants)

Our role sits right in the middle. We're the ones:

1
2 77
Announcement Ben Spead · Jul 17, 2025

Hello CCR Users at TrakCare sites!

The Certification team at InterSystems Learning Services is currently developing an InterSystems CCR EHR (aka TrakCare) Specialist certification exam, and we are reaching out to our community for feedback that will help us finalize the exam contents.

How do I provide my input? Complete our Job Task Analysis (JTA) survey! We will present you with a list of job tasks, and you will rate them on their importance as well as other factors.

1
0 79
Question steven Henry · Jul 10, 2025

Hello my friends,

I have a problem with logi report, 

in my store procedure,  I create code like this?

$ListToString(%DLIST(DISTINCT (ARCIM_Desc)),'<br/>') as "ARCIM_Desc", -> this is the problem

$ListToString(%DLIST(DISTINCT (MRDIA_ICDCode_DR)),'<br/>') as "MRDIA_ICDCode_DR", -> it's works fine

as you see there's a <br/> in the display of the report

I have no idea about this, maybe someone can help me fix this problem ?

Thank You

Best Regards,

Steven Henry

4
0 95
Question steven Henry · Jul 10, 2025

Hello my friends,

I have a problem with Objectscript, why the value of address become like this ?

everything works fine except the Address,

this is my code, do I need something to make this into real address ? should I put something in my code ? 

 set paper=obj.PAADMPAPMIDR.PAPMIPAPERDR

            if '$isobject(paper) continue

            set Address=paper.PAPERStName

thank you for your help

Best Regards,

Steven Henry

3
0 70
Question Harshitha · Jul 1, 2025

Hi everyone,

I'm working with JavaScript in InterSystems IRIS, specifically in CSP pages. One issue I'm running into during development is that the browser keeps loading the cached version of my JavaScript files, even after I’ve made changes or recompiled the code.
I would have to clear my cache files or browser history for it to reload and work.

2
1 110
Announcement Ben Spead · Jun 23, 2025

All,

At READY 2025 we will have a CCR User Group Breakfast for HealthShare and TrakCare customers on Wednesday at 7:30am (presentation starts at 7:45am).  Topics will include:

  • Review of Self Service Best Practice Dashboard
  • Recent CCR New Features and Enhancements
  • Active CCR Feature Beta Programs
  • Summer and Fall Roadmap
  • Q&A 

We will meet in the Jackson meeting room.  Visit the Meeting Counter to have it added to your schedule or comment below to request an invite.

0
0 52
Article Jim Liu · May 14, 2025 7m read

This article presents a potential solution for semantic code search in TrakCare using IRIS Vector Search.

Here's a brief overview of results from the TrakCare Semantic code search for the query: "Validation before database object save".

 

  • Code Embedding model 

There are numerous embedding models designed for sentences and paragraphs, but they are not ideal for code specific embeddings.

0
0 187
Question Jude Mukkadayil · Feb 26, 2025

Hi ,

          I am creating a report on Trakcare with the help of Jreport. But the date parameter from trakcare is not reading on Jreport and the report is blank.

If I hardcode the date on Jreport,it is displaying on Trakcare but not taking report from Trakcare.

Parameter used on report manager on Trakcare is $g(%request.Data("DateFrom",1)).

Can anyone please tell me any change of settings on Trakcare or Jreport will help to work ? 

Thanks for the help

Jude

8
0 168
Question Balkis Zaitoun · May 18, 2024

Hi. I am struggling to understand the meaning of different elements of an order in my hospital's EHR.

Page: EPR > All Orders

Question: What is the difference between Start Date and Date Executed and Order End Date? If an order was started on Monday and executeed on Tuesday.. does this mean the patient received the order on Monday or Tuesday? and what is End date?

Also, how do I interpret order status? What is the difference between discontinued, verified, and executed?

Also, some  orders have a green / red / yellow bar to their left, that continues as a line under that row. What does that mean?

2
0 156
Question Daniele Monti · Jan 16, 2025

Hello,

I am currently trying to edit server side code for TrakCare using Visual Studio Code with  intersystems-community.vscode-objectscript version 2.12.11-beta.1.

I can correctly check out the .mac file but when I try to either File > Save or use command 'ObjectScript: Import and Compile Current File' I get a very generic error .

I cannot find any details anywhere in the Output section.

I have reinstalled all extensions several times.

Any hints would be much appreciated.

Thanks! Daniele

3
0 137
InterSystems Official Daniel Palevski · Jan 14, 2025

InterSystems has corrected a defect that causes invalid database and journal records to be introduced when using a specific $LIST syntax. The likelihood of encountering this defect is very low but the operational impacts can be significant.

Products Affected

0
0 176
Question Steven Henry Suhendra · Dec 17, 2024

Hello my Friends,

I have a question, I have a data like this

And I want to create a display like this, which I can put a status column beside the Item Column

The status become new, if there's no previous item, and if there's a same item after the first one, the status become Old

Does anyone could help me ?

I need to display it without subquery if possible

Thank You

Best Regards,

Steven Henry

9
0 254
Question James Hipp · Jan 6, 2025

Hello,

I was just trying to get to the bottom of a TLS config - we have an interface with a TLS config that has had 'Server certificate verification' set to 'On', however the cert file specified either did not exist or contained a cert that was expired.

Does anyone know what the behavior is for this typically? I would expect this to not allow traffic on the interface, however this has been working fine for a few years now with an invalid cert specified for 'Server certificate verification' and set to 'On'.

0
0 120
Question Pietro Di Leo · Dec 5, 2024

I'm experiencing an issue while compiling code in Visual Studio Code with "cuk" qualifiers.

When I try to compile, the following message appears after a while:

In VSC, the "cuk" qualifiers are always used as default and the following message is shown in the Output panel of VSC when a compilation is successful:

I'm unsure if it is possible to replace the cuk qualifiers with something else.

The issue doesn't occur when compiling the same class in InterSystems Studio, where, in this case, the qualifiers "cuk /checkuptodate=expandedonly" are used as default:

8
0 245
Question Steven Henry Suhendra · Dec 2, 2024

Hello My Friends,

I have a question how to use order by %DLIST, this is my code:

SELECT

$ListToString(%DLIST(DISTINCT MRDIA_ICDCode_DR->MRCID_Code),', ' ) ICDX,

$ListToString(%DLIST(DISTINCT (MRDIA_ICDCode_DR->MRCID_Desc || ' (' || MRDIA_DiagnosisType_DR->DTYP_Code || ')')),', ' ) Diagnose

FROM SQLUser.PA_Adm

LEFT JOIN SQLUser.PA_AdmInsurance ON (PAADM_RowID = INS_ParRef AND INS_Rank = 1)

LEFT JOIN SQLUser.PA_AdmPackage ON (PAADM_RowID = PACK_ParRef)

LEFT JOIN SQLUser.MR_Adm on MRADM_ADM_DR = PAADM_RowID

LEFT JOIN SQLUser.MR_Diagnos ON MRADM_RowId = MRDIA_MRADM_ParRef

0
0 127