Performance

This page is work in progress document which describes performance tweaks which you can make to get Koha running faster 
For rationale about Cache handling in Koha see separate page. 
= Template Toolkit =
Template caching is introduced into Koha with 
This improvement is part of Koha 3.8, but you have to add new configuration directive to koha-conf.xml (but see )
 <template_cache_dir>/tmp</template_cache_dir>
Cache module will add directory subtree under that path, so it won't clobber your /tmp with lot of files.
If instead of /tmp or /tmp/koha you choose other directory don't forget to set the ownership to Koha:
 mkdir -p /var/cache/koha/INSTANCE/templates
 chown INSTANCE-koha:INSTANCE-koha /var/cache/koha/INSTANCE/templates
== Koha::Template::Plugin::Combine ==
One of suggestions in Bug 1918 - Minify JavaScript and CSS is to minify JavaScript and CSS. While that does brings us some improvement, even bigger reduction in number of round-trips to server can be achieved using this plugin.
Picture shows reduction from 44 to 31 requests on this search result page which have a lot of requests mostly because of cover images.
= Memcache =
Memcache will give you performance benefit of sharing cached values between requests. This will give you performance gain (since there is network overhead in requesting values) but will give you huge benefits if you have a lot of concurrent connections. It also allows you to cluster more effectively. 
== Configuration ==
Quite confusingly, memcache configuration is picked from koha-conf.xml configuration file.
 <memcached_servers>localhost:11211</memcached_servers>
 <memcached_namespace>koha</memcached_namespace>
Take a look at the about page to know if memcached is correctly configured.
= Database =
Koha in it's current release uses MySQL.
== MySQL tuning ==
Some of Koha's queries do benefit from occasional index or newer version of database. For example, if you are using MySQL from Debian distribution, upgrading to Percona MySQL server will bring performance benefit, even for same MySQL version.
Adding additional indexes might prove useful, for example for Shelf Browser see http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=7886
Koha is heavily dependent on MySQL query cache as shown here:
This will decrease over time as our code gets better in internal caching, but for now, remember to allocate enough space for MySQL query cache.
* To tune your MySQL setup you might find useful MySQLTuner-perl.
* See also this Koha Tuning Guide
== using DBD::Gofer as local SQL query cache ==
I did some measurements with DBD::Gofer which is network serialisation
layer which can introduce local cache with:
 DBI_AUTOPROXY=dbi:Gofer:transport=null;cache=1
This pass SQL query to original database, but cache queries in memory,
just like MySQL query cache does.
This has performance impact on generated search page:
 time DBI
 2.952961 0.713 localhost socket
 3.709371 1.634 Gofer cache
 2.395195 0.996 Gofer with seeded cache
 3.866916 2.659 Gopher+ssh tunnel/1Gb LAN
This are plack numbers, but are useful for estimating performance
implact of Gofer itself. It roughly doubles number of perl statements
execuited in NYTProf. I also have to re-run them with dropping caches and more samples...
And now numbers from caching layer: we issue 1674 queries of which 927 are
unique. That means we are generating double traffic to database so using
local caching via DBD::Gofer (which is part of standard DBI install,
BTW) might buy you some performance.
= plack =
plack makes your Koha code persistent in memory, and it makes everything faster. You can still change and reload code on the fly, and it provides nice ways to profile request time, memory usage, DBI query time and module size. 
Plack is now considered as stable since Koha version 3.22
See also: Plack.
== profiling ==
To be written, based on new plack development
See also: Profiling with DevelNYTProf.
= Work in progress =
Take a look a the 2 omnibus bugs to know the areas the developers are currently working on:
* Bug 17819 - Performance 16.11 - Omnibus
* Bug 15342 - Performance 3.22 - Omnibus
= See also =
* Koha Tuning Guide
Category:Development
Category:Performance