问题标签 [database-fragmentation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
38662 浏览

sql-server - 在不添加/删除聚集索引的情况下减少 SQL Server 表碎片?

我有一个大型数据库(90GB 数据,70GB 索引),在过去的一年里一直在缓慢增长,增长/变化不仅导致了索引的大量内部碎片,还导致了表本身的大量内部碎片。

解决(大量)非常碎片化的索引很容易——REORGANIZE 或 REBUILD 会处理这个问题,这取决于它们的碎片程度——但我能找到的关于清理实际表碎片的唯一建议是添加一个聚集索引到桌子上。之后我会立即删除它,因为我不希望表上的聚集索引继续前进,但是在没有聚集索引的情况下还有另一种方法吗?执行此操作的“DBCC”命令?

谢谢你的帮助。

0 投票
3 回答
1582 浏览

sql-server - 顺序引导和碎片

我试图了解顺序 guid 如何比常规 guid 表现更好。

是否因为使用常规 guid,索引使用 guid 的最后一个字节进行排序?由于它是随机的,它会导致很多碎片和页面拆分,因为它经常会将数据移动到另一个页面以插入新数据?

顺序 guid 正弦它是顺序的,它会导致更少的页面拆分和碎片吗?

我的理解正确吗?

如果有人可以对这个主题有更多的了解,我将不胜感激。

谢谢

编辑:

顺序 guid = NEWSEQUENTIALID(),

常规 guid = NEWID()

0 投票
3 回答
23864 浏览

database - 如何知道 Oracle 中的表是否有碎片?

我有一张桌子,它似乎占用了比它需要的更多的空间。有人建议我将数据复制到新表并重命名新表和旧表以交换它们。如何确认当前表是否实际上是碎片化的?如何估计或计算包含相同数据的新表的新大小?

0 投票
3 回答
1997 浏览

sql-server - SQL Server 插入性能

假设我有下表,列上有一个聚集索引(比如,a)

然后,假设我有两组非常多的行要插入到表中。

  • 第一组)值顺序增加(即,{0,1,2,3,4,5,6,7,8,9,..., 999999997, 999999998, 99999999})
  • 第二组)值按顺序递减(即 {99999999,999999998,999999997, ..., 3,2,1,0}

你认为在第一组和第二组中插入值会有性能差异吗?如果是这样,为什么?

谢谢

0 投票
1 回答
5829 浏览

database - DDBMS中的初级水平碎片-简单谓词的完整性

“简单谓词的一个重要方面是它们的完整性;另一个是它们的最小性。simple predicates Pr:当且仅当每个应用程序访问属于根据定义的任何最小项片段的任何元组的概率相等时,一组被称为完整的到Pr2.

Example:-PROJ考虑 中给出的关系碎片Example 3.8。如果唯一访问的应用程序PROJ要根据位置访问元组,则集合是完整的,因为每个片段PROJi (Example 3.8)的每个元组都具有相同的被访问概率。但是,如果有第二个应用程序只访问那些项目元组budget is less than or equal to $200,000,那么Pr is not complete. 由于第二个应用程序,每个元组中的一些元组PROJi具有更高的被访问概率。为了使谓词集完整,我们需要添加(BUDGET <= 200000, BUDGET > 200000) to Pr

Pr = {LOC=“Montreal”, LOC=“New York”, LOC=“Paris”, BUDGET <= 200000, BUDGET > 200000}"

我上传了图 3.3 和示例 3.8:-

图 3.3

示例 3.8

现在我不明白我怎么知道 Pr 是否完整

那么“每个应用程序访问属于任何 minterm 片段的任何元组的概率相等”是什么意思

任何示例如何计算每个应用程序访问任何元组的相等概率?

0 投票
2 回答
361 浏览

c# - 数据库索引碎片:保存为字符串的顺序 GUID 工作正常,但未保存为 GUID

我们使用 GUID 作为主键(我们知道这不是一个好的选择,但现在不能更改)。众所周知,我们的索引很快就会碎片化。另一个用顺序 ID 替换 GUID 的好选择。为此,代码更改如下:

旧代码:

新代码:

这里Sequential是我们的静态类,它使用“rpcrt4.dll”创建 Sequential GUID。但是我们的测试表明,这也不适用于索引,并且它们会变得支离破碎。

另一个有趣的发现是,如果我们将这个顺序 GUID 保存为数据库中的“字符串”,那么我们的索引就不会变得碎片化。

现在我有以下疑问/疑问:

  1. 当我们将相同的字符串保存为“String”和“GUID”时,为什么服务器的行为会有所不同?根据我到目前为止的理解,它在内部将所有内容保存为字符串。

  2. 有什么方法可以配置数据库来说明这一点,将我们的 GUID 视为字符串并平等对待它们?

以下是环境的一些细节:

  • 数据库:SQLExpress
  • 编码语言:C#
  • 不能依赖服务器生成密钥,我们必须从代码本身设置密钥。

即使不是确切的解决方案,也欢迎提供解决方案的指针。

0 投票
1 回答
1088 浏览

sql-server - SQL Server 碎片问题

我的数据库中有几个表(用户和用户记录)变得非常分散(如 99%)并导致整个数据库以及因此网站停止运行。

UserRecord 有点像该用户在某个时间点的快照。用户就像该用户的主记录。用户有 0 到多个 UserRecords。User 有大约 100 万行,UserRecord 有大约 250 万行。这些表被写入很多。他们也被大量搜索。他们都会变得更大。严重碎片化的主要索引是 User 和 UserRecord 表的主键。

数据库是 SQL Server 2012,我使用的是实体框架,我没有使用任何存储过程。

表看起来像这样:

(不确定 List 这是否重要,但我认为我会包括它,因为它与 User_Record 相关。List 有 0 到许多 UserRecords)

我们设置了一个 SQL 维护计划来每天重建索引,这确实有帮助,但有时还不够。

一位朋友建议我们使用两个数据库,一个用于读取,一个用于写入,我们将读取 DB 与写入 DB 同步。并不是说我对此一无所知,但我看到这个解决方案的第一个问题是我们在查看网站时需要最新数据。例如,如果我们更新用户详细信息或用户记录,我们希望立即看到这些更改。

有没有人对我如何在它失控之前解决这个问题有任何建议?

0 投票
1 回答
528 浏览

oracle - 我们在使用闪存盘存储时还需要担心行碎片吗?

在为表列选择 char/varchar2 数据类型、在表上发布批量删除/插入/更新时,行碎片始终是您需要考虑的事情,因为 Oracle 试图将新数据放入打开的空闲空间中,因此碎片可能开始变慢在某个时候降低性能。现在一切都随着闪存盘而改变了,因为闪存技术本身的原因,数据被尽可能多地碎片化写入。如果我们不需要关心碎片,那么它就会破坏对表数据存储问题和数据碎片的整体理解。有没有人有将数据库文件存储在闪存磁盘上的经验?ssd磁盘的碎片问题是否消失了?

0 投票
2 回答
1776 浏览

mysql - 创建“存档表”

我有一个包含任务的表。一些任务是新的或正在进行的阶段,但其他任务将处于归档阶段,这意味着它们已被处理并且返回它们的机会很低。我在想将存档的任务放在具有相同架构的单独表中是明智的,这样对“当前”任务的查询会更快。这样对吗?

如果我需要使用存档任务(例如在搜索结果中)显示当前任务,我将简单地合并这两个表。

这是正确的吗?我会获得任何好处吗?我认为这被称为水平碎片。我正在使用 MySQL InnoDB。为了真正获得性能优势,我是否需要对表定义做一些额外的事情?

谢谢!!

0 投票
1 回答
2026 浏览

sql-server - 高范围扫描碎片,但低逻辑扫描碎片

我还是 SQL Server 的新手,当我在表上运行 DBCC SHOWCONTIG 时,它显示逻辑扫描碎片并不大,但范围扫描碎片大,这让我有点困惑。

MSDN 上的手册中可以看出,一个是关于页面碎片的,另一个是关于范围的。还有其他区别吗?逻辑扫描碎片率低,而扩展扫描碎片率仍然很高?

另外,当我们谈论“外部碎片”时,更多的是与结果中的“逻辑扫描碎片”或SHOWCONTIG结果中的“扩展扫描碎片”有关?

非常感谢任何答案。