David Loveluck · Oct 14, 2024 go to post

Emmanuel
That is a big question and it depends on what you are doing.
If you are writing SQL queries, then look at the SQL performance statistics in INFORMATION_SCHEMA.STATEMENT_DAILY_STATS. 
If you are using an interoperability production, look at the activity and volume statistics.
For general database activity, you could use ^SystemPerformance as described, but with that you have to process the data with an extra tool and it is difficult to interpret. I suggest you enable the History Monitor. It will give you almost everything ^SystemPerformance gives you, with a fraction of the effort. You just look at the DB and CPU stats with SQL.

David Loveluck · Sep 7, 2023 go to post

That works perfectly with the caveat that a restart was needed for the messages to appear.

Thanks.  

David Loveluck · Nov 9, 2022 go to post

this applies to Ens.MessageHeader as well. The code is mapped to EnsLib which is normally mounted read only.
I think Tunetable is trying to update the class definition.
I can't remember if it has always behaved like this
 

David Loveluck · Mar 8, 2022 go to post

the problem with stats and studio deployed classes goes away  in a more recent release (2020 perhaps).

David Loveluck · Mar 8, 2022 go to post

Lorenzo
Two guesses - 
First, check that the task 'Update SQL query statistics' is running and that you have waited long enough for the task to run.
Second, are you looking at a query that is embedded SQL in a 'deployed' class (meaning there is no source code)? There is a problem with statistics for deployed classes, but I don't remember if it matches your situation exactly.

David Loveluck · Apr 25, 2019 go to post

The page in the management portal is limited and was never intended to meet the needs of everyone.

The intention was to make the information readily accessible from SQL, so people could use their favorite reporting tool or dashboard product. 

Wrapping SQL in a restful service would be straightforward and there is an example of a REST service that calls a query and generates the JSON for Grafana here 

Dave

David Loveluck · May 9, 2018 go to post

When i wrote this, i was quoting an already old test report. While it may or may not have been correct at the time, it is certainly not relevant or useful today with modern hardware.

The proper story today is that there is a fixed CPU overhead per byte encrypted or decrypted.  

The fractional overhead of a single core  would be approximately the data read or write rate in bytes per second divided by the CPU clock speed in hertz.

So on my current 2.8 GHz laptop reading 100 MBs would take roughly 3.6% of one core. Different chips and data rates would give different results. 

David Loveluck · Apr 24, 2018 go to post

your code snippet includes

        set SIUString = source.ImportFromString(source.SchedulingData,.tSC)

David Loveluck · Apr 24, 2018 go to post

you would need to give a lot more detail about  CustomEDI.SQLSIUInRequest and its ImportFromString method for anyone to tell you what is going wrong. What data type does the ImportFromString return, and have you tested it in isolation?

I think the 'normal' way to do this, would be to leave the HL7 message as an object. You could use a business process that extracts only the fields that are needed to retrieve the patient ID and send that to the SQL database. But i suspect you already have external logic that processes a whole serialized HL7 message.

David Loveluck · Apr 10, 2018 go to post

One option to consider is to have separate business operations, but have StayConnected=false. If the receiving service could support reconnecting each time, this would be a simple solution.

David Loveluck · Jan 18, 2018 go to post

based on feedback, i have updated the document to warn against activating other monitor classes without checking first. Some will affect the performance of your system, but the ones I describe in the article are safe.

"There are a number of of other classes but don't be tempted to activate them without testing first. Some use PERFMON and are not suitable for running on a live system."

Dave

David Loveluck · Jan 3, 2018 go to post

The meaning is documented 

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…

including information about when the alerts are sent and how often the sensors are sampled.

Changing he values is documented:

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…

you have to navigate the options in 

do ^%SYSMONMGR

to edit the sensors. You have to then provide CPUusage (case sensitive) as the sensor you want to edit.

David Loveluck · Dec 29, 2017 go to post

How many requests are you hoping to process? 10 per second? 100 per second? 1,000 per second? More?

The full answer to this question depends on how far you are trying to push the system.

David Loveluck · Dec 18, 2017 go to post

I see the images so i don't know what the problem is. I will investigate and fix as soon as i can

David Loveluck · Dec 6, 2017 go to post

If you have a general query this is a great place to ask.

But if you have an operational problem you should pick up the phone (or your preferred technology)  and call InterSystems support. The people there enjoy answering questions and getting systems back in action.

617-621-0700 in the US but if you google InterSystems Support i think you will get what you need worldwide.

David Loveluck · Nov 29, 2017 go to post

John

the only place i can think of it being used in the pull down menu for selecting a target in a send. It only offers you configuration items that exist in the production you choose. If you haven't specified a production it lists everything it can find and gives you a big red warning.

There is nothing to stop you typing in a target that isn't on the list

dave

David Loveluck · Nov 21, 2017 go to post

Before answering the specific questions, i will explain what business rules are for. (Routing rules are another story). Rules were invented to allow people who were not programmers to change code dynamically on a running system. That put a lot of constraints around them. It is the responsibility of the developer of the BP that invokes a rule to make sure the analyst who dynamically changes the rules can't do any damage, no matter how stupid or how malevolent they are.

If you are a programmer and your code is going through normal dev/test/promote cycles then you should probably just write a method of a utility class to do the work.  You can't do anything in a rule that isn't easier to do in code if you are a programmer. I will repeat that routing rules are another story.

to answer your points

1. You would have to post your code for a real answer but a few guesses.

  a) you can put values into context properties with an assign  elements

  b) the value that you <return> goes in the Result Location specified in the rule activity of the BP. 

  c) make sure you <return> when you have finished and don't continue through following <when> elements.

2. yes. you just use mulitple <assign> elments

3. a) lookup tables are designed for the case where you want to translate a lot of values. For example if you have thousands of product codes and their descriptions, that might be fixed of maintained on a regular basis, then lookup tables are the way to go.

3 b) Data transformations are for when you have two structures that are similar but not quite the same. For example an invoice might be represented slightly differently in two applications  but they are close and you want to move fields around between the two formats. A second example would be to change the values in a data structure, perhaps by using lookup tables to translate from the codes used by the sending application to the codes used by the receiving application.

David Loveluck · Nov 20, 2017 go to post

It is hard to say, but i think the error is 'Invalid Name' and the reference to locks is just in the text of the long line of code where the error occurs. 

the name it says is invalid appears in the text but it doesn't look like valid COS to me so i can't see how it would compile. i would look at the cached query %sqlcq.DHCdAPP.892.INT and see what code it contains.

David Loveluck · Nov 14, 2017 go to post

In the video i inadvertently said that the CSP Page statistics were not accessible through SQL. That is not correct. They are accessible through SQL by querying the table %CSP_Util.Performance.

My apologies for the mistake.

David Loveluck · Sep 29, 2017 go to post

go to system configuration -> memory and start up and there is pull down menu at the bottom of the page to set the system mode.

It isn't as large as some people would like, but it shows red or green for live and dev.

David Loveluck · Aug 31, 2017 go to post

if you find the local documentation hard to search for this kind of simple question don't forget the documentation is on line and google accessible. Entering 

site:docs.intersystems.com version

into google so you only search the intersystems documentation gives you a good set of hits.

David Loveluck · Aug 15, 2017 go to post

For the second question - if you are on a test/development system and you are happy to remove all information about the status and queued messages you can use:

do ##class(Ens.Director).CleanProduction()

but it will destroy information so it must never be used on a real system.

David Loveluck · Aug 15, 2017 go to post

I think the class name and the production name need to match so in Studio you use Tools->CopyClass to get a class with the meaningful name. And then edit the Production Name in the XData.

Class MyPackage.MyMeaningfulName Extends Ens.Production
{

XData ProductionDefinition
{
<Production Name="MyPackage.MyMeaningfulName" LogGeneralTraceEvents="false">
  <Description></Description>
David Loveluck · Apr 28, 2017 go to post

Interestingly, %Net.MailMessage does extend %SerialObject. So you might be able to avoid pulling the email apart and reconstructing it. You could try just creating a persistent message (extending Ens.Request an option but not necessary) with a property of type %Net.MailMessage.