320adel
asked on
Lotus Domino Slow Access to View - HDD shows peak access
Hi All,
I have a custom Lotus Domino Application. Changing to particular views is REALLLLY slow. As in 1min 4 seconds. The views that take a long time have children documents. If I select all the documents in that view there is ~16,000 docs ( inc. children )
I thought Lotus Notes opened just enough documents for the viewing pane, and collected more from the server as you paged down? So I thought this wouldn't be a problem. If I remove the children docs from the view it performs well.
If I put the database local on my workstation accessing ( with the children documents ) it takes 7 seconds; That's what I want but from the server - but currently I'm at 1min 4 secs!
OK then: Why is it so slow?
a. Network
Came in at 10pm when there is next to no activity on our network. Same problem -- virtually the same access speed for the database.... Viewing the network activity graph in Windows 2003 Small Business Server confirms this low level of activity --- no bottle neck. Viewing the performance of each network CARD also shows relatively little activity.
b. Processor
Processor graph shows very little.. 20% / 30% usage. It's a pretty good HP server 6 cpu's or something like that.
c. HDD
Bingo.... HDD activity is shown peaking for 5 seconds at a time when accessing the view(s) in question. ( ie. 100% usage ). The actual label on the graph for HDD activity is 'Disk Queue Length'' It get's absolutely hammered!
My workstation doesn't have this problem though?? The server is raid 5 - as a trial I put an IDE drive in the HP server ( as my workstation was in that config ) and run Lotus Domino off it's own HDD... Still the same problem ( actually a few seconds slower - still a max-out on the HDD access on the performance graph ).
What am I missing :)
Many thanks for your assistance,
Adel
I have a custom Lotus Domino Application. Changing to particular views is REALLLLY slow. As in 1min 4 seconds. The views that take a long time have children documents. If I select all the documents in that view there is ~16,000 docs ( inc. children )
I thought Lotus Notes opened just enough documents for the viewing pane, and collected more from the server as you paged down? So I thought this wouldn't be a problem. If I remove the children docs from the view it performs well.
If I put the database local on my workstation accessing ( with the children documents ) it takes 7 seconds; That's what I want but from the server - but currently I'm at 1min 4 secs!
OK then: Why is it so slow?
a. Network
Came in at 10pm when there is next to no activity on our network. Same problem -- virtually the same access speed for the database.... Viewing the network activity graph in Windows 2003 Small Business Server confirms this low level of activity --- no bottle neck. Viewing the performance of each network CARD also shows relatively little activity.
b. Processor
Processor graph shows very little.. 20% / 30% usage. It's a pretty good HP server 6 cpu's or something like that.
c. HDD
Bingo.... HDD activity is shown peaking for 5 seconds at a time when accessing the view(s) in question. ( ie. 100% usage ). The actual label on the graph for HDD activity is 'Disk Queue Length'' It get's absolutely hammered!
My workstation doesn't have this problem though?? The server is raid 5 - as a trial I put an IDE drive in the HP server ( as my workstation was in that config ) and run Lotus Domino off it's own HDD... Still the same problem ( actually a few seconds slower - still a max-out on the HDD access on the performance graph ).
What am I missing :)
Many thanks for your assistance,
Adel
Could be the indexer. Does the view contain any system date/time related evaluations (selection/query)?
ASKER
View 1 in Question:
SELECT ((Form = "Contact" & Relationship = "Client") | @AllChildren) & DeleteFlag = ""
View 2:
SELECT ((Form = "Contact" & Relationship = "Prospect" & ProspectCheck != "Yes" & VisualCheck != "Yes" & IsDocBeingImported & IHCStatus = "Awaiting IHC") | @IsResponseDoc) & DeleteFlag = ""
SELECT ((Form = "Contact" & Relationship = "Client") | @AllChildren) & DeleteFlag = ""
View 2:
SELECT ((Form = "Contact" & Relationship = "Prospect" & ProspectCheck != "Yes" & VisualCheck != "Yes" & IsDocBeingImported & IHCStatus = "Awaiting IHC") | @IsResponseDoc) & DeleteFlag = ""
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Example of View 2:
****************** Column 1 *******************
@If(
Form = "Contact";
@If(
DealStatus = "Not Lodged";
@If(
!@IsTime(DateLodgementExpe cted);
(@Today - SaleDate) / 86400;
(@Today - DateLodgementExpected) / 86400
);
DealStatus = "Lodged";
(@Today - DateConditionalExpected) / 86400;
DealStatus = "Conditional";
(@Today - DateUnConditionalExpected) / 86400;
DealStatus = "Unconditional";
(@Today - DateUnconditionalDocsExpec ted) / 86400;
DealStatus = "Unconditional Docs Received";
(@Today - DateSettlementExpected) / 86400;
DealStatus = "Settled";
(DateSettled - DateSettlementExpected) / 86400;
DealStatus = "CRASHED";
(DateCrashed - SaleDate) / 86400;
""
)
;
""
)
****************** Column 2 *******************
t_Purple:=102:102:153;
t_White:=255:255:255;
t_Black:=1:1:1;
@If(
Form="Contact";t_White:t_B lack;
Form="Loan";214:216:226:t_ Black;
Form="Task"&TaskStatus="In Progress";255:129:0:t_Blac k;
Form="Task"&TaskStatus="Co mpleted";2 52:191:118 :t_Black;
239:239:239:t_Black)
****************** Column 3 *******************
@If(
Form = "Contact";
IHCDate;
""
)
****************** Column 4 *******************
LoanDaysCol
****************** Column 5 *******************
t_White:=255:255:255;
t_Red:=255:0:0;
@If(Form="Contact" & LoanDaysCol >= -3; t_White:t_Red; RowColorCol)
****************** Column 6 *******************
RowColorCol
****************** Column 7 *******************
t_LoanDays :=
@If(
Form = "Loan";
@If(
LoanStatus = "Not Lodged";
(@Today - DateLodgementExpected) / 86400;
LoanStatus = "Lodged";
(@Today - DateConditionalExpected) / 86400;
LoanStatus = "Conditional";
(@Today - DateUnConditionalExpected) / 86400;
LoanStatus = "Unconditional";
(@Today - DateUnconditionalDocsExpec ted) / 86400;
LoanStatus = "Unconditional Docs Received";
(@Today - DateSettlementExpected) / 86400;
LoanStatus = "Settled";
(DateSettled - DateSettlementExpected) / 86400;
LoanStatus = "CRASHED";
(DateCrashed - SaleDate) / 86400;
""
)
;
""
);
@If(
Form = "Loan";
LoanDisplay +
@If(
@IsNumber(t_LoanDays);
" [" +
@If(
t_LoanDays > 0;
"+";
""
)
+ @Text(t_LoanDays) + " DAYS]";
""
);
Form="Task";
TaskDisplay;
Form="Event";
EventDisplay;
Form="TravelBookingEmail": "ClientBoo kingEmail" :"SMS";
BookingDisplay;
""
)
****************** Column 8 *******************
ContactName+RelatedContact DocID
****************** Column 9 thru 14 *******************
Standard Plain Text Fields ( surnames / etc )
Thanks CRAK!
****************** Column 1 *******************
@If(
Form = "Contact";
@If(
DealStatus = "Not Lodged";
@If(
!@IsTime(DateLodgementExpe
(@Today - SaleDate) / 86400;
(@Today - DateLodgementExpected) / 86400
);
DealStatus = "Lodged";
(@Today - DateConditionalExpected) / 86400;
DealStatus = "Conditional";
(@Today - DateUnConditionalExpected)
DealStatus = "Unconditional";
(@Today - DateUnconditionalDocsExpec
DealStatus = "Unconditional Docs Received";
(@Today - DateSettlementExpected) / 86400;
DealStatus = "Settled";
(DateSettled - DateSettlementExpected) / 86400;
DealStatus = "CRASHED";
(DateCrashed - SaleDate) / 86400;
""
)
;
""
)
****************** Column 2 *******************
t_Purple:=102:102:153;
t_White:=255:255:255;
t_Black:=1:1:1;
@If(
Form="Contact";t_White:t_B
Form="Loan";214:216:226:t_
Form="Task"&TaskStatus="In
Form="Task"&TaskStatus="Co
239:239:239:t_Black)
****************** Column 3 *******************
@If(
Form = "Contact";
IHCDate;
""
)
****************** Column 4 *******************
LoanDaysCol
****************** Column 5 *******************
t_White:=255:255:255;
t_Red:=255:0:0;
@If(Form="Contact" & LoanDaysCol >= -3; t_White:t_Red; RowColorCol)
****************** Column 6 *******************
RowColorCol
****************** Column 7 *******************
t_LoanDays :=
@If(
Form = "Loan";
@If(
LoanStatus = "Not Lodged";
(@Today - DateLodgementExpected) / 86400;
LoanStatus = "Lodged";
(@Today - DateConditionalExpected) / 86400;
LoanStatus = "Conditional";
(@Today - DateUnConditionalExpected)
LoanStatus = "Unconditional";
(@Today - DateUnconditionalDocsExpec
LoanStatus = "Unconditional Docs Received";
(@Today - DateSettlementExpected) / 86400;
LoanStatus = "Settled";
(DateSettled - DateSettlementExpected) / 86400;
LoanStatus = "CRASHED";
(DateCrashed - SaleDate) / 86400;
""
)
;
""
);
@If(
Form = "Loan";
LoanDisplay +
@If(
@IsNumber(t_LoanDays);
" [" +
@If(
t_LoanDays > 0;
"+";
""
)
+ @Text(t_LoanDays) + " DAYS]";
""
);
Form="Task";
TaskDisplay;
Form="Event";
EventDisplay;
Form="TravelBookingEmail":
BookingDisplay;
""
)
****************** Column 8 *******************
ContactName+RelatedContact
****************** Column 9 thru 14 *******************
Standard Plain Text Fields ( surnames / etc )
Thanks CRAK!
ASKER
There's "a couple" of 'em in there huh!
Why is it ok locally?
Why is it ok locally?
Because y uo use @Today in your calculations, the view is recalculated EVERY time you open or refresh it.
Ah, that's been said already...
Most people would recommend a redesign. E.g. a scheduled agents evaluating those date-computations and labelling documents. The label (just a field value) would then affect the columns display.
Downside: a lot of mutations each night!
Alternatively, you could replace each of the @Todays:
@TextToTime("today")
(benefit from "today" as a constant)
I'd assing a variable to do that computation only once:
e.g. view 2, col 1:
Dt:=@TextToTime("today");
@If(
Form = "Contact";
@If(
DealStatus = "Not Lodged";
@If(
!@IsTime(DateLodgementExpe cted);
(Dt - SaleDate) / 86400;
(Dt - DateLodgementExpected) / 86400
);
DealStatus = "Lodged";
(Dt - DateConditionalExpected) / 86400;
DealStatus = "Conditional";
(Dt - DateUnConditionalExpected) / 86400;
DealStatus = "Unconditional";
....
Downside: a lot of mutations each night!
Alternatively, you could replace each of the @Todays:
@TextToTime("today")
(benefit from "today" as a constant)
I'd assing a variable to do that computation only once:
e.g. view 2, col 1:
Dt:=@TextToTime("today");
@If(
Form = "Contact";
@If(
DealStatus = "Not Lodged";
@If(
!@IsTime(DateLodgementExpe
(Dt - SaleDate) / 86400;
(Dt - DateLodgementExpected) / 86400
);
DealStatus = "Lodged";
(Dt - DateConditionalExpected) / 86400;
DealStatus = "Conditional";
(Dt - DateUnConditionalExpected)
DealStatus = "Unconditional";
....
ASKER
Hey Sjef -- why would it be OK locally though??? Why is it the HDD of the server getting hammered - not the CPU?
Further explanation on how it works would be great if possible
Kind Regards,
Adel
Further explanation on how it works would be great if possible
Kind Regards,
Adel
Hi Sjef, good to have you around:
I've never really understood why this doesn't cause a similar drag locally. Do you?
I've never really understood why this doesn't cause a similar drag locally. Do you?
ASKER
Thanks Crak, Thanks Sjef will give this a go!
Adel
Adel
Why the HDD activity: the whole view's index has to be rewritten to the database.
You could try to use the @TextToTime("today") method and set the indexing to "Auto, at most every 4 hours" or so. Do a thorough check on this! If I were Notes, and I noticed that nothing in the document has changed, and there's no @Today in the formula, I wouldn't even bother to recalculate the column entry! So even when the server goes to the next day, many column values aren't recalculated.
It would have been nice if there were an option to throw away the view's index every night, of one specific view, so the first one to open it would have a problem. Sadly, there is no such option. You'd have to use a scheduled agent, to run at some time early in the morning, that opens the view and issues a view.Refresh. I'm not quite certain that this will really rebuild the view though.
Less delay on local: maybe because the index blocks are rewritten to disk later?
By the way, if the same database is used in many timezones in the world, calculations may differ for those places where your "today" is not their "today".
You could try to use the @TextToTime("today") method and set the indexing to "Auto, at most every 4 hours" or so. Do a thorough check on this! If I were Notes, and I noticed that nothing in the document has changed, and there's no @Today in the formula, I wouldn't even bother to recalculate the column entry! So even when the server goes to the next day, many column values aren't recalculated.
It would have been nice if there were an option to throw away the view's index every night, of one specific view, so the first one to open it would have a problem. Sadly, there is no such option. You'd have to use a scheduled agent, to run at some time early in the morning, that opens the view and issues a view.Refresh. I'm not quite certain that this will really rebuild the view though.
Less delay on local: maybe because the index blocks are rewritten to disk later?
By the way, if the same database is used in many timezones in the world, calculations may differ for those places where your "today" is not their "today".
That could be done by admin: launch a scheduled updall -V
But that removes the indexes of ALL views in the database. What a waste...
According to admin help that should update all built views. But I'm no Admin expert. A suitable updall, scheduled past midnight in combination with view indexes not updated in daytime at all, may reduce disk I/O caused by date/time evaliations in views even more! The downside would be that new docs may not appear until the next day!
ASKER
Thanks heaps CRAK! View load time was 1min 4 sec. Now it is something like 4 seconds. Gotta be happy with that eh!!
We have removed these calcs as in all honesty not need for day to day operations. Will create a 2nd set of views that people can get them from when required.
Thanks for your help!
We have removed these calcs as in all honesty not need for day to day operations. Will create a 2nd set of views that people can get them from when required.
Thanks for your help!
ASKER
Thanks heaps CRAK! Thanks Sjef for your expansion too..
View load time was 1min 4 sec. Now it is something like 4 seconds. Gotta be happy with that eh!!
We have removed these calcs as in all honesty not need for day to day operations. Will create a 2nd set of views that people can get them from when required.
Thanks for your help!
Adel
View load time was 1min 4 sec. Now it is something like 4 seconds. Gotta be happy with that eh!!
We have removed these calcs as in all honesty not need for day to day operations. Will create a 2nd set of views that people can get them from when required.
Thanks for your help!
Adel
ASKER
What's going on I have spent days on this now. Would love some input / ideas.
hddaccess.png