Firebird会进行碎片整理吗?如果可以的话,像聚集索引吗?

用户名

我已经看到了几个(实际上只有几个)链接,而在有关使用Firebird进行群集的文档中却没有看到可以做到的。

然后,我针对这个问题向Firebird发出了CLUSTER命令,为月球射击了吗?,但回答者告诉我,Firebird甚至根本没有聚集索引,所以现在我真的很困惑。

Firebird是否完全以物理方式订购数据?如果是这样,是否可以通过任何键(不仅是主键)对其进行排序,并且可以打开和关闭群集/碎片整理,以便仅在停机期间执行此操作?

如果不是这样,这是否会对性能造成影响,因为将磁盘花在彼此自然应该排在一起的完全不同的行上会花费更长的时间吗?

(DB新手)

MVCC

我发现Firebird是基于MVCC的,因此直到“扫描”,实际上旧数据才被覆盖。我非常喜欢那个!

再说一次,我找不到很多东西,但是看起来很遗憾,不会根据密钥对数据进行碎片整理。

表示数据库页已进行碎片整理,但没有提供进一步的说明。

安·哈里森

Firebird不会对记录进行聚类。它被设计为避免需要聚类的问题以及聚簇索引附带的碎片问题。索引和数据分别存储在不同类型的页面上。每个数据页仅包含来自一个表的数据。记录按插入顺序,同时插入或同时插入的顺序存储,这些插入通常在单独的页面上进行。删除旧记录后,新记录将存储在它们的位置,因此新记录有时会与旧记录出现在同一页面上。

许多表使用人工主键(通常升序),该主键可能是数据库生成的序列或时间戳。这种做法导致记录以关键顺序存储,但是绝对不能保证该顺序。也不是很有趣。当主键是人工的时,大多数返回相关记录组的查询都是在辅助索引上完成的。对于聚集的记录而言,这会降低性能,因为在二级索引上的查找需要遍历两个索引,因为二级索引仅提供主索引的键,必须遍历主键才能找到数据。

关于碎片整理和空间使用的更大问题,Firebird跟踪页面上的可用空间,因此新记录将插入已删除记录的页面上。如果页面完全变空,将对其进行重新分配。数据库运行时将完成此空间管理。如您所知,Firebird使用多版本并发控制,因此当记录被更新或删除时,Firebird会创建一个新的记录版本,但会保留旧版本。提交更改之前运行的所有事务都结束后,旧记录版本将不再具有任何用途,并且Firebird会将其删除。在许多应用程序中,在运行数据库的正常过程中会删除旧版本。当交易涉及旧版本的记录时,Firebird检查旧版本的状态,如果没有正在运行的事务可以读取它们,则将其删除。有一个名为“清除”的功能,可以系统地删除不需要的旧记录版本。Sweep可以与其他数据库活动同时运行,尽管最好在数据库负载较低时安排它。因此,在运行一次扫描之前,什么都不会删除是不正确的。

最好的祝福,

安·哈里森

与Firebird合作的人,它的前身经历了一段令人尴尬的长时间

顺便说一句-作为第一个回答的人,Firebird确实在页面上保留了空间,以便记录的旧版本与新版本保持在同一页面上。它不是固定的空间百分比,而是页面上每条记录存储16个字节,因此具有非常短记录的表的页面具有更多的可用空间,而具有长记录的表的页面具有更少的可用空间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SSD会碎片化吗?如果是的话,这是一个问题吗?

我可以简化这段代码吗?如果可以的话

Hibernate不会找回孩子,但是如果存在的话仍然会坚持吗?

我可以在此PC上使用ubuntu吗?如果可以的话,这是什么错误?

如果我已经有了PyCharm,是否需要安装Anaconda?如果可以的话,他们会一起工作吗?

我可以在 VSCode 中创建自定义片段吗?如果可能的话如何?

你能在 Java/C# 中返回 super 吗?(如果可以的话会有用吗?)

您可以将@ViewChild()或类似内容与路由器插座一起使用吗?如果可以的话

如果可以的话,我们可以从Iron Python脚本文件中获取SQL Server数据吗?

我想让多个单击事件同时开始启动计时器,这可能吗?如果可以的话

我可以使用.deb文件在OpenSUSE中安装软件吗?如果可能的话,怎么办?

(Windows 7)禁用defragsvc会完全禁用碎片整理吗?

我可以在PC(x86,x64)平台上使用Tensorflow lite或Tensorflow mobile吗?如果可以的话,是否已针对此平台进行了推理优化?

如果可以的话,从$ @删除参数

在生产环境中创建非聚集索引-如果花费太长时间可以取消吗?

python会重新计算我的字符串吗?如果有的话(以foo.string中的名称表示名称中的名称):

如果可能的话,总是喜欢std :: string(ptr,size)而不是std :: string(first,last)吗?

这是troff文件吗?如果是的话,如何将其转换为ps或pdf?

深度对象在JavaScript中运行缓慢吗?如果有的话

如果有的话,ansi控件会为已打印的文本重新着色吗?

如果不是的话,修改yii.activeForm.js是个好主意吗?

如果可能的话,你能让我的代码更干净吗?

频繁的碎片整理会损坏硬盘吗?

IntelliJ IDEA建议用foreach方法替换循环。如果可能的话,我应该总是这样做吗?

btrfs —对具有只读快照的子卷进行碎片整理有危险吗?

CentOS 7-禁用THP后,可以安全地忽略碎片整理设置吗?

用最简单的话,有人可以向我解释JAAS,JACC和JASPIC之间的区别吗?

如果可能的话加倍

HDD上是否存在/ dev,/ run和/ sys(如果可以的话,如果可以进行有意义的跟踪,则在什么位置)?