As to documentation for Caché v. 2015.1, ShutdownTimeout parameter ranges from 120 to a maximum of 100,000 seconds with the default of 300 seconds. In my case its value is 120 seconds, but in the worst cases I've managed to find in my log shutdown performed faster, approx. 40 seconds, e.g.:
05/18/16-18:51:45:817 (3728) 1 Operating System shutdown! Cache performing fast shutdown.
05/18/16-18:52:27:302 (3728) 1 Forced 11 user processes. They may not have completed.
05/18/16-18:52:27:302 (3728) 0 Fast shutdown complete
05/18/16-18:52:27:474 (3728) 0 CONTROL exited due to force
05/18/16-18:52:27:630 (3656) 0 JRNDMN exited due to force
05/18/16-18:52:27:614 (3560) 0 GARCOL exited due to force
05/18/16-18:52:27:802 (1064) 0 EXPDMN exited due to force
05/18/16-18:52:27:786 (3760) 0 No blocks pending in WIJ file
05/18/16-18:52:27:880 (3760) 0 WRTDMN exited due to force
while one can see word "force" in the log... It seems that OS shutdown is a special case of forcing Caché down, without waiting ShutdownTimeout seconds. I plan to adjust the registry value as suggested in this article and check what will happen on the next OS shutdown (when I decide to do it).
Mike, I fully agree with you that newbies should be aware of dotted syntax and some other old idioms that can be met in legacy code, but it seems that they also need some judgment from "oldies": which coding constructions are more or less acceptable and which should be avoided by any means (like usage of $ZOrder and $ZNext functions).
P.S. (offtop) Could we meet each other in Bratislava in 1992?
What is the reason to use $Zo when its standard reincarnation - $Query - exists more than 25 years (as to http://71.174.62.16/Demo/AnnoStd)? Poor newbies... their brains might explode of such amount of methods to do such simple thing.
We distribute a COS routine which runs after our application update is imported and does all the necessary job: checks if the TASKMGR's task already exists in schedule, and sets it up if not. Some tasks are the subject for manual setup as their settings may depend on local instance specific.
Bob, I suggested to deploy reporting async just because Kevin mentioned that his boxes have different roles: one is running production system, another is being used for development. How it can fit Kevins's needs depends on several factors, one of which: whether or not his code and data reside in separated databases.
you can deploy mirror comprises two members: #1 - primary and #2 - async (reporting/RW). Definetely it is not real DR solution, just a way to implement two potentially different systems working with two slightly different copies of the same database.
If your licenses for both platforms (different in InterSystems license model) allow running Mirroring, the question would be 'yes'. AFAIK, you need at least Entree Multi-Server.
In most cases Cache programs don't depend on bitness of underlined platform, so you can run all of them in 64bit. The only cases when bitness comes to play occur when you are interacting with external applications, e.g. communicating through SQL GateWay with external DSN with 32bit ODBC driver when 64bit version of the driver is not available.
I'd ask another question: Kevin, did you ever try to configure and run Mirroring on Windows 10? Was it working?
I tried it a couple of months ago (Cache 2015.1.4 on Windows 10) and completely failed: mirror members could not communicate. Having enough experience in Mirroring deployment on Red Hat EL and MS Windows Server, I was sure that it was a platform issue rather than my own. As it was not of great importance for me, I decided not to disturb WRC and dropped it.
Ricardo is right: DISABLE^%NOJRN (despite of its non intuitive name) disables the journaling for the current process. Documentation states this, besides it's easy to check:
Timur, thank you for the series of articles! It's clear enough that the purpose of your 1st sample was just to introduce map-reduce ideas, but besides you've illustrated concurrent processing technique available in Cache' which can be used apart of map-reducing. From this point of view, the parallel implementation of word count algorithm could be better balanced if the method MR.Sample.WordCount.AppWorkers::Map() would just count words emitting the result to infraPipe. In this case Reduce() methodbecomes trivial as all it needs to do - just summarize 4 (= number of book volumes) numbers from the infraPipe.
w "How robust is your great OS",!
w "(Each of which has cons and pros),",!
w "But specific under stress?",!
w "Want to check it? Just key press:",! r *key set OS=$system.Version.GetOS()
w:OS="Windows" "Are you really its follower? press <RESET> to do failover!",!
w:OS="UNIX" "Under *NIX you are OK: your job killed, others remain.",!
w:OS="VMS" "Not aware of VMS, contribute somebody else!"
;for i=1:1 set a(i)=$j("",3*1024*1024) w $j(i,4)
Fabian, yes, it would be interesting to hear more on your approach.
Recently I faced the similar problem: we were asked for a tool to estimate a size of each global from the top N biggest ones. Our solution is to calculate the global sizes on regular basis (using a Cache Manager's Task) and to transfer the results to external SNMP server (using our own customized MIB). Visualization is provided by SNMP server (we and our customer use Zabbix).
As to global size calculation speed, in our case it takes about 30 minutes for 1TB database. Only allocated space is estimated.
Not tested for speed, while I expect this version should be rather fast as it compares common parts of both references rather than individual suscripts. Enjoy!
tttcmp(fgname,tgname,bKill,nErrTotal,nErrTop) ; Compare [sub]array @fgname with [sub]array @tgname
;In:
; fgname - "original" [sub]array
; tgname - its copy to check with;
; bKill - kill @tgname if it matches to @fgname (default = 0)
; nErrTop - # of mismatches to find to stop comparison
;
;Out:
; returns 1 on full subscripts and data match, else - 0.
; ByRef nErrTotal - # of mismatches.
;
new x,y,xtop,ytop,i,flOK,flQ,xquit,yquit,nErr,xstart,ystart
set bKill=$get(bKill,0)
set nErrTop=$get(nErrTop,1)
set x=fgname,y=tgname write !,"Comparing original "_fgname_" with imported "_tgname_":"
set xstart=$length($name(@x,$qlength(x)))+$select($qlength(x):1,1:2)
set xtop=$select($qlength(x):$extract(x,1,$length(x)-1)_",",1:x)
set ystart=$length($name(@y,$qlength(y)))+$select($qlength(y):1,1:2)
set ytop=$select($qlength(y):$extract(y,1,$length(y)-1)_",",1:y)
set flOK=1,flQ=0,nErr=0,nErrTotal=0
for i=1:1 do quit:flQ
. set x=$query(@x),xquit=x=""!(x'[xtop)
. set y=$query(@y),yquit=y=""!(y'[ytop)
. if xquit,yquit write " OK. i=",i set flQ=1 quit
. if xquit!yquit write " NO!!!: i=",i,$select(xquit:" "_fgname_" is shorter than "_tgname,1:" "_tgname_" is shorter than "_fgname) set nErrTotal=nErrTotal+1,flOK=0,flQ=1 quit
. if $extract(x,xstart,$length(x))'=$extract(y,ystart,$length(y)) write !,"!!! Ref NEQ: i=",i write !," x=",x,!," y=",y set nErrTotal=nErrTotal+1,nErr=nErr+1,flOK=0 set:nErr'<nErrTop flQ=1 quit:flQ ;!,$e(x,xstart,$l(x)),!,$e(y,ystart,$l(y)),
. if $get(@x)'=$get(@y) write !,"!!! Data NEQ: i=",i write !," *** x = ",x,!," x => ",@x,!," *** y = ",y,!," @y => ",@y set nErrTotal=nErrTotal+1,nErr=nErr+1,flOK=0 set:nErr'<nErrTop flQ=1 quit:flQ
. else set nErr=0
if flOK,bKill write !,"Killing "_tgname_"..." kill @tgname
else write !,"Not Killing "_tgname
quit flOK
Murray, thank you for continuing the series.
A little question I have: does quicker journal response in ECP environment depend on whether Mirroring is used, or not?
go to post
As to documentation for Caché v. 2015.1, ShutdownTimeout parameter ranges from 120 to a maximum of 100,000 seconds with the default of 300 seconds. In my case its value is 120 seconds, but in the worst cases I've managed to find in my log shutdown performed faster, approx. 40 seconds, e.g.:
while one can see word "force" in the log... It seems that OS shutdown is a special case of forcing Caché down, without waiting ShutdownTimeout seconds. I plan to adjust the registry value as suggested in this article and check what will happen on the next OS shutdown (when I decide to do it).
go to post
Steve,
> if I were to see this I would then check that everything closed nicely
How to do this check? Every Caché startup after its fast shutdown is corresponded with the following message in console log:
while there are no logged signs of "normal" forcing down (system tables dump, etc). Maybe this rule has exceptions, but I've never seen them.
==
Thank you,
Alex
go to post
Mike,
I fully agree with you that newbies should be aware of dotted syntax and some other old idioms that can be met in legacy code, but it seems that they also need some judgment from "oldies": which coding constructions are more or less acceptable and which should be avoided by any means (like usage of $ZOrder and $ZNext functions).
P.S. (offtop) Could we meet each other in Bratislava in 1992?
go to post
Stephen, thank you for the info.
May I ask you to clarify a little: should the console log messages like this one
be considered as sympthoms of this issue?
go to post
What is the reason to use $Zo when its standard reincarnation - $Query - exists more than 25 years (as to http://71.174.62.16/Demo/AnnoStd)?
Poor newbies... their brains might explode of such amount of methods to do such simple thing.
go to post
We distribute a COS routine which runs after our application update is imported and does all the necessary job: checks if the TASKMGR's task already exists in schedule, and sets it up if not. Some tasks are the subject for manual setup as their settings may depend on local instance specific.
go to post
Bob, I suggested to deploy reporting async just because Kevin mentioned that his boxes have different roles: one is running production system, another is being used for development. How it can fit Kevins's needs depends on several factors, one of which: whether or not his code and data reside in separated databases.
go to post
Kevin, in addition to Bob's point:
you can deploy mirror comprises two members: #1 - primary and #2 - async (reporting/RW). Definetely it is not real DR solution, just a way to implement two potentially different systems working with two slightly different copies of the same database.
go to post
Kevin,
If your licenses for both platforms (different in InterSystems license model) allow running Mirroring, the question would be 'yes'. AFAIK, you need at least Entree Multi-Server.
In most cases Cache programs don't depend on bitness of underlined platform, so you can run all of them in 64bit. The only cases when bitness comes to play occur when you are interacting with external applications, e.g. communicating through SQL GateWay with external DSN with 32bit ODBC driver when 64bit version of the driver is not available.
I'd ask another question: Kevin, did you ever try to configure and run Mirroring on Windows 10? Was it working?
I tried it a couple of months ago (Cache 2015.1.4 on Windows 10) and completely failed: mirror members could not communicate. Having enough experience in Mirroring deployment on Red Hat EL and MS Windows Server, I was sure that it was a platform issue rather than my own. As it was not of great importance for me, I decided not to disturb WRC and dropped it.
go to post
Dmitry,
Ricardo is right: DISABLE^%NOJRN (despite of its non intuitive name) disables the journaling for the current process. Documentation states this, besides it's easy to check:
USER>d DISABLE^%NOJRN w $$CURRENT^%NOJRN 0 USER>d ENABLE^%NOJRN w $$CURRENT^%NOJRN 1 USER>w $$DisableJournal^%SYS.NOJRN," ",$$CURRENT^%NOJRN 1 0 USER>d EnableJournal^%SYS.NOJRN w $$CURRENT^%NOJRN 1
go to post
Timur, thank you for the series of articles!
It's clear enough that the purpose of your 1st sample was just to introduce map-reduce ideas, but besides you've illustrated concurrent processing technique available in Cache' which can be used apart of map-reducing. From this point of view, the parallel implementation of word count algorithm could be better balanced if the method MR.Sample.WordCount.AppWorkers::Map() would just count words emitting the result to infraPipe. In this case Reduce() method becomes trivial as all it needs to do - just summarize 4 (= number of book volumes) numbers from the infraPipe.
go to post
go to post
#CachéLimerick
There was an old man in the vale
Whose DB was as fast as a snail.
After move to Caché
He could jump entrechat
And today he is far from his vale...
go to post
Exit Caché, Ensemble, DeepSee:
It's summer -
Jump into deep sea!
go to post
Mix SQL with pure MUMPS
To feel mismatching
Impedance.
go to post
Fabian, yes, it would be interesting to hear more on your approach.
Recently I faced the similar problem: we were asked for a tool to estimate a size of each global from the top N biggest ones. Our solution is to calculate the global sizes on regular basis (using a Cache Manager's Task) and to transfer the results to external SNMP server (using our own customized MIB). Visualization is provided by SNMP server (we and our customer use Zabbix).
As to global size calculation speed, in our case it takes about 30 minutes for 1TB database. Only allocated space is estimated.
go to post
Not tested for speed, while I expect this version should be rather fast as it compares common parts of both references rather than individual suscripts. Enjoy!
go to post
Murray, thank you for continuing the series. A little question I have: does quicker journal response in ECP environment depend on whether Mirroring is used, or not?
go to post
Dmitry, thanks for sharing this info. Fix a typo: here
/usr/share/bash-completion/completions/ccontrol
it should be: /usr/share/bash-completion/completions/csession
go to post
Hello Mike,
Add to your list several books written in Russian and in German:
=
Kind regards,
Alex