2011-02-03 1 views
4

я заметил, что Kohana 3 ORM запускает «SHOW FULL COLUMNS» для каждого из моих моделей, когда я начала их использования:Помощь Kohana 3 ОРМ ускорить немного

SHOW FULL COLUMNS FROM `mytable` 

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

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

+2

http://kohanaframework.org/guide/api/ORM проверить там, $ _table_columns может быть то, что вы ищете. – egis

+2

http: //forum.kohanaframework.org/discussion/comment/19555/# Comment_19555 – biakaveron

ответ

7

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

Взятые из WOUTERS ответа на форумах официального Кохана (где 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') 
); 
+0

Я выбрал это как правильный ответ, так как он наилучшим образом отвечает на вопрос, полезен он или нет. – Luke

+0

+1, я искал его. –

1

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

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

+0

Причина, по которой я это поднял, - это когда я использовал профилировщик и выполнял полдюжины запросов для одного запроса, запрос SHOW FULL COLUMNS был самым медленным. – Luke

1

не забывает подчеркивание:

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()); 
0

Не знаю, как команда Кохана сказала пробеги "показать полные столбцы формируют так быстро г eading из кеша для всех случаев. Кэш запросов является узким местом в 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 тузд плагин. 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