Wednesday, May 11, 2011

Zend_Db_Profiler 將 SQL 徹底剖析

維護舊的 Model 的既有 Function 幾乎都不會有大問題,但是只要寫新的 Model 就感覺欄位名稱都會打錯,不然就是回傳值不確定是不是 Controller 要的。說實在的,就是分析和能力的不足....(慚愧)。因此會在呼叫 Model 的函式之後,將組合或是欲呈現的 SQL 以字串呈現出來檢查看看。

目前的做法

在 /application/config/application.ini 中加入以下
resources.log.stream.filterParams.priority = 7
resources.frontController.params.displayExceptions = 1
resources.log.firebug.writerName = "Firebug"
resources.log.firebug.filterName = "Priority"
resources.log.firebug.filterParams.priority = 7
因此,可以利用 Firebug 來做 Log 紀錄檢視。不小心 Google 搜尋到 Firebug 在 Zend 方面亦有其他應用,如 [1.], [2.], [3.] 所示。

事前準備
  1. 安裝 Firefox
  2. 安裝 Firebug 外掛
  3. 安裝 FirePHP 外掛

Zend_Db_Profiler 的作法
  • 透過 Bootstrap.php 設定
由於已經將 Database 在此初始化,可供給 DB 給後續存取資源。 因為資料庫的初始化是利用 Zend_Config_Ini 來處理,將以下設定加入 db.ini 這設定之中。
db.params.profiler.enabled = true
db.params.profiler.class = Zend_Db_Profiler_Firebug

並且在 return $db 之前加入
$profiler = new Zend_Db_Profiler_Firebug('All DB Queries');
$profiler->setEnabled(true);
$db->setProfiler($profiler);

在 Firebug 中的 console 會出現 All DB Queries 字眼,點下去之後,會出現每一個 SQL 查詢以及回傳,更棒的是它有執行時間,應該是讓有最佳化需求的人做參考吧。

Reference

[1.] Zend framework: Logging Database Queries to FireBug
[2.] Programmer's Reference Guide::Zend_Db_Profiler
[3.] ZF : DB Profiling with Firebug

No comments:

Post a Comment