These warnings suggest a performance problem with the CPU and disk bottlenecks. 

If you are running very intensive processes, you should see these warnings go away after they finish. However, if you keep seeing them continuously, I recommend going deeper and analyzing the performance. 

Analyzing the performance takes time, and it's not always easy for non-experts. There is a great series of articles written in this community that can help with this:

If you don't want to go through all these series and can easily increase the system resources, it would be an easy way to probe and solve the problem ;-). What I mean by increasing system resources is by adding more CPUs and faster disks. Nowadays, with Virtual machines and cloud systems, this is quite simple. 

And let me insist again, if this is a production system, you may want to open a WRC problem for extra help. Having the disk too stressed will end in User/Application pauses. 

This is not a nice error to see in a production environment. If this is a production site, I recommend contacting the Support department. 

To find the problem, you can look at the messages.log. There should be an error written with more details.

Most of the time, these errors are related to disk permissions or disk stress. Tools like ^SystemCheck and/or ^SystemPerformance will gather the required information to diagnose the problem. If you contact Support, they will probably ask for this. 

As it is not a class method you need either to create/open an object for the class or rewrite the method as ClassMethod (instead of Method). But as the SetSensor call is also pointing to the same object (See do ..SetSensor), the simplest would be to create/open the object:

set obj=##class(Package.YourClass).%New()
do obj.ResponseTimeCurrentMonth("USER")

You may also need to add some Writes to the terminal to see something. For example:

write  !,"Date:",InDate
write  !, "time taken:",timeTaken


Hi Andy, 

If you have problems with production servers, I advise contacting Support directly. (Looking at the question's date, you may have contacted us already).

The issue you show here is not common and can be related to file permissions (reinstalling may help) or a product bug. To diagnose the problem, Support may need to ask you for more details, logs, etc. 

I am a little surprised you asked this :-P ..... and the answer, as you can imagine, is using the magical $Z functions! 

In this case, searching a little you can find: 

$ZISWIDE (ObjectScript)

Checks whether a string contains any 16-bit wide characters. 


I think playing with other functions could give you what we are looking for here.

Therefore, now that we have a utility that can check if something is Unicode or not, the rest would be to do a routine to read all the globals and check for the content with this function. I have seen routines getting all the globals and looping before but don't have it handy.

This programmatic way of looping and checking all the globals gives you more control and allows you to find where there is something not expected. But, as it takes some time to write if the original question is something you just want to do once, a backup + restore seems quicker and simpler.

There isn't any flag telling whether a database is Unicode or not inside the database file. If a Unicode database has no UNICODE characters, it will be accessible by an 8-bit version without problems. 

If you want to know if a database has wide characters (Unicode chars), you could try to read all the globals inside an 8-bits instance and wait for a <WIDE CHAR> error. In order to read all the globals, there are several alternatives, like building a small routine, doing a backup and/or restore, exporting/importing globals, etc. Of course, there are more elegant ways to check the globals and data than expecting an error.