行碎片始终是您在为表列选择char/varchar2数据类型时需要考虑的事情,因为Oracle会尝试将新数据放入打开的空闲空间中,因此可能会开始碎片化,从而在表上发出批量删除/插入/更新在某个时间放慢表现。现在,随着闪存存储磁盘的发展,所有内容都发生了变化,因为由于闪存技术本身的原因,数据的写入尽可能分散。如果我们不需要关心碎片,那么它会破坏关于表格数据存储问题和数据碎片的整体理解。有没有人有将数据库文件存储在闪存存储磁盘上的经验?碎片问题是否随ssd磁盘一起消失?使用闪存存储时,我们是否仍然需要担心行碎片?
2
A
回答
4
没有像描述它的“行碎片”这样的事情,而且实际上,它决不应该驱动您选择的数据类型char
或varchar2
。您选择的数据类型应该取决于数据的性质以及它是否真的是固定宽度或可变宽度。 99.9%的时间,你应该更喜欢varchar2
。
Oracle可以读取或写入的最小单元是块。一个块通常是8k(尽管它可以小到2k或32k大)。一个块通常会存储多行数据。由于Oracle每次都必须编写整个块,因此它是否必须在块内移动数据并不重要。
在一个块中,Oracle为未来的增长保留了一定的空间。这由表格的PCTFREE
设置控制。如果您预计行数会随着时间的推移而大幅增加,那么您可以使用大型的PCTFREE
。如果您希望随着时间的推移您的行的大小将保持不变,那么您可以使用小型的PCTFREE
。您不希望调整数据类型以防止行的大小发生变化,您希望调整表的PCTFREE
以适合您所期望的任何更改。
如果Oracle的特定行的块的空间不足(例如,如果行需要增长并且设置的太小),Oracle需要将该行迁移到新块。这意味着它会在指向新块的原始块中留下指针,并将实际数据移动到新块中。这可能会导致性能问题,因为如果您正在从索引读取数据,您必须访问旧数据块和新数据块才能读取该行,具体取决于表中行的哪一部分被迁移。如果行数大于块数或行数超过255列的行,强制Oracle执行额外的I/O,但这些数据似乎并不是您关心的内容,那么您也可以获得链式行的问题。
不管存储系统如何,您都希望适当地设置表格的PCTFREE
,这样可以最大限度地减少发生的行迁移量(还有其他方法可以最大限度地减少某些转角情况下的行迁移,但是99%的时候你真的只是想正确设置PCTFREE
)。针对您要存储的数据使用适当的数据类型,不要担心行迁移会影响您选择的数据类型。
相关问题
- 1. 我们是否仍需要担心用户关闭Cookie?
- 2. 我需要担心闪存中的线程安全吗?
- 3. 是时候来不要担心内存
- 4. 使用jQuery的$ Post时,您需要担心缓存吗?
- 5. 如何发送文件而不用担心内存碎片?
- 6. 我是否需要担心Mac应用程序开发中的内存泄漏?
- 7. ,Cookie是否仍然需要?
- 8. 我需要担心IE7吗?
- 9. FlashDevelop?我是否仍然需要Flash CS
- 10. Zend \ db \ sql - prepareStatementForSqlObject - 仍然需要绑定或担心sql注入?
- 11. 我何时需要担心ActiveRecord锁定?
- 12. rails碎片缓存存储
- 13. 您是否需要担心在重新启动时清理内存
- 14. 我们是否仍然需要节点附件文件夹?
- 15. 我们是否仍然需要HTML5中的结尾斜杠?
- 16. 随着Sping的缓存支持(用于ehcache),我们是否仍然需要Hibernate二级缓存?
- 17. 如果您的网站不使用cookies,您是否仍然需要担心CSRF保护?
- 18. 即使我只关心它的流,我是否还需要存储TcpClient?
- 19. 我是否需要担心在foreach循环中的进程
- 20. 我是否需要担心阻塞任务?
- 21. 我是否需要担心字符串常量池?
- 22. 我是否仍然需要为algorithm :: join使用boost?
- 23. 为什么我们需要在ipv6中使用碎片?
- 24. 当我们使用xchg时,我们是否需要防护
- 25. 为什么碎片需要大量存储?
- 26. 使用Logstash存储在Elasticsearch中时,是否需要@timestamp字段?
- 27. 如果我使用“Local \”,是否需要担心CreateMutex的拒绝服务?
- 28. 如果我使用Google Closure,是否需要担心绝对平等?
- 29. 我需要担心我的应用程序中的时区吗?
- 30. 定位项目时存储库碎片
我猜自动段存储管理(ASSM)自动管理PCTFREE,所以在使用旧型MSSM存储类型时需要设置PCTFREE吗? – Centurion
@Centurion - No. ASSM自动处理手动段空间管理中由'PCTUSED'参数处理的内容。这两种类型的表空间都依赖于表的“PCTFREE”设置。自动管理'PCTFREE'是非常困难的,因为系统无法知道行的大小如何随时间变化 - 这只是数据建模者最初知道的。 –