SQL Server 视图的更新排查及清除缓存

目录

前言

获取数据的时候,发现数据少了两个字段值,归根原因是Java中的实体类少写了两个,后续补充上就好了!

但也正了解到视图中的刷新原理以及排查机制,如果确认是视图等引起,可结合如下文章学习

原先也写过类似的知识点:

  1. Sql Server缓冲池、连接池等基本知识(附Demo)
  2. SQL Server索引碎片的基本知识(附Demo)

排查方向

在 SQL Server 中,视图不会自动更新其结构

如果表中添加了新字段,但没有刷新视图,查询视图时仍然返回旧结构的数据

一共有两种解决方案:

sql 复制代码
EXEC sp_refreshview '视图名字';

截图如下:

或者重新创建视图:

sql 复制代码
DROP VIEW 视图;
CREATE VIEW dbo.vw_SSBoxCheck AS 
SELECT ...

第二个排查方向是用户权限的问题!

确保用户可以查询得到

sql 复制代码
GRANT SELECT ON 视图 TO your_user;

第三个排查方向是视图的缓存问题:

SQL Server 可能存在缓存问题,导致查询的仍然是旧视图结构

sql 复制代码
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
  • SQL Server 在执行查询时,会先生成 查询执行计划 并缓存起来,以加快后续相同 SQL 语句的执行速度。

    DBCC FREEPROCCACHE 命令用于清除 SQL Server 的 执行计划缓存,让 SQL Server 重新解析 SQL 语句并生成新的执行计划

  • SQL Server 数据缓存(Buffer Pool) 存储了最近访问的数据页,以减少磁盘 I/O 操作,提高查询速度。

    DBCC DROPCLEANBUFFERS 命令用于清空 SQL Server 缓冲池中的 干净数据页(未修改的页),让查询重新从磁盘读取数据

总的来说

  • EXEC sp_refreshview ------ 刷新视图
  • DBCC FREEPROCCACHE ------ 清空执行计划缓存
  • DBCC DROPCLEANBUFFERS ------ 清空数据缓存
命令 作用 适用场景 影响 备注
sp_refreshview 刷新视图的元数据 视图结构变更后查询异常 仅影响视图 只影响视图定义,不影响数据或缓存
DBCC FREEPROCCACHE 清空查询执行计划缓存 结构变更、索引优化、查询优化 影响 SQL 解析性能,导致查询重新编译 仅清除执行计划,不影响数据缓存
DBCC DROPCLEANBUFFERS 清空数据缓存 进行数据库性能测试或数据更新异常 影响查询性能,需要重新加载数据 仅清理未修改的缓冲页,不影响脏页
相关推荐
趁你还年轻_2 小时前
Redis大量key集中过期怎么办
数据库·redis·缓存
Wang's Blog10 小时前
Monorepo架构: Nx Cloud 扩展能力与缓存加速
缓存·架构
·云扬·10 小时前
【PmHub面试篇】PmHub 整合 TransmittableThreadLocal(TTL)缓存用户数据面试专题解析
缓存·面试·职场和发展
清风~徐~来10 小时前
【Redis】类型补充
数据库·redis·缓存
一只帆記10 小时前
SpringBoot EhCache 缓存
spring boot·后端·缓存
代码探秘者10 小时前
【Redis从入门到精通实战文章汇总】
数据库·redis·缓存
weixin_7488770010 小时前
【Redis实战:缓存与消息队列的应用】
数据库·redis·缓存
趁你还年轻_1 天前
Redis-旁路缓存策略详解
数据库·redis·缓存
数据艺术家.1 天前
Java八股文——Redis篇
java·redis·缓存·面试·nosql数据库·nosql·八股文
用手手打人1 天前
SpringBoot(七) --- Redis基础
数据库·redis·缓存