Question

J'ai remarqué que Kohana 3 ORM exécute un "SHOW FULL COLUMNS" pour chacun de mes modèles lorsque je commence à les utiliser:

SHOW FULL COLUMNS FROM `mytable`

Cette requête peut prendre quelques cycles d'horloge pour s'exécuter (dans le profileur Kohana, c'est en fait la plus lente de toutes les requêtes exécutées dans mon application actuelle).

Existe-t-il un moyen d'aider Kohana 3 ORM à accélérer en désactivant ce comportement et à définir explicitement les colonnes dans mes modèles à la place?

Était-ce utile?

La solution

biakaveron a répondu à ma question par un commentaire, je ne peux donc pas exclure la bonne réponse.

Tirée de la réponse de Wouters sur les forums officiels de Kohana (où biakaveron a pointé du doigt), voici la bonne réponse:

C'est très simple, $table_columns est un grand tableau avec beaucoup d'informations, mais en fait, très peu de ces informations est utilisé dans ORM.

Cela fera l'affaire:

protected $_table_columns = array(
    'id'            =>  array('type'=>'int'),
    'name'          =>  array('type'=>'string'),
    'allowNull'     =>  array('type'=>'string','null'=>TRUE),
    'created'       =>  array('type'=>'int')
);

Autres conseils

Il n'y a pas trop de temps système lorsque cette requête est exécutée;bien que vous puissiez les mettre en cache / ignorer le processus en les définissant manuellement (si c'est vraiment ce que vous voulez, remplacez le $_table_columns dans vos modèles, bien que je ne vois pas combien de temps vous pouvez gagner, cela vaut la peine d'essayer).

J'ai proposé une alternative de mise en cache pour list_columns() mais elle a été refusée car ce n'est vraiment pas un goulot d'étranglement: http://dev.kohanaframework.org/issues/2848

n'oubliez pas de souligner:

protected $_table_columns = array(
    'id'            =>  array('type'=>'int'),
    'name'          =>  array('type'=>'string'),
    'allowNull'     =>  array('type'=>'string','null'=>TRUE),
    'created'       =>  array('type'=>'int')
);

Cela vous donnera une colonne complète info sous forme de tableau:

var_export($ORM->list_columns());

Je ne sais pas comment l'équipe kohana a dit que "afficher les colonnes complètes" s'exécute en lecture rapide à partir du cache dans tous les cas. Le cache de requête est un goulot d'étranglement sur mysql pour notre charge de travail en raison de. Nous avons donc dû l'éteindre.

https://blogs.oracle.com/dlutz/entry/mysql_query_cache_sizing

La preuve qui montre des colonnes complètes est la requête la plus exécutée https://www.dropbox .com / s / zn0pbiogt774ne4 / Screenshot% 202015-02-17% 2018.56.21.png? dl= 0

Preuve des tables temporaires sur le disque depuis le plugin MySQL de NewRelic. https://www.dropbox .com / s / cwo09sy9qxboeds / Screenshot% 202015-02-17% 2019.00.19.png? dl= 0

Et les requêtes les plus incriminées (> 100 ms) triées par nombre de requêtes.

https:// www.dropbox.com/s/a1kpmkef4jd8uvt/Screenshot%202015-02-17%2018.55.38.png?dl=0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top