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 清空数据缓存 进行数据库性能测试或数据更新异常 影响查询性能,需要重新加载数据 仅清理未修改的缓冲页,不影响脏页
相关推荐
daixin88487 小时前
什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
java·开发语言·redis·缓存
daixin88489 小时前
Redis过期数据的删除策略是什么?有哪些?
数据库·redis·缓存
EmpressBoost10 小时前
谷粒商城170缓存序列化报错
java·spring·缓存
幻灭行度12 小时前
通过redis_exporter监控redis cluster
数据库·redis·缓存
forestsea13 小时前
Caffeine 缓存库的常用功能使用介绍
java·缓存·caffeine
冷崖15 小时前
Redis缓存策略以及bigkey的学习(九)
redis·学习·缓存
betazhou15 小时前
SQL server 2019删除重建用户
数据库·sql server
雪*夹雨夹*雪16 小时前
CPU 为什么需要缓存?揭开速度与效率的底层逻辑
缓存
love530love17 小时前
Windows 如何更改 ModelScope 的模型下载缓存位置?
运维·人工智能·windows·python·缓存·modelscope
szx042717 小时前
缓存HDC内容用于后续Direct2D绘制.
c++·缓存·directx·d2d·direct2d·dx·gdi+dx