1. SMP > System Operation > Databases shows the size o your DB   8192 is the default you have to match te blocksize of your backup source
  2. /usr/lib/iris/mgr/ is IRISSYS or the HS equivalent a direct restore may destroy your running installation. restore it in a parallel DB and import only uncritical parts.
  3. in SMP > System Adnin > Config > Sys Config > Local DB  you can set the Blocksize of the DB before creation: Blocksize might be hardwired in Community Distribution 

Hi @Lorenzo Scalese 
I guess you are looking for class(%Utility).FormatString()

USER>set lb=$lb(1,"Lorenzo",2023,"RCC"_$c(13,10))
USER>write lb
USER>zzdump lb
0000: 03 04 01 09 01 4C 6F 72 65 6E 7A 6F 04 04 E7 07         .....Lorenzo..ç.
0010: 07 01 52 43 43 0D 0A                                    ..RCC..
;;;;;  this is it
USER>set viewlb=##class(%Utility).FormatString(lb)
USER>write viewlb
USER>zwrite viewlb

Your transformation produces  a YYYY-MM-DD HH:mm:SS string
in contradiction 
Property DOB As %Date;   expects an Integer similar to +$h 
The error is reported during Validation before %Save() of  your record

  • either you change  Property DOB As %String;
  • or use '$zdateh(source.DOB,7,,,,,,,,"")'   then ##class(%Date).IsValid(...)  is happy

Now it is obvious that ^realglobal has 11.3 times the size of ^testglobal
while your ^testglobal seems to have all blocks in buffers in memory
this is rather unlikely for ^realglobal.
So repeated reloading of blocks from disk seems to cause the delay
If you have the chance to double or triple your global buffers
you most likely may see improved processing of your $O()

Hi @Vivian Lee !
I think you had no chance to see the problem in docs
You mentioned 
a custom class that extends %Text.English
this might be the cause of your problem.
The class is not visible in normal class reference (don't ask me why) 

Default %Text.English has a Parameter  NOISEWORDS100 =
"the of and a to in is you that it he for was on are as with his they at be this from I have or by one had not but what all were when we there can an your which their said if do will each about how up out them then she many some so these would other into has more her two like him see time could no make than first been its who now my made over did down only way find use may long little very after called just where most know get through back";

So you might be affected by these NOISEWORDS.
I failed to find any useful public documentation on this parameter and also %Text.Text is not too useful

#1 is correct

Your calculation #2 is seriously wrong.
reading documentation you see
dformat -2 

$ZDATETIME returns an integer specifying the count of seconds from a platform-specific origin date/time. This is the value returned by the time() library function, as defined in the ISO C Programming Language Standard. For example, on POSIX-compliant systems this value is the count of seconds from January 1, 1970 00:00:00 UTC

And that's the mistake:
Your BirthDate is obviously considered as  LOCAL time
And therefore the difference you see reflects the time offset of your machine to UTC

-19800 sec => -5.5 hrs
system variable $ZTZ will show your offset to UTC in minutes  => -330
my guess: your machine is running at local time in India


for $ZTDH:
for $ZDT:

USER>r x
1997-08-09 10:38:39.700000000
USER>w $ZDTH(x,3,,9)
USER>w $zdt($ZDTH(x,3,,9),3,7)
USER>w $zdt($ZDTH(x,3,,9),3,7,9)