前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server中怎么知道哪些表被访问过?

SQL Server中怎么知道哪些表被访问过?

作者头像
bisal
发布2022-03-30 10:38:50
9140
发布2022-03-30 10:38:50
举报
文章被收录于专栏:bisal的个人杂货铺

同事问了个问题,我需要知道SQL Server中的某个库都有哪些表被访问过,这个怎么实现?

SQL Server确实不太熟悉,如果是Oracle,我们可以通过AUDIT审计功能,实现表级、字段级这种粒度的监控,另外如果比较粗略的,还可以通过数据字典找到所有SELECT的语句,之所以说粗略,因为缓存是按照LRU算法存储的,如果数据库非常闲,他会记录很多执行过的语句,但如果数据库非常繁忙,很可能只存储了最近执行过的语句。

因此,相同的原理,我们能通过SQL Server的数据字典,找到一些执行过的语句,这就用到了sys.dm_exec_cached_plans和sys.dm_exec_sql_text,我们从微软的官方文档,可以了解视图的作用。

1. sys.dm_exec_cached_plans

a290cf4febb69db3b146d53460494355.png
a290cf4febb69db3b146d53460494355.png

P.S. https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-cached-plans-transact-sql?view=sql-server-ver15

2. sys.dm_exec_sql_text

bc2a3b96058388346c35ca470c1a9d22.png
bc2a3b96058388346c35ca470c1a9d22.png

P.S. https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sql-text-transact-sql?view=sql-server-ver15

sys.dm_exec_cached_plans存储的是查询计划,作用和Oracle的执行计划应该是相同的,通过复用,减少解析消耗,提高数据检索执行的效率。通过该视图的plan_handle,可以关联sys.dm_exec_sql_text,找到执行的SQL语句文本,再结合我需要找检索的SELECT关键字,就可以达到找出执行过的SELECT语句,进而知道那些表被访问了。

SQL如下,

代码语言:javascript
复制
SELECT p.refcounts, p.usecounts, sqltext.text
  FROM sys.dm_exec_cached_plans p
 CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) sqltext
 WHERE p.objtype IN ('Adhoc', 'Prepared') 
   AND p.cacheobjtype = 'Compiled Plan'
   AND sqltext.text NOT LIKE '%sys%'
   AND sqltext.text NOT LIKE '%fn_listextendedproperty%'
   AND upper(sqltext.text) LIKE 'SELECT%'
   AND upper(db_name(sqltext.dbid)) = @
 ORDER BY p.usecounts desc, p.refcounts desc;

相关的字段含义如下所示,

356300a02098471b261a79aacdc3e604.png
356300a02098471b261a79aacdc3e604.png
88ff3179da26604a058c078b70ef3f0f.png
88ff3179da26604a058c078b70ef3f0f.png
7c8767e9508c68567ee78e665122d35f.png
7c8767e9508c68567ee78e665122d35f.png

如果有朋友知道其他更好实现这个需求的方案,可以私信,共享一下。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/03/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档