Rebook

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of LJ LongWing
Sent: Thursday, February 23, 2012 4:58 PM
To: [email protected]
Subject: Re: Not Matching Lengths (server hang)

Nike

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of Mueller, Doug
Sent: Thursday, February 23, 2012 3:50 PM
To: [email protected]
Subject: Re: Not Matching Lengths (server hang)

LJ,

Correct.

We don't pay attention to the current DB size, just the current AR size.

So, if you make it longer than the current AR size, we will issue a restructure 
command to the DB.

Doug

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of LJ LongWing
Sent: Thursday, February 23, 2012 2:33 PM
To: [email protected]
Subject: Re: Not Matching Lengths (server hang)

So to restructure, I don't need to make my 'new' size larger than the current 
DB size, just larger than the current ar size?

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of Mueller, Doug
Sent: Thursday, February 23, 2012 2:52 PM
To: [email protected]
Subject: Re: Not Matching Lengths (server hang)

LJ,

Not sure what was causing the problem in your situation.  Obviously the answer 
is that it could have been any number of things....  I just don't know what.
As
it was a crash, it is obviously something that the system didn't handle well.

Definitely submit a bug on the issue -- indicating that the field lengths were 
different for the crash situation -- and we can see if we can isolate what the 
problem was.


Now as for correcting.  If you ever make the length LONGER, we will restructure 
the column.

So, instead of deleting and recreating (where data would be lost), you could 
have done the following:

Change the length to 1 LESS than you desire the length to be.  This will not 
cause the DB to restructure.
Change the length to exactly what you desire it to be (so increase by 1).
This
WILL cause the DB to restructure and recreate the field with the length you 
want it to be regardless of what the current DB column length is.


So, a solution for how to make them match if you want.  But, no explanation for 
the column width problem.  As the server didn't crash, a question is whether 
there was an issue in the DB or in the AR System itself.  Either way is bad, 
but the only way to know is to debug it and find out where the delay was and 
then what caused it.


Anyway, I hope the idea of how to change the length to force a DB restructure 
was useful.

Doug Mueller

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of LJ LongWing
Sent: Thursday, February 23, 2012 12:45 PM
To: [email protected]
Subject: Re: Not Matching Lengths (server hang)

Doug....that does make sense...thank you for the in depth analysis....let me 
ask you this question.

I was going through my system doing performance tuning.  I found a situation 
where a Web Service was creating records on output of the call...

I make a call to WS and it returns a result to form 'ChildForm'.  The WS 
definition defines a Distinguished Key and Foreign Key.  I found that for each 
record that comes back in the output, it does a lookup using that field 
combination to determine if it needs to create a new child record, or update 
the previous record.  In some circumstances I found that when the WS output had 
500 records, and each query was taking about .2 seconds...it was taking about 
100 seconds to create all of the child records because of this query....so I 
decided to create a compound index on those two fields and significantly 
increased my performance in these situations.

So, while creating these indexes, I got an error on one situation stating that 
my index was > 255 characters and may cause a problem on some DB's.  I then 
analyzed the data in the columns that I was indexing, and shrunk the size of 
the field to match the actual size of the data (instead of the default 255 
characters of a char field), and re-created the indexes without receiving the 
warning.

So...a few days later I started experiencing server crashes and after several 
days of troubleshooting, having SQL Logging on at the time of the crash, the 
last SQL that happened against the DB was query issued by the Java WS Plugin 
trying to determine if it needed to create a new record or update an existing 
one...the query was issued, the DB returned an 'OK'...and that's the last thing 
in the log.

The server was still in memory....but all CPU and IO drop to 0, and you cannot 
connect to the server in any way.  Only way to restore the service was to 
restart it.

After discovering the discrepancy between AR length and DB length, I started 
seeing what I could do to get Remedy to re-synchronize the length....being 
unable to get it to do it, the final action was to delete and re-create the 
field.  When it was re-created, I handed the system back over to the other 
developers and haven't had a single crash since.

So...you say that it's not an issue, and I truly trust your statement on that 
mark....but I must then beg the question 'what was causing my crash'?

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of Mueller, Doug
Sent: Thursday, February 23, 2012 12:46 PM
To: [email protected]
Subject: Re: Not Matching Lengths

Everyone,

Just a couple of comments on this thread (including lots of comments that have 
come in over the past few hours).

First, it is not a surprise to us that there are differences in lengths in the 
DB and in the Remedy length under some conditions.  This is actually a designed 
behavior of the system (which I will explain).  There are other conditions 
under where a difference is benign -- but not expected.  Finally, there may be 
conditions where a difference is NOT benign and is definitely not expected.

First, the majority of cases, the field length in the DB will match the field 
length in the AR System definition.

Now, in the case of mismatches....

For those cases where the DB length is GREATER than the length in the AR System 
definition, this is a situation that is expected and as designed.  It occurs 
when you have a character field that has a maximum length such that a varchar 
or nvarchar or equivalent type in the database you are using is created 
(generally 4000 to 8000 bytes in the currently supported databases) and you 
make a change to the AR System definition to make it SHORTER.  In this case, we 
shorten the length definition at the AR System level but do not restructure the 
database.  Several reasons for this.  One, the database stores varchar and 
nvarchar (and the like) types using only the space you need.  So, it does not 
take the full length definition.  This means that the same amount of space is 
used in the database for both lengths -- it is about the data content.  Two, it 
saves a DB restructure operation from being performed to restructure the column 
to match the new length.  So, the end result is a more efficient operation with 
no downside from the perspective of data storage.  It also has a side effect of 
not truncating data for cases where customers have changed the length, realized 
that it is not correct, and then made it bigger again.

NOTE: If you make the length LONGER -- even by 1 byte -- from what the AR 
System thinks it currently is (regardless of what the DB length actually is as 
that length may be longer from a previous shortening of the length), we DO 
cause a DB restructure and will change the length of the DB column to match the 
AR System definition.

So, for systems that have been around a while and have lots of different 
upgrades and customizations that have been performed, you may end up with quite 
a few cases where the AR System length is shorter than the DB length.  All 
interaction with the system and create/modify/merge operations will enforce the 
AR System length for all new records.


The second scenario is join forms.  We do have field limit definitions for join 
fields, but many of the characteristics are from the underlying field.  This 
includes the field type and length and other things.  But, in the metadata 
tables, we copy the definition of the underlying fields into the join 
definition when we create the join.

I suspect you are seeing the field length difference on join fields as an issue 
where the underlying field has changed length after the join was created.
That
value is NOT used in the metadata for the join field -- yes, it is there, but 
it is not used.  The actual value is the value on the underlying field 
definition not on the field at the join level.

Now, this is the benign difference.  It is different but it doesn't matter as 
the value has no meaning in the join.  Sure, the system should be propogating 
that change as a "documentation" change in the metadata, but as the metadata 
are internal tables for internal to the system use, it probably was not thought 
to be worth the time and energy to propagate a piece of information that didn't 
matter.  It does not cause any runtime or definition time issue.  It will be 
visible only to someone trying to deep dive and interpret the metadata tables 
directly.

Finally, we come to the situation where if you have it is definitely NOT 
expected and can cause odd errors in the system (although it should not cause 
crashes or hangs but it can definitely cause odd SQL errors).

If you have a situation where the AR System length is LONGER than the DB length 
for a field of type char/varchar/nvarchar and the field is a regular field and 
not a join or a view form, this is not as expected.  This would be an 
inconsistency that we cannot account for and where there could be issues 
generating odd SQL errors during runtime.  Again, I would expect that to be the 
worst result, not a crash or hang but just odd errors when something is longer 
than the DB length but not than the AR length (and some DBs would just quietly 
truncate the value to the DB length).


I hope this helps to clarify what you should see in the metadata tables if you 
do start playing around with our internal definitions.  One situation that is 
fully as expected (shorter AR System length that DB length).  One situation 
where the value doesn't really matter and is not really used (AR System length 
different than underlying table length when the field is on a join form -- look 
at the length of the actual field that the join field points to as that is the 
real length).  And, unclear whether any example shows this case, One situation 
that is an issue if it occurs where the DB length is SHORTER than the AR System 
length.

Hopefully, this explanation helps clarify what you are seeing and offers an 
explanation about why it is all OK -- unless that is you are seeing the third 
situation and then we should take a look at how that could have happened on 
your system (and a quick workaround to simply increase the length of the field 
by
1
byte which forces the AR System to change the length to that new length and 
then to reduce the length by 1 byte to get back your original restriction (and 
the DB length will be 1 more than your AR System definition).

Doug Mueller

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of LJ LongWing
Sent: Thursday, February 23, 2012 9:20 AM
To: [email protected]
Subject: Not Matching Lengths

List,
Our Dev server started crashing a few days ago and we had a VERY hard time 
trying to identify the cause.  After several days of trial and error, one of 
the developers on the team noticed that a field length in the DB was not the 
same as a field length in Remedy.  After further troubleshooting it was found 
that the server stopped responding after doing a query/insert into that table 
using that field ID....the only 'fix' I could find to get them back in sync was 
to delete the field and re-create it.  We haven't had the server crash since I 
did that....so it got me thinking that there might be other fields with similar 
problems, so I started looking...I was shocked by what I found and want to run 
it by some other people on the list to see if they come across similar results. 
 The Query I have provided below is running just fine on SQL Server 2008 R2...I 
don't know the equivalent for Oracle...but I would like to know if other people 
find a large amount of columns where the two values don't match.  With the 
below Query I came up with 382 mismatches, many of which are on system 
generated forms, but a majority of which are on my custom forms.  This is an 
OLD system...it's been around since at least 6.0...and upgraded and modified in 
almost every major revision since its inception.  We are currently on 7.6.4 
SP1....and I can confirm with a form that I created yesterday...I created a 255 
character field...then shrunk it to 30, and it is on my list of 
mismatches....curious about your results...please reply back :)

select a.name, f.fieldName, fc.maxLength as 'RemedyMaxLength', 
c.CHARACTER_MAXIMUM_LENGTH as 'DBMaxLength'
from arschema a
        inner join field f on f.schemaId = a.schemaId
        inner join field_char fc on a.schemaId = fc.schemaId and f.fieldId = 
fc.fieldId
        inner join INFORMATION_SCHEMA.COLUMNS c on c.TABLE_NAME = 
'T'+CAST(a.schemaId AS char) AND 'C'+CAST(fc.fieldId as char) = c.column_name 
where fc.maxLength != c.CHARACTER_MAXIMUM_LENGTH AND c.CHARACTER_MAXIMUM_LENGTH 
!= 2147483647 and f.fieldId != 1

Name    Field Name      RemedyMaxLength DBMaxLength
AR System Currency Label Catalog        Short Description       4       254
AR System Currency Ratios       Short Description       4       254
Alert Events    UNUSED  5       254
Server Events   Unused_Descr    3       254
Server Statistics       Short Description       3       254
User    Password        30      255
User    Computed Grp List       255     4000
AR System Administrator Preference      Short Description       128     254
AR System User Central File     Short Description       128     254
AR System User Preference       Short Description       128     254
ReportSelection OriginalFormServer      128     254
ReportType      Short Description       128     254
FB:Alarm Events Monitor ID      15      254
FB:History      Short Description       128     254

____________________________________________________________________________
___
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug12 
www.wwrug12.com ARSList: "Where the Answers Are"

____________________________________________________________________________
___
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug12 
www.wwrug12.com ARSList: "Where the Answers Are"

____________________________________________________________________________
___
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug12 
www.wwrug12.com ARSList: "Where the Answers Are"

____________________________________________________________________________
___
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug12 
www.wwrug12.com ARSList: "Where the Answers Are"

____________________________________________________________________________
___
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug12 
www.wwrug12.com ARSList: "Where the Answers Are"

____________________________________________________________________________
___
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug12 
www.wwrug12.com ARSList: "Where the Answers Are"

_______________________________________________________________________________
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug12 
www.wwrug12.com ARSList: "Where the Answers Are"

_______________________________________________________________________________
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org
attend wwrug12 www.wwrug12.com ARSList: "Where the Answers Are"

Reply via email to