In article <[EMAIL PROTECTED]>,
Cyrus Daboo <[EMAIL PROTECTED]> wrote:
> Hi Andreas,
>
> --On July 2, 2007 2:22:44 AM +0200 Andreas Brodbeck
> <[EMAIL PROTECTED]>
> wrote:
>
> > I have a test setup here, and I observe quite a long "calculation time"
> > for report queries. I have some few dates in the calendar, including
> > reccurent dates. It typically takes up to 500ms to give me a time range
> > for 30 days (equals to approx. 30 events) or so. (On a really fast
> > server machine). And for a whole year it takes up seconds...
> >
> > How can I speed up this? What are the performance issues in general?
> > What is this load-balancing thing in the config file?
> >
> > Any help is very much appreciated! (Thanks to Apple having this Calendar
> > Server open source!)
> >
>
> Can you describe exactly what the query is you are doing (i.e. send the XML
> report body)? I would like to know if its just a time-range query or
> whether it also does some text-matching. Also, I want to know whether you
> are requesting the calendar-data to be returned with the report and whether
> you are returning all the data or just part of it. The other question is
> how large is the calendar you are targeting the report at? i.e. how many
> resources in it?
>
Hi Cyrus
Here is the report I am querying the calendar folder with:
<cal:calendar-query xmlns:dav="DAV:"
xmlns:cal="urn:ietf:params:xml:ns:caldav">
<dav:prop>
<dav:getetag/>
<cal:calendar-data>
<cal:expand end="20070802T000000Z" start="20070703T000000Z"/>
<cal:comp name="VCALENDAR">
<cal:allprop/>
<cal:comp name="VEVENT">
<cal:allprop/>
</cal:comp>
<cal:comp name="VTIMEZONE">
<cal:allcomp/>
<cal:allprop/>
</cal:comp>
</cal:comp>
</cal:calendar-data>
</dav:prop>
<cal:filter>
<cal:comp-filter name="VCALENDAR">
<cal:comp-filter name="VEVENT">
<cal:time-range end="20070802T000000Z" start="20070703T000000Z"/>
</cal:comp-filter>
</cal:comp-filter>
</cal:filter>
</cal:calendar-query>
My observations are:
If I only have 1 single normal event, it takes 120ms, as shown in the
access.log:
/principals/users/admin/ [03/Jul/2007:07:20:54 +0000] "REPORT
/calendars/users/user_5/calendar/ HTTP/1.1" 207 1983 "-" "-" [120.7 ms]
If I only have 1 single *recurrent* event, which occurs daily within the
range of 30 days, it takes 350 ms:
/principals/users/admin/ [03/Jul/2007:07:26:36 +0000] "REPORT
/calendars/users/user_5/calendar/ HTTP/1.1" 207 16711 "-" "-" [352.0 ms]
And querying the empty (!) inbox needs 60ms:
<cal:calendar-query xmlns:dav="DAV:"
xmlns:cal="urn:ietf:params:xml:ns:caldav">
<dav:prop>
<dav:getetag/>
<cal:calendar-data>
<cal:comp name="VCALENDAR">
<cal:allprop/>
<cal:comp name="VEVENT">
<cal:allprop/>
</cal:comp>
<cal:comp name="VTIMEZONE">
<cal:allcomp/>
<cal:allprop/>
</cal:comp>
</cal:comp>
</cal:calendar-data>
</dav:prop>
<cal:filter>
<cal:comp-filter name="VCALENDAR">
<cal:comp-filter name="VEVENT">
</cal:comp-filter>
</cal:comp-filter>
</cal:filter>
</cal:calendar-query>
/principals/users/admin/ [03/Jul/2007:07:20:54 +0000] "REPORT
/calendars/users/user_5/inbox/ HTTP/1.1" 207 69 "-" "-" [67.5 ms]
> Some things to note: a time-range only query should utilize only the sqlite
> database and so ought to be fast. If you include any property/parameter
> text searches then it will slow down a lot as currently we don't index
> calendar text data - in that case the server has to open and search each
> resources. Obviously that is far from ideal and we will be adding a lot
> more indexing in the future to aid with that.
>
> The other issue is returning partial calendar again - again to do that the
> server has to open and parse each resource that is matched by the query,
> and then write them up via a filter that only includes the selected
> properties etc. Writing the entire calendar data is a lot easier - it just
> streams the entire "raw" resource data from disk to the network. Whilst it
> might be possible to utilize the index for the partial data case, a better
> first step would be to optimize the iCalendar parser/generator.
In my query, what can I do to get all the raw data as fast as possible?
As far as I remember right, I needed to explicitly list the <cal:comp>
tags in the <cal:calendar-data> area. The single <cal:allcomp/> did not
seem to work. What is the syntax in the report to tell the server to
give me ALL the data just as is?
Thanks for your help!
Andreas
_______________________________________________
calendarserver-users mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo/calendarserver-users