2008-11-13 241 views
1

昨晚我在mySQL數據庫的存儲過程中添加了一個參數。我訪問它,搞砸了參數,並決定再次刪除參數,進行測試。在沒有參數的情況下重新創建過程之後的幾分鐘內,我的命令對象仍然抱怨缺少參數。這是mySQL,MySQL /連接器,ADO或企業庫的錯,我能做些什麼呢?MySQL高速緩存

+0

另見:http://stackoverflow.com/questions/2923979/is-mysql-caching-occurring-how-to-fix-it如果你沒有MySQL的權限。 – 2010-05-27 23:15:29

回答

1

默認情況下,MySQL會在您的存儲過程中緩存查詢。查看是否已啓用查詢緩存:

SHOW VARIABLES LIKE 'query_cache%' 

存儲過程調用不是由MySQL緩存,但如果query_cache_type爲ON,這將影響從過程中發出的查詢緩存。可能導致MySQL在幾分鐘內返回相同的結果。嘗試清空緩存,或者更好,重置查詢緩存,如果你的更新程序保存返回先前的結果集刪除所有查詢:

RESET QUERY CACHE 

這應該消除MySQL服務器的任何緩存。

下次發生這種情況時,您可以通過另一個不使用MySQL/Connector或Enterprise Library的工具手動執行該過程。這會告訴你舊的結果集是由MySQL還是應用程序中的驅動程序和應用程序塊緩存的。

編輯:請閱讀下面的評論,通過desertwebdesign。重新創建sproc後,放下連接。連接池可能會保持連接處於打開狀態,所以最好從MySQL中終止連接。大多數查詢瀏覽器都有一個選項卡,如果您使用進程/超級特權登錄,則允許您終止MySQL中的連接。

SHOW FULL PROCESSLIST 
KILL CONNECTION thread_id 
+1

QUERY CACHE與過程高速緩存不同。沒有MySQL變量/函數來控制過程緩存。重新加載它的唯一方法是使其無效。這隻會在使用ALTER PROCEDURE命令刪除,添加或更改過程時發生(不允許您更改過程的主體)。假設您不使用池或持久連接,緩存將在您的下一個連接上重建。如果你在mysql.proc表上運行UPDATE來更改主體,我認爲不會使緩存失效。我需要先閱讀更多源代碼。 – desertwebdesigns 2011-01-20 22:08:55