“数据库系统基础”,第 3 版。由 Elmasri 和 Navathe 撰写,第 136 页说:
“我们可以根据其中一个字段的值对磁盘上文件的记录进行物理排序 [...]”
这种“物理排序”怎么可能强制执行,尤其是在碎片化方面?大多数数据库使用系统调用将其数据存储在操作系统的文件系统中,只有极少数能够进行原始 i/o。
“数据库系统基础”,第 3 版。由 Elmasri 和 Navathe 撰写,第 136 页说:
“我们可以根据其中一个字段的值对磁盘上文件的记录进行物理排序 [...]”
这种“物理排序”怎么可能强制执行,尤其是在碎片化方面?大多数数据库使用系统调用将其数据存储在操作系统的文件系统中,只有极少数能够进行原始 i/o。
我有一个 2 TB 的数据库,并且数据驱动器已填满。我的网络团队无法扩展驱动器,也无法提供另一个驱动器,以便可以将辅助数据文件指向该驱动器。我的问题是辅助驱动器是否可以指向网络共享。
除了不小心用数据填充整个 C:\ 驱动器外,使用 OS 驱动器存储数据文件还有其他注意事项吗?大多数答案只是“不要这样做”,但我想知道任何技术原因。
我在开发盒上,很乐意用风险换取额外的 IO 带宽。我正在重构一个非常大的数据集,它生成 10-20 GB(简单)日志文件和大量 tempdb 活动。我正在将源只读表移动到 sata SSD。我想为重构的数据、tempdb 数据和日志文件提供自己的 NVMe,但这意味着其中一个将与操作系统共享 C:。
根据这个博客:
SQL Server 联机丛书将IO_COMPLETION定义为“在等待 I/O 操作完成时发生。这种等待类型通常代表非数据页 I/O。数据页 I/O完成等待显示为PAGEIOLATCH_等待”*
非数据页 IO 是什么意思?或者我们可以换一种方式提出这个问题:“……等待 I/O 操作完成”实际上是什么
意思?
优化搜索查询的一种可能方法是(a)将保留与不同关系/表对应的数据的记录存储在(b)相同文件→相同页面上。这样,可以更快地执行连接。
我用谷歌搜索了“共同聚类”,结果出人意料地很少。例如,我在 MySQL 上一无所获。有迹象表明甲骨文在 10 年前就提供了它。联合集群仍然是优化的有效选择吗?
例如,您有两个关系/表:
Employee (id, name, age, did)
Department (did, location)
您优化的典型查询可能如下所示:
SELECT E.name,
E.age
FROM Employee E,
Department D
WHERE E.age = 25
AND E.did = D.did;
如果您有 1,000,000 名员工并且他们都在 25 到 27 之间,那么最好的连接方法可能是排序合并连接或哈希连接 - 两者都需要多次扫描。
现在,如果您将多个关系/表的元组/行存储在同一页面上,您可以使用一种物理结构,将具有某个特定的部门与did
具有相同的员工一起存储did
。请注意,这种连接需要更少的 IO。
我试图了解由执行某些表扫描的 SQL 语句引起的缓存流失。
假设 LRU 缓存,如果某物正在执行 400K 逻辑 IO,则流过多少内存(IO 块大小 * 逻辑 IO)。
此外,我正在尝试了解如何获取关于顶级逻辑 IO SQL 语句的报告并获取这些产生的物理 IO。
鉴于此,我的问题是:
我们为 TempDB 安装了专用的 SSD 驱动器
TempDB 是否受益于 64 Kb 单元大小,或者可以保留默认的 4 Kb?
此时我们无法更改这些卷的分配单元大小。因此,如果我们将 TempDB SSD 驱动器更改为 64 Kb,并且数据/日志卷保持为 4 Kb,是否会对 SQL Server 造成任何麻烦?
我的直觉是比在 PostgreSQL 中用作列的默认值时NULL
占用更少的空间。{}
ARRAY[]
我对么?