Comprender los tamaños de bloque

11

Mi pregunta se dirige a Postgres, pero las respuestas pueden ser lo suficientemente buenas provenientes de cualquier fondo de base de datos.

¿Son correctas mis suposiciones?

  • ¿Los discos tienen un tamaño de bloque fijo?
  • ¿El controlador RAID puede tener un tamaño de bloque diferente? ¿Un bloque RAID se divide en múltiples bloques de disco reales?
  • ¿El sistema de archivos también tiene un tamaño de bloque independiente que nuevamente se divide en el tamaño de bloque RAID?
  • Postgres funciona con bloques fijos de 8k. ¿Cómo sucede aquí la asignación al tamaño de bloque del sistema de archivos? ¿El sistema de archivos agrupa los bloques Postgres 8k?

Al configurar un sistema, ¿es mejor tener todos los bloques a 8k? ¿O la configuración no importa? También me preguntaba si alguna configuración de tamaño de bloque "incorrecta" podría poner en peligro la integridad de los datos en caso de un bloqueo. ¿Tal vez si un bloque Postgres 8k tiene que dividirse en múltiples bloques de disco?

¿O nada se agrupa y, por lo tanto, pierdo espacio en el disco con cada falta de coincidencia entre los tamaños de bloque definidos?

Franz Kafka
fuente

Respuestas:

16

Sectores de disco

Un disco tiene un tamaño de sector fijo, normalmente 512 bytes o 4096 bytes en algunos discos modernos; Estos discos también tendrán un modo en el que emularán sectores de 512 bytes. El disco tendrá pistas con diferentes números de sectores; Las pistas más cercanas al exterior del disco tienen más sectores, ya que tienen más espacio para una densidad de bits dada. Esto permite un uso más eficiente del espacio en disco; típicamente una pista tendrá algo así como 1,000 sectores de 512 bytes en un disco moderno.

Algunas estructuras de formato también pueden incluir información de corrección de errores en los secotrs, que se manifiesta en los discos formateados a bajo nivel con sectores de 520 o 528 bytes. En este caso, el sector todavía tiene 512 bytes de datos de usuario. Ni Windows ni Linux admiten esto directamente, aunque i5OS (IBM iSeries) y varios controladores SAN lo hacen.

Normalmente el sector / cabecera / pista se traduce en una dirección de bloque lógico; Debido a problemas históricos de compatibilidad con versiones anteriores, la geometría (cabezas x sectores x pistas) vista por el sistema operativo (particularmente en discos IDE y SATA) normalmente tiene poco que ver con su estructura física.

Tamaño de banda RAID

Un controlador RAID puede tener un tamaño de banda para una matriz que utiliza el trazado de bandas (por ejemplo, RAID-5 o RAID-10). Si la matriz tiene (por ejemplo) una banda de 128k, cada disco tiene 128k de datos contiguos, y luego el siguiente conjunto de datos está en el siguiente disco. Normalmente, puede esperar obtener aproximadamente una banda por revolución del disco, por lo que el tamaño de la banda puede afectar el rendimiento en ciertas cargas de trabajo.

Alineación de partición

Una partición de disco puede o no alinearse exactamente con una banda RAID, y puede causar una degradación del rendimiento debido a lecturas divididas si no está alineada. Algunos sistemas (por ejemplo, el servidor de Windows 2008) configurarán automáticamente las particiones para alinearse con los tamaños de banda del volumen del disco. Algunos (por ejemplo, el servidor de Windows 2003) no lo harán, y debe usar una utilidad de partición que admita la alineación de bandas para asegurarse de que lo hagan.

Tamaño del bloque del sistema de archivos

El sistema de archivos asignará bloques de almacenamiento en fragmentos de cierto tamaño. En general, esto es configurable; por ejemplo, NTFS admitirá unidades de asignación de (IIRC) 4K a 64K. La desalineación de las particiones y los bloques del sistema de archivos con las bandas RAID puede causar que una sola lectura del bloque del sistema de archivos genere múltiples accesos al disco donde solo sería necesario si los bloques del sistema de archivos se alinean correctamente con las bandas RAID.

Tamaño de bloque de base de datos

La base de datos asignará espacio en una tabla o índice en un tamaño de bloque determinado. En el caso de SQL Server, esto es 8K, y 8K es el valor predeterminado en muchos sistemas. En algunos sistemas como Oracle, esto es configurable, y en PostgreSQL es una opción de tiempo de compilación. En la mayoría de los sistemas, la asignación de espacio a las tablas se realiza normalmente en fragmentos más grandes, con bloques asignados dentro de esos fragmentos.

La desalineación del sistema de archivos y los bloques de asignación de datos pueden generar múltiples E / S para una sola escritura de bloque, lo que puede generar una penalización de rendimiento.

I / O Chunking

Normalmente, un DBMS hará su E / S en fragmentos de más de un bloque. Por ejemplo, en SQL Server, todas las E / S se realizan en fragmentos de 8 bloques, 64k en total). En Oracle esto es configurable. La inspección informal de los documentos de PostgreSQL no revela una descripción específica de si PostgreSQL hace esto, por lo que no estoy seguro de cómo funciona en esta plataforma.

Cuando el bloque de E / S es más grande que el tamaño del bloque del sistema de archivos o está desalineado con los límites de banda RAID, una escritura de disco desde la base de datos puede causar múltiples escrituras de disco, lo que genera una penalización de rendimiento.

Uso de espacio en disco

No se desperdicia espacio en el disco (la E / S de la base de datos utilizará una o más operaciones físicas de E / S en el disco para completar), pero la E / S ajustada incorrectamente puede generar ineficiencias que ralentizarán la base de datos. Las cosas principales que deben estar alineadas son:

  • Franjas y particiones RAID: la partición debe comenzar en un límite de banda RAID.

  • Asignación de E / S del sistema de archivos y límites de banda / división de banda: un límite de banda RAID debe alinearse con una unidad de asignación del sistema de archivos, y debe ser un múltiplo del tamaño de la unidad de asignación del sistema de archivos.

  • Tamaño de escritura del disco y tamaño de la unidad de asignación del sistema de archivos. Debe haber una relación 1: 1 entre las operaciones de E / S de la base de datos y las operaciones de E / S del sistema de archivos.

La desalineación no crea un problema de integridad de datos mayor que el que de otro modo estaría presente. La base de datos y el sistema de archivos tienen mecanismos establecidos para garantizar que las operaciones del sistema de archivos sean atómicas. En general, un bloqueo del disco provocará la pérdida de datos, pero no problemas de integridad de datos.

Preocupado por TunbridgeWells
fuente
Muy buena respuesta. Me siento mal solo por poder darte un voto positivo ...
Franz Kafka
solo una pregunta más: ¿Qué quieres decir exactamente cuando hablas de alinear? ¿Es eso un múltiplo del tamaño de bloque más pequeño? Por ejemplo, 32k está alineado con 8k? ¿O hay otros factores involucrados?
Franz Kafka
@FranzKafka: No, significa que algo (generalmente una partición de disco) comienza en una ubicación que no es un múltiplo integral de lo que debe alinearse. Por ejemplo, si tengo un tamaño de banda RAID de 128K y la partición no comienza en un múltiplo de 128K del 'bloque 0', entonces puedo tener lecturas lógicas que se dividen en dos unidades de asignación física, lo que requiere dos operaciones de lectura, lo que causa un penalización de rendimiento.
Preocupado