我的问题是Postgres的目标,但是答案可能来自任何数据库背景。

我的假设正确:

  • 磁盘有固定的块大小吗?
  • RAID控制器可以具有不同的块大小吗?一个RAID块是否会分为多个真实的磁盘块?
  • 文件系统还具有独立块大小,它再次分为RAID块大小?
  • Postgres与固定的8K块一起工作。在此处如何发生映射到文件系统块大小? Postgres 8K块是否由文件系统批量批处理?

设置系统时,最好将所有块处于8K时?还是设置不是实际的?我还想知道,如果崩溃,某些“错误”块大小设置是否可能危害数据完整性?也许如果必须将8K块拆分到多个磁盘块上?

还是没有什么可以批处理的,因此我在定义的块大小之间的每一个不匹配的情况下就松开了磁盘空间?

有帮助吗?

解决方案

磁盘扇区

磁盘具有固定的扇形大小,通常在某些现代磁盘上有512个字节或4096个字节;这些磁盘还将具有模拟512个字节扇区的模式。磁盘将具有不同扇区的轨道;距离磁盘外部更近的轨道有更多的扇区,因为它们具有更大的空间,可容纳给定的位密度。这可以更有效地使用磁盘空间;通常,轨道将在现代磁盘上具有大约1,000 512个字节扇区。

某些格式结构还可以包括校正SECOTR中的错误纠正信息,这些信息在磁盘中表现出自身的低水平格式,并用520或528个字节扇区进行了。在这种情况下,该扇区仍然具有512个字节的用户数据。尽管I5OS(IBM Iseries)和各种SAN控制器都可以直接支持Windows和Linux。

通常,扇区/头/轨道被翻译成逻辑块地址;由于具有向后兼容性的历史问题,操作系统(尤其是在IDE和SATA磁盘上)看到的几何形状(头部X扇区X轨道)通常与其物理结构无关。

突袭条纹的大小

RAID控制器可以使用条纹(例如RAID-5或RAID-10)具有阵列的条纹大小。如果数组具有(用于Exmaple)128K条纹,则每个磁盘具有128K连续数据,然后下一个数据集在下一个磁盘上。通常,您可以期望每次旋转的磁盘大约获得一条条纹,因此条纹的大小可能会影响某些工作负载的性能。

分区对齐

磁盘分区可能会或可能不会与RAID条纹完全对齐,如果不对齐,则可能会由于分裂读数而导致性能降解。某些系统(例如Windows 2008服务器)将自动配置分区以与磁盘音量条纹大小对齐。某些(例如Windows 2003服务器)不会,您必须使用确实支持条纹对齐的分区实用程序来确保它们的功能。

文件系统块大小

文件系统将以一定尺寸的块分配存储块。通常,这是可配置的 - 例如,NTFS将支持(IIRC)4K至64K的分配单位。分区和文件系统块的未对准可能会导致单个文件系统块读取以生成多个磁盘访问,如果文件系统块正确与RAID条纹对齐,则只需要一个磁盘访问。

数据库块大小

该数据库将在表格中分配一些给定的块大小中的空间或索引。对于SQL Server,这是8K,而8K是许多系统的默认值。在某些系统(例如Oracle)上,这是可配置的,在PostgreSQL上,这是一个构建时间选项。在大多数系统上,通常在较大的块中分配给桌子,在这些块中分配了块。

文件系统和数据分配块的未对准可以生成单个块写入的多个I/OS,这可以驱动性能惩罚。

我/o块

通常,DBMS实际上将在多个街区的块中进行I/O。例如,在SQL Server上,只有8个块的块,总共64K)。在Oracle上,这是可配置的。对PostgreSQL文档的随意检查没有揭示有关PostgreSQL是否执行此操作的具体描述,因此我不确定其在此平台上的工作方式。

当I/O块大于文件系统块大小或用RAID Stripe边界未对准DB的磁盘写入会导致多个磁盘写入,从而产生性能惩罚。

磁盘空间使用情况

没有浪费磁盘空间 - 数据库I/O将使用磁盘上的一个或多个物理I/O操作完成 - 但是错误调谐的I/O可以生成无效率,从而减慢数据库。必须对齐的主要内容是:

  • RAID条纹和分区 - 分区应以突袭条纹边界开始。

  • 文件系统I/O分配和RAID条纹/分区边界 - RAID Stripe边界必须与文件系统分配单元对齐,并且应该是文件系统分配单位大小的倍数。

  • 磁盘写入大小和文件系统分配单位大小。数据库I/O操作与文件系统I/O操作之间应该有1:1的关系。

未对准并没有产生比以前存在的更大的数据完整性问题。数据库和文件系统具有适当的机制,以确保文件系统opearations为原子。通常,磁盘崩溃会导致数据丢失,但不会导致数据完整性问题。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top