我目前正在浏览《Pro SQL Server 2019 管理:现代 DBA 指南》,发现一件事让我有些困惑。
在第 5 章:配置实例中,有关最小和最大服务器内存的部分(第 139-140 页)说:
在许多环境中,您可能希望为最小和最大服务器内存提供相同的值。这将避免 SQL Server 动态管理其保留的内存量的开销。
但是,如果您有多个实例,则动态内存管理可能会有所帮助,以便在任何给定时间具有最重工作负载的实例可以消耗最多的资源。
...假设您有一个实例并且没有其他应用程序(例如 SSIS 包)在服务器上运行,您通常会将最小和最大内存设置设置为
- 内存 - 2 GB
- (内存/8)* 7
然而,“为最小和最大服务器内存提供相同的值”的建议与文档相矛盾,文档说:
不建议将最大服务器内存 (MB) 和最小服务器内存 (MB) 设置为相同或接近相同的值。
在什么情况下最好将最大服务器内存和最小服务器内存设置为相同的值?
或者我对建议有什么误解?
我有具有树结构的表(由hierarchyid
列定义),我想选择特定记录的所有后代。为此,我正在使用hiearchyid.IsDescendantOf()
方法。
我预计,由于我不进行简单的比较,但我正在执行操作(在本例中我调用该IsDescendantOf()
方法),那么我将得到一些带有索引扫描等的可怕执行计划。
然而,SQL Server 将其优化为漂亮的小索引查找。
我很困惑为什么以及如何。
CLR 类型上的调用方法通常会被优化吗?我假设 SQL Server 将 CLR 类型视为不透明的黑匣子,因此无法发挥其魔力。(因为它也无法在本机 SQL 函数上执行此操作。)
或者这仅适用于该特定方法?(由于这些hieararchyid
值是按深度优先排序的,因此我只需通过比较就可以获得类似的结果。)
演示:
CREATE TABLE dbo.HierarchyExample (
Id INT PRIMARY KEY,
Hieararchy HIERARCHYID NOT NULL
);
INSERT INTO dbo.HierarchyExample(Id, Hieararchy)
VALUES
(1, hierarchyid::Parse('/1/')),
(2, hierarchyid::Parse('/1/1/')),
(3, hierarchyid::Parse('/1/2/')),
(4, hierarchyid::Parse('/1/3/')),
(5, hierarchyid::Parse('/1/3/1/')),
(6, hierarchyid::Parse('/1/3/2/')),
(7, hierarchyid::Parse('/1/3/3/')),
(8, hierarchyid::Parse('/1/4/')),
(9, hierarchyid::Parse('/1/4/1/')),
(10, hierarchyid::Parse('/1/4/2/'));
CREATE INDEX IX_HierarchyExample_Hierarchy
ON dbo.HierarchyExample (Hieararchy);
SELECT descendant.*
FROM HierarchyExample ancestor
INNER JOIN HierarchyExample descendant
ON …
Run Code Online (Sandbox Code Playgroud) 系统视图sys.dm_db_index_usage_stats
有几个列反映系统查询对索引的使用情况。但是,这是什么意思?为什么系统要查询我的表?
该文档不是特别有帮助:
栏目名称 | 数据类型 | 描述 |
---|---|---|
系统搜索 | 大整数 | 系统查询的查找次数。 |
系统扫描 | 大整数 | 系统查询的扫描次数。 |
系统查找 | 大整数 | 系统查询的查找次数。 |
系统升级 | 大整数 | 系统查询的更新次数。 |