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+Caffeine构造多级缓存
redis·spring·缓存
hello1114-2 小时前
Redis学习打卡-Day2-缓存更新策略、主动更新策略、缓存穿透、缓存雪崩、缓存击穿
java·redis·学习·缓存·javaweb
码农飞哥9 小时前
互联网大厂Java求职面试实战:Spring Boot到微服务的技术问答解析
java·spring boot·缓存·面试·消息队列·技术栈·microservices
?abc!21 小时前
缓存(3):本地缓存作用 及 数据一致性 实现策略
缓存
Toky Zhu1 天前
ubuntu清除缓存
linux·ubuntu·缓存
呦呦鹿鸣Rzh1 天前
redis
数据库·redis·缓存
只因只因爆1 天前
spark的缓存
大数据·缓存·spark
摘星编程1 天前
Redis+Caffeine构建高性能二级缓存
数据库·redis·缓存
酷爱码1 天前
Nginx的核心功能--正向代理、反向代理、缓存和Rewrite
运维·nginx·缓存
hello_ejb31 天前
聊聊JetCache的缓存构建
java·前端·缓存