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 清空数据缓存 进行数据库性能测试或数据更新异常 影响查询性能,需要重新加载数据 仅清理未修改的缓冲页,不影响脏页
相关推荐
工一木子5 小时前
【缓存】缓存雪崩与缓存穿透:高并发系统的隐形杀手
缓存·高并发·缓存穿透·缓存雪崩
MinggeQingchun10 小时前
Python - Python操作Redis
数据库·redis·缓存
_.Switch16 小时前
高效API开发:FastAPI中的缓存技术与性能优化
python·缓存·性能优化·负载均衡·fastapi
谬了个大也17 小时前
redis --- 相关基础知识整理
数据库·redis·缓存
编程猪猪侠19 小时前
vite+react+ts如何集成redux状态管理工具,实现持久化缓存
前端·react.js·缓存
m0_7482365819 小时前
【SpringBoot教程】SpringBoot整合Caffeine本地缓存及Spring Cache注解的使用
spring boot·spring·缓存
物随心转19 小时前
Linux的缓存I/O和无缓存IO
缓存
努力学习java的哈吉米大王19 小时前
Redis数据结构-List列表
数据库·redis·缓存
奥顺互联V1 天前
PHP缓存技术优化:提升网站性能的关键
开发语言·缓存·php
不务专业的程序员--阿飞2 天前
【Eureka 缓存机制】
java·缓存·云原生·eureka