Pregunta

Noté que Kohana 3 ORM ejecuta una "Mostrar columnas completas" para cada uno de mis modelos cuando empiezo a usarlos:

SHOW FULL COLUMNS FROM `mytable`

Esta consulta puede tomar algunos ciclos de reloj para ejecutarse (en el perfilador de Kohana, en realidad es la más lenta de todas las consultas ejecutadas en mi aplicación actual).

¿Hay alguna manera de ayudar a Kohana 3 Orm a acelerar al deshabilitar este comportamiento y definir explícitamente las columnas en mis modelos?

¿Fue útil?

Solución

biakaveron respondí mi pregunta con un comentario, así que no puedo excepto la respuesta correcta.

Tomado de la respuesta de los wouters en los foros oficiales de Kohana (donde señaló Biakaveron), esta es la respuesta correcta:

Es muy fácil, $table_columns es una gran matriz con mucha información, pero en realidad solo muy poca de esta información se usa en ORM.

Esto lo hara:

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

Otros consejos

No hay demasiada sobrecarga cuando esa consulta se ejecuta; Aunque puede almacenarlos en caché / omitir el proceso definiéndolos manualmente (si eso es realmente lo que desea anular el $_table_columns En sus modelos, aunque no veo cuánto tiempo puede ahorrarlo, vale la pena intentarlo).

Propuse una alternativa de almacenamiento en caché para list_columns() Pero se negó, ya que realmente no es un cuello de botella: http://dev.kohanaframework.org/issues/2848

No olvides el subrayador:

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

Esto le dará información completa de la columna como una matriz:

var_export($ORM->list_columns());

No estoy seguro de cómo el equipo de Kohana dijo que 'Mostrar columnas completas' funciona como una lectura rápida de caché para todos los casos. Consulty Cache es un cuello de botella en MySQL para nuestra carga de trabajo debido a. Entonces tuvimos que apagarlo.

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

Prueba de que mostrar columnas completas es la consulta más ejecutadahttps://www.dropbox.com/s/zn0pbiogt774ne4/screenshot%202015-02-17%2018.56.21.png?dl=0

Prueba de las tablas Temp en el disco del complemento MySQL NewRelic.https://www.dropbox.com/s/cwo09sy9qxboeds/screenshot%202015-02-17%2019.00.19.png?dl=0

Y las consultas ofensivas superiores (> 100 ms) ordenadas por el recuento de consultas.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top