Kohana 3 ORMが少しスピードアップするのを手伝います
-
28-10-2019 - |
質問
Kohana 3 ORMが、使用を開始するときに各モデルに「完全な列を表示」を実行していることに気付きました。
SHOW FULL COLUMNS FROM `mytable`
このクエリは、実行するために数クロックサイクルが必要になる場合があります(Kohanaプロファイラーでは、実際には現在のアプリで実行されたすべてのクエリの中で最も遅いです)。
Kohana 3 ORMがこの動作を無効にしてスピードアップし、代わりに私のモデルの列を明示的に定義する方法はありますか?
解決
ビアカベロン 正解以外はできないので、コメントで私の質問に答えました。
公式のコハナフォーラム(Biakaveronが指し示した場所)でWoutersの回答から取られた、これは正しい答えです。
それは非常に簡単です、
$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')
);
他のヒント
そのクエリが実行されたとき、あまり頭上ではありません。あなたはそれらを手動で定義することによってそれらをキャッシュ /スキップすることができますが(それが本当にあなたが上書きしたいものである場合 $_table_columns
あなたのモデルでは、どれだけの時間を節約できるかわかりませんが、試してみる価値があります)。
キャッシュの代替品を提案しました list_columns()
しかし、それは本当にそれほどボトルネックではないので、それは否定されました: http://dev.kohanaframework.org/issues/2848
アンダースコアを忘れないでください:
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());
Kohanaチームが、「完全な列をShow Full Columns」がすべてのケースでキャッシュからの速い読み物としてどのように実行されると言ったかはわかりません。クエリキャッシュは、作業負荷のための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
クエリカウントでソートされた上位の問題のクエリ(> 100ms)。
https://www.dropbox.com/s/a1kpmkef4jd8uvt/screenshot%202015-02-17%2018.55.38.png?dl=0