sp_tables 阻塞了我的其他语句。谁运行它?

fra*_*eta 5 sql-server audit sql-server-2012 blocking

在我们的应用程序中,我们偶尔会遇到由执行sp_tables语句引起的锁定问题。

我们使用 SQL Server 2012。在我们的代码和存储过程中的查询中,我们不使用sp_tables.

我如何才能追踪谁是这次通话的责任人?至少我如何在发生此调用时登录?

我读到它也被第三方调用,在这种情况下,我如何跟踪谁负责?

编辑:

在我们的应用程序中,我们使用 Hibernate 作为 ORM,使用 c3p0 作为连接池。

编辑 2: 我们没有成功理解 sp_tables 的调用时间和调用者,但今天我们成功复制了这个问题。

似乎调用 sp_tables 以响应尝试对架构进行的失败删除。

删除失败,因为还有其他行引用了我们尝试删除的行,因此我们收到异常

SQLServerException: The DELETE statement conflicted with the REFERENCE constraint..

是否有证据表明此类错误会触发数据库上的 sp_tables?

Sql*_*ide 2

您可以使用以下代码设置扩展事件会话。我测试了这个并且它有效(至少是我打电话的方式)。

    CREATE EVENT SESSION [CallSP_tables] ON SERVER ADD EVENT 
    sqlserver.sp_statement_completed
   (SET collect_statement=(1)   
    ACTION(sqlserver.client_app_name,sqlserver.client_hostname,
    sqlserver.client_pid,sqlserver.database_id,sqlserver.nt_username,
    sqlserver.plan_handle,sqlserver.query_hash) 
    WHERE ( [sqlserver].[like_i_sql_unicode_string]
            ([object_name],N'sp_tables') 
        ) 
    ), 
ADD event sqlserver.sql_statement_completed( 
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.database_id,sqlserver.nt_username,sqlserver.plan_handle,sqlserver.query_hash)) 
ADD TARGET package0.event_file(SET filename=N'C:\callspTables.xel',
        max_file_size=(50), 
        max_rollover_files=(100)) WITH (max_memory=4096 kb, 
        event_retention_mode=allow_multiple_event_loss, 
        max_dispatch_latency=120 seconds, 
        max_event_size=0 kb, 
        memory_partition_mode=none, 
        track_causality=OFF, 
        startup_state=ON)
        GO
Run Code Online (Sandbox Code Playgroud)