Azure Synapse Analytics (Azure SQL DW)性能优化指南(4)——使用结果集缓存优化性能
目录
(一)前言
(二)关键命令
1. 对用户数据库启用/禁用结果集缓存
(1)检查数据库的统计信息设置
(2)为数据库启用查询存储
(3)为数据库启用结果集缓存
(4)检查数据库的结果集缓存设置
(5)为数据库启用 Read_Committed_Snapshot 选项
(6)所需权限
2. 对会话启用/禁用结果集缓存
(1)示例
(2)权限
3. 检查缓存结果集的大小
(1)命令语句
(2)权限
(3)结果集
4. 清理缓存
(1) 语法
(2)权限
(三)不缓存哪些内容
(四)何时使用缓存结果
(五)管理缓存结果
(一)前言
启用结果集缓存后,专用 SQL 池会在用户数据库中自动缓存查询结果,供重复使用。 这样,后续的查询执行就能直接从持久性缓存中获取结果,因此无需重新计算。 结果集缓存提高了查询性能,并减少了计算资源的用量。 此外,使用缓存结果集的查询不会占用任何并发槽,因此不会计入现有的并发限制。 出于安全考虑,如果访问方用户的数据访问权限与创建缓存结果的用户相同,则访问方用户只能访问缓存的结果。 在数据库和会话级别,结果集缓存默认情况下为“关闭”。
(二)关键命令
1. 对用户数据库启用/禁用结果集缓存
(1)检查数据库的统计信息设置
SELECT name, is_auto_create_stats_on FROM sys.databases
(2)为数据库启用查询存储
ALTER DATABASE [database_name]
SET QUERY_STORE = ON;
(3)为数据库启用结果集缓存
-- Run this command when connecting to the MASTER databaseALTER DATABASE [database_name]
SET RESULT_SET_CACHING ON;
(4)检查数据库的结果集缓存设置
SELECT name, is_result_set_caching_on
FROM sys.databases;
(5)为数据库启用 Read_Committed_Snapshot 选项
连接到 master
数据库时运行此命令。
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON;
(6)所需权限
A . 要设置 RESULT_SET_CACHING 选项,用户需要服务器级别主体登录名(在预配过程中创建的登录名)或者成为 dbmanager
数据库角色的成员。
B . 要设置 READ_COMMITTED_SNAPSHOT 选项,用户需要对数据库具有 ALTER 权限。
2. 对会话启用/禁用结果集缓存
(1)示例
使用查询的 request_id 查询 sys.dm_pdw_exec_requests
中的 result_cache_hit 列以查看是否使用结果缓存命中或未命中执行此查询。
SELECT result_cache_hit
FROM sys.dm_pdw_exec_requests
WHERE request_id = 'QID58286'
(2)权限
要求具有公共角色的成员身份
3. 检查缓存结果集的大小
(1)命令语句
DBCC SHOWRESULTCACHESPACEUSED;
备注
A . Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
B .DBCC SHOWRESULTCACHESPACEUSED
命令不使用任何参数,并且会返回运行此命令的数据库所使用的空间。
(2)权限
需要 VIEW SERVER STATE 权限。
(3)结果集
列 | 数据类型 | 说明 |
---|---|---|
reserved_space | bigint | 用于数据库的总空间,单位为 KB。 该数字在缓存的结果集增加时会改变。 |
data_space | bigint | 用于数据的空间,单位为 KB。 |
index_space | bigint | 用于索引的空间,单位为 KB。 |
unused_space | bigint | 保留空间中未使用的空间,单位为 KB。 |
4. 清理缓存
从 Azure Azure Synapse Analytics 数据库中删除所有结果集缓存条目。
(1) 语法
DBCC DROPRESULTSETCACHE
[;]
备注
此命令将清空所有查询的结果集缓存。
关闭数据库的结果集缓存功能也会删除所有缓存的结果。
暂停启用了结果集缓存的数据库不会删除缓存的结果。
Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
(2)权限
要求具有 DB_OWNER 固定服务器角色中的成员资格。
(三)不缓存哪些内容
对数据库启用结果集缓存后,在缓存填满之前将缓存所有查询的结果,但以下查询除外:
- 带有内置函数或运行时表达式的查询,这些表达式为非确定性表达式,即使基表的数据或查询中没有更改。 例如,DateTime.Now()、GetDate()。
- 使用用户定义的函数的查询
- 使用启用了行级安全性或列级安全性的表的查询
- 其返回数据中的行大小超过 64KB 的查询
- 返回大数据(>10GB)的查询
备注
- 某些非确定性函数和运行时表达式对相同数据的重复查询来说可以是确定性。 例如,ROW_NUMBER()。
- 如果查询结果集中的行顺序/序列对应用程序逻辑很重要,请在查询中使用 ORDER BY。
- 如果 ORDER BY 列中的数据不是独一无二的,则无论是启用还是禁用结果集缓存,都不能保证 ORDER BY 列中值相同的行的行顺序。
重要
创建结果集缓存以及从缓存中检索数据的操作在专用 SQL 池实例的控制节点上进行。 当结果集缓存处于打开状态时,运行返回大型结果集(例如,>1GB)的查询可能会导致控制节点上带宽限制较高,并降低实例上的整体查询响应速度。 这些查询通常在数据浏览或 ETL 操作过程中使用。 若要避免对控制节点造成压力并导致性能问题,用户应在运行此类查询之前关闭数据库的结果集缓存。
此查询的运行持续时间以针对某个查询执行结果集缓存操作所需的时间为宜:
SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id = <'request_id'>;
下面是在禁用结果集缓存的情况上执行的某个查询的示例输出。
下面是在启用结果集缓存的情况上执行的某个查询的示例输出。
(四)何时使用缓存结果
如果满足以下所有要求,则会对查询重复使用缓存结果集:
- 运行查询的用户有权访问该查询中引用的所有表。
- 新查询与生成结果集缓存的前一查询之间完全匹配。
- 从中生成缓存结果集的表中未发生任何数据或架构更改。
运行以下命令可以检查某个查询是否已执行并出现结果缓存命中或未命中情况。 result_cache_hit 列对缓存命中返回 1,对缓存失误返回 0,而对未使用结果集缓存的原因,则返回负值。 有关详细信息,请检查 sys.dm_pdw_exec_requests
。
SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>
(五)管理缓存结果
每个数据库的结果集缓存最大大小为 1 TB。 当基础查询数据更改时,缓存的结果将自动失效。
缓存逐出由专用 SQL 池按照以下计划自动管理:
- 尚未使用结果集或已失效(每 48 小时执行一次)。
- 当结果集缓存接近最大大小时。
用户可以使用以下选项之一手动清空整个结果集缓存:
- 对数据库禁用结果集缓存功能
- 连接到数据库后运行 DBCC DROPRESULTSETCACHE
暂停数据库不会清空缓存结果集。
Azure Synapse Analytics (Azure SQL DW)性能优化指南(4)——使用结果集缓存优化性能相关推荐
- Azure Synapse Analytics(Azure SQL DW) 性能优化指南(2)——使用具体化视图优化性能(上)
目录 (一)前言 (二)具体化视图与标准视图 1. 两者的定义上区别 2. 具体化视图创建方式 (1)语法 (2)参数 (3)注解 (4)示例 (三)使用具体化视图的优点 (四)常见方案 1. 需要提 ...
- Azure Synapse Analytics (Azure SQL DW)性能优化指南(1)——使用有序聚集列存储索引优化性能
目录 (一)前言 (二)有序与无序聚集列存储索引 (三)查询性能 (四)数据加载性能 (五)减少段重叠 (六)在大型表中创建有序 CCI (六)实战案例 A. 检查有序列和序号: B. 若要更改列序号 ...
- 浅谈用KUSTO查询语言(KQL)在Azure Synapse Analytics(Azure SQL DW)审计某DB账号的操作记录
目录 (一)前言 (二)实际案列 1. 背景说明: 2. 操作步骤 (1)打开Portal (2)搜索"监视器" (3)点击左侧选项卡中的"日志" (4)在新的 ...
- Azure Synapse Analytics(Azure SQL DW)中建表语句的注意事项
目录 (一)前言 (二)建表语法 (三)参数说明 1. 列选项 2. 表结构选项 3. 表分发选项 4. 表分区选项 (四)实例 1. 列的示例 (1) 指定一个列排序规则 (2) 指定列的 DEFA ...
- Azure Synapse Analytics简介第1部分:什么是Azure Synapse Analytics?
目录 数据摄取 Azure Data Lake Storage Gen2 数据探索.训练和服务 数据查询服务 Azure Synapse Studio Azure Synapse Notebooks ...
- Azure Synapse Analytics简介第3部分:数据科学和商业智能
目录 Power BI集成 Azure机器学习集成 聚合不同的数据源样式 Azure Synapse Analytics中的机器学习功能 结论 在这里,我们讨论并展示了如何使用Azure Synaps ...
- BO 4.3支持微软的Azure Synapse Analytics 吗?
微软的Azure Synapse Analytics原名Azure SQL Data Warehouse(以下简称Synapse),是微软推出的一项将企业数据仓库和大数据分析结合在一起按需付费的集成分 ...
- 【网课平台】Day16.项目优化:压测、加缓存优化与分布式锁
文章目录 一.压力测试 1.优化需求 2.性能指标 3.安装Jmeter 4.压力测试 5.优化日志 二.缓存优化 1.给接口加Redis缓存 2.缓存穿透 3.解决缓存穿透 4.缓存雪崩 5.缓存击 ...
- win10 固态nvm优化_同步进行:NVM缓存优化指南
win10 固态nvm优化 阿里巴巴缓存技术团队的最佳实践,如何将非易失性内存(NVM)最佳地部署到生产环境 有效的数据存储对于任何计算任务都是必不可少的,但是当您运行一个为数十亿消费者服务的电子商务 ...
最新文章
- java 注解 demo_JAVA语言注解概念使用及Demo讲解
- 去中心化钱包CoinU下载教程(如何下载C)
- flask找不到css_Flask干货:访问数据库——Flask-SQLAlchemy初始化
- update语句中使用子查询
- mysqli mysql的区别_phpmysqli和mysql区别详解
- JSK-115 单独的数字(二)【位运算】
- java中是值传递引用传递_Java是按值传递而不是按引用传递
- 接口 与 抽象类 区别
- Thinkphp仿众图网图片素材下载站源码+自适应手机端
- 期权定价Python实现
- 操作系统 | 银行家算法
- 华为路由器怎么配置DNS?
- System.out简单解释
- Win10系统电脑连接打印机的操作方法教学
- 戏说CAD开发 最简单角度看CAD软件
- X的N次方求解——pow(x,n)实现
- Libgdx slg游戏进程记录
- java蓝桥杯练习 拉马车
- C++的反思(知乎精华)
- Android实现ListView的A-Z字母排序和过滤搜索功能
热门文章
- # Python+SQLite## 医院住院信息管理软件
- gitlab rpm包安装方法
- python中如何打印阶梯_python 阶梯图
- Node-Sass报错,安装失败等问题
- 【讨论】怎么处理工作中的杂事?
- Revit内建模型的基础教学分享
- linux远程登录maridb,linux – 无法使用phpMyAdmin登录到远程MariaDB服务器,但在shell中工作...
- 互联网晚报 | 11/21 星期一 | 31省平均工资发布;​九城不排除重新接盘暴雪魔兽世界;iPhone14Pro发货再次延期...
- C语言有bool类型吗
- VUE3 reactive与toRefs函数