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?
您可以使用以下代码设置扩展事件会话。我测试了这个并且它有效(至少是我打电话的方式)。
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)
归档时间: |
|
查看次数: |
523 次 |
最近记录: |