我们想将所有数据库查询记录到日志表中,是否可能?
答案 0 :(得分:4)
对于sql server,请参阅this answer about sql server profiler。对于mysql,the query log是一个解决方案。但是,它们都写入文件,但如果要查询数据,则可以始终解析日志文件并将其插入表中。
请注意,但是日志记录不是免费的。在这两种情况下,您都会看到性能下降。如果您只想记录应用程序的查询,则可以选择在那里记录查询(可选地,异步)。您必须进行测试才能看到最佳选择。
编辑:此外,根据您的流量,记录所有查询可能会在短时间内占用大量磁盘空间。如果您登录该应用程序,则可以使用具有翻转系统的nlog等日志记录库(即,如果日志文件达到> 100 MB,则开始删除最旧的文件)。在所有这三种情况下,您还可以留出仅用于记录的分区,以便它不会填满您的主硬盘。
答案 1 :(得分: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
答案 2 :(得分:1)
我认为你不能写入数据库表,MYSQL可以将它们写入file,你可以编写一个脚本来解析文件并插入查询。