2011-02-18 58 views

回答

2

從SQL Server的角度......

正如其他人所建議的,則SQL Server Profiler是肯定走一條路,但你要承擔的資源這樣做砸。如果你選擇這種方法,你必須實現它作爲服務器端跟蹤,而不是通過GUI。

您可能還會有一些成功的監控,記錄動態管理視圖(DMV)的內容以查詢執行統計信息等內容。

你會想看看DMV的如:

例如,這裏是可以用來識別查詢CPU消耗最差的前20個SQL查詢。不完全是你在做什麼之後,但它確實演示瞭如何使用您感興趣的DMV。

SELECT TOP 20 
    qs.sql_handle, 
    qs.execution_count, 
    qs.total_worker_time AS Total_CPU, 
    total_CPU_inSeconds = --Converted from microseconds 
     qs.total_worker_time/1000000, 
    average_CPU_inSeconds = --Converted from microseconds 
     (qs.total_worker_time/1000000)/qs.execution_count, 
    qs.total_elapsed_time, 
    total_elapsed_time_inSeconds = --Converted from microseconds 
     qs.total_elapsed_time/1000000, 
    st.text, 
    qp.query_plan 
FROM 
    sys.dm_exec_query_stats AS qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st 
    CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp 
ORDER BY qs.total_worker_time DESC 
+0

waw ..太棒了!謝謝。 – esquare 2011-02-18 13:18:32

1

我不認爲你可以寫一個數據庫表,MYSQL可以將它們寫入file,你可以寫一個腳本來解析文件並插入查詢。

+0

你說得對!但是我想問一下,可以選擇DBMS嗎? – esquare 2011-02-18 12:14:28

4

對於SQL Server,請參閱this answer about sql server profiler。對於mysql,the query log是一個解決方案。但是,它們都寫入文件,但如果要查詢數據,則始終可以解析日誌文件並將它們插入到表中。

但請注意,日誌記錄不是免費的。在這兩種情況下,你會看到一些性能下降。如果您只想記錄應用程序的查詢,則可以選擇在該處記錄查詢(可選擇異步)。你必須測試看看最好的選擇。

編輯:而且還取決於你的業務量,記錄所有的查詢可以吃大量的磁盤空間在很短的時間量。如果你登錄的應用程序,你可以使用一個日誌庫,像nlog具有側翻系統(即,如果日誌文件達到> 100 MB,然後開始刪除最早的文件)。在這三種情況下,您還可以留出一個僅用於日誌記錄的分區,因此它不會填滿您的主硬盤。