通过单个存储过程重新路由所有存储过程调用以进行日志记录

时间:2014-07-03 09:21:04

标签: sql-server tsql stored-procedures

我正在尝试通过日志记录存储过程重新路由我的数据库的每个最终用户存储过程调用。本质上,它会将存储过程调用包装在一些简单的日志记录逻辑中,进行调用,需要多长时间等等。

这可能会造成瓶颈吗?我担心当存储过程总调用量增加时,这可能会成为一个严重的问题。

2 个答案:

答案 0 :(得分:1)

通过单一入口点路由所有内容并非最佳。即使没有性能问题,它仍然是一个维护问题,因为您需要公开真正的proc在控制器proc中接受的所有输入参数。随着时间的推移将proc添加到此控制器每次都需要进行一些测试,以确保正确映射参数。随着时间推移删除proc可能会留下未使用的输入参数此方法还要求应用程序代码传递预期proc所需的参数,以及预期proc的名称(或ID?),这是另一个潜在的错误来源,即使是次要错误。< / p>

最好将一般的日志记录过程作为每个过程中的第一个进行调用。这是一个标准模板,可以很容易地添加到任何新的proc。这为应用程序代码留下了一个干净的API,以便应用程序代码同样可维护。

答案 1 :(得分:0)

SQL可以同时运行相同的存储过程,只要它不会对正在使用的资源造成阻塞或死锁。例如:

CREATE PROCEDURE ##test

AS
BEGIN 

SELECT 1
WAITFOR DELAY '00:00:10'
SELECT 2

END

现在,在两个不同的查询窗口中快速执行此存储过程,以查看它是否同时运行:

--Query window 1
EXEC ##test

--Query window 2
EXEC ##test

因此,您可以看到不会有一行调用等待执行存储过程。您可能遇到的唯一问题是,如果要将sproc详细信息记录到某个表中,具体取决于隔离级别,则可能会因为日志记录sproc锁定表中用于记录数据的页面而阻塞。我不相信这会是一个问题,除非您极度运行日志存储过程,但您想要运行一些测试以确保。