Помогаем Kohana 3 ORM немного ускорить - PullRequest
4 голосов
/ 04 февраля 2011

Я заметил, что Kohana 3 ORM запускает «ПОКАЗАТЬ ПОЛНЫЕ КОЛОННЫ» для каждой из моих моделей, когда я начинаю их использовать:

SHOW FULL COLUMNS FROM `mytable`

Этот запрос может занять несколько тактов (в профилировщике Kohana это самый медленный из всех запросов, выполняемых в моем текущем приложении).

Есть ли способ помочь Kohana 3 ORM ускорить работу, отключив это поведение и вместо этого явно указав столбцы в моих моделях?

Ответы [ 4 ]

7 голосов
/ 05 февраля 2011

biakaveron ответил на мой вопрос с комментарием, поэтому я не могу, кроме правильного ответа.

Взято из ответа Wouters на официальных форумах Kohana (на которые указывает biakaveron), это правильный ответ:

Это очень просто, $table_columns это большой массив с большим количеством информации, но на самом деле очень мало этой информации используется в ORM.

Это будет делать:

protected $_table_columns = array(
    'id'            =>  array('type'=>'int'),
    'name'          =>  array('type'=>'string'),
    'allowNull'     =>  array('type'=>'string','null'=>TRUE),
    'created'       =>  array('type'=>'int')
);
1 голос
/ 20 марта 2012

не забудьте подчеркнуть:

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

Это даст вам полную информацию о столбце в виде массива:

var_export($ORM->list_columns());
1 голос
/ 05 февраля 2011

Когда этот запрос выполняется, не слишком много накладных расходов; хотя вы можете кэшировать их / пропустить процесс, определяя их вручную (если это действительно то, что вы хотите, переопределите $_table_columns в ваших моделях, хотя я не вижу, сколько времени вы можете сэкономить, делая это - стоит попробовать).

Я предложил альтернативу кэширования для list_columns(), но это было отвергнуто, поскольку на самом деле это не так уж и узкое место: http://dev.kohanaframework.org/issues/2848

0 голосов
/ 18 февраля 2015

Не уверен, что команда kohana сказала, что «показывать полные столбцы» работает как быстрое чтение из кэша для всех случаев.Кеш запросов является узким местом в MySQL для нашей рабочей нагрузки.Таким образом, мы должны были выключить это.

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

Доказательство, показывающее полные столбцы, является наиболее выполняемым запросом https://www.dropbox.com/s/zn0pbiogt774ne4/Screenshot%202015-02-17%2018.56.21.png?dl=0

Подтверждение временных таблиц на диске из плагина NewRelic mysql.https://www.dropbox.com/s/cwo09sy9qxboeds/Screenshot%202015-02-17%2019.00.19.png?dl=0

А самые популярные запросы (> 100 мс) отсортированы по количеству запросов.

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

...