[Koha-bugs] [Bug 15350] New: DBIx::Class Startup speed

bugzilla-daemon at bugs.koha-community.org bugzilla-daemon at bugs.koha-community.org
Thu Dec 10 12:55:44 CET 2015


http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=15350

            Bug ID: 15350
           Summary: DBIx::Class Startup speed
 Change sponsored?: ---
           Product: Koha
           Version: master
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P5 - low
         Component: Architecture, internals, and plumbing
          Assignee: jonathan.druart at bugs.koha-community.org
          Reporter: jonathan.druart at bugs.koha-community.org
        QA Contact: testopia at bugs.koha-community.org

(This follows 15341 comment 5)

From
https://metacpan.org/pod/distribution/DBIx-Class/lib/DBIx/Class/Manual/Cookbook.pod#STARTUP-SPEED
There are some tips to follow to reduce the DBIx::Class startup delays.

===
1 - Statically Define Your Schema

If you are using DBIx::Class::Schema::Loader to build the classes dynamically
based on the database schema then there will be a significant startup delay.

For production use a statically defined schema (which can be generated using
DBIx::Class::Schema::Loader to dump the database schema once - see
make_schema_at and dump_directory for more details on creating static schemas
from a database).

2 - Move Common Startup into a Base Class

Typically DBIx::Class result classes start off with

  use base qw/DBIx::Class::Core/;
  __PACKAGE__->load_components(qw/InflateColumn::DateTime/);

If this preamble is moved into a common base class:-

  package MyDBICbase;

  use base qw/DBIx::Class::Core/;
  __PACKAGE__->load_components(qw/InflateColumn::DateTime/);
  1;

and each result class then uses this as a base:-

  use base qw/MyDBICbase/;

then the load_components is only performed once, which can result in a
considerable startup speedup for schemas with many classes.

3 - Explicitly List Schema Result Classes

The schema class will normally contain

  __PACKAGE__->load_classes();

to load the result classes. This will use Module::Find to find and load the
appropriate modules. Explicitly defining the classes you wish to load will
remove the overhead of Module::Find and the related directory operations:

  __PACKAGE__->load_classes(qw/ CD Artist Track /);

If you are instead using the load_namespaces syntax to load the appropriate
classes there is not a direct alternative avoiding Module::Find.

4 - MEMORY USAGE

Cached statements

DBIx::Class normally caches all statements with prepare_cached(). This is
normally a good idea, but if too many statements are cached, the database may
use too much memory and may eventually run out and fail entirely.

-- 
You are receiving this mail because:
You are watching all bug changes.


More information about the Koha-bugs mailing list