2012-03-12 33 views
0

我們已遷移我們的應用程序從Rails的2.2〜3.1導軌和使用ActiveRecord-oracle_enhanced適配器-1.4.1甲骨文加強與軌3.1

我總是看到這個SQL中我的日誌,當應用程序加載,並在任何啓動請求到達服務器。

(102.0ms) SELECT DECODE(table_name, UPPER(table_name), LOWER(table_name), table_name) FROM all_tables WHERE owner = SYS_CONTEXT('userenv', 'session_user') AND secondary = 'N' 
    (102.4ms) SELECT DECODE(table_name, UPPER(table_name), LOWER(table_name), table_name) FROM all_tables WHERE owner = SYS_CONTEXT('userenv', 'session_user') AND secondary = 'N' 
    (101.2ms) SELECT DECODE(table_name, UPPER(table_name), LOWER(table_name), table_name) 
..... 

近21個查詢一次..

當我挖進庫聲明的起源是

class OracleEnhancedAdapter 
    def tables 

誰能告訴我,爲什麼這些sql語句是每次發射。這種行爲在rails 2.2中沒有看到。

它會影響應用程序的性能還是常規?

回答

1

這發生在對應用程序的第一次請求期間。 ActiveRecord非常適合從連接用戶的數據庫中獲取表名列表。

該查詢只會觸發一次(不是每個請求,但每次啓動服務器時)。這是數據庫適配器實現特有的。

對於e.g,所述sqlite3-ruby寶石觸發一個等效查詢:

SQL(0.6ms)SELECT姓名FROM SQLITE_MASTER WHERE類型= '表' AND NOT名稱= sqlite_sequence'