当前位置:网站首页>Azure Synapse Analytics 性能优化指南(4)——使用结果集缓存优化性能
Azure Synapse Analytics 性能优化指南(4)——使用结果集缓存优化性能
2022-07-26 22:35:00 【zyypjc】
目录
(5)为数据库启用 Read_Committed_Snapshot 选项
(一)前言
启用结果集缓存后,专用 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 database
ALTER 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
暂停数据库不会清空缓存结果集。
边栏推荐
猜你喜欢

华测RTK采集的GPX数据如何带属性转出kml、shp进行后续的管理和分析

Kalibr calibration realsensed435i -- multi camera calibration

第二部分—C语言提高篇_8. 文件操作

SQL Basics

Easily implement seckill system with redis! (including code)

上千Tile的倾斜模型浏览提速,告别一块一块往外蹦的尴尬

Part II - C language improvement_ 7. Structure

np.transpose & np.expand_dims

Three person management of system design

华裔科学家Ashe教授对涉嫌造假的Nature论文的正面回应
随机推荐
Basic use of gateway
What are the use cases in the Internet of things industry in 2022?
告别宽表,用 DQL 成就新一代 BI
[MySQL] CentOS 7.9 installation and use mysql-5.7.39 binary version
The nature and proof of the center of gravity of [mathematics] tree
The most classic Nature paper on Alzheimer's disease is suspected of fraud
Learn various details and thoughts of chatroom implementation in Muduo
百度网址收录
力扣155题,最小栈
P5469 [noi2019] robot (Lagrange interpolation, interval DP)
Write golang simple C2 remote control based on grpc
What is Base64?
HCIA-R&S自用笔记(23)DHCP
Basic select statement
第二部分—C语言提高篇_10. 函数指针和回调函数
Why am I still writing articles on CSDN? A journey of accompanying learning.
Part II - C language improvement_ 10. Function pointer and callback function
SQL Basics
如何使用数据管道实现测试现代化
2022年物联网行业有哪些用例?