Skip to main content

Qué significa la excepción

ClickHouse lanza la excepción Too many parts cuando un INSERT superaría un límite configurado sobre la cantidad de partes de datos activas en una tabla MergeTree. La excepción suele incluir el mensaje Merges are processing significantly slower than inserts. Cada INSERT síncrono crea al menos una parte de datos. Si una inserción contiene filas para varios valores de partición, ClickHouse puede crear una parte para cada partición afectada. Las fusiones en segundo plano combinan las partes más pequeñas en partes más grandes, pero si se crean partes nuevas más rápido de lo que ClickHouse puede fusionarlas, la cantidad de partes activas sigue aumentando. La excepción puede activarse por cualquiera de estos ajustes:

Diagnosticar la causa

Use la siguiente consulta para encontrar las particiones con más partes activas:
Para comprobar el límite para toda la tabla que aplica max_parts_in_total, cuente todas las partes activas de la tabla:
Las causas más comunes incluyen:
  • Inserciones síncronas frecuentes y pequeñas.
  • Una clave de particionamiento de alta cardinalidad.
  • Inserciones que contienen filas para muchos valores de partición.
  • Fusiones en segundo plano que no pueden seguir el ritmo debido a un throughput de almacenamiento limitado, espacio libre en disco insuficiente u otra contención de recursos.
Puede inspeccionar las fusiones que se están ejecutando actualmente en system.merges y revisar los registros del servidor para detectar errores de fusión.

Resolver la excepción

Inserciones síncronas por lotes

Agrupe las filas en el client antes de insertarlas. Cada lote debe contener al menos 1.000 filas y, de forma ideal, entre 10.000 y 100.000 filas. Procure realizar aproximadamente un INSERT síncrono por segundo. Un menor número de inserciones, pero de mayor tamaño, crea menos partes y reduce el trabajo que requieren las fusiones en segundo plano.

Usar inserciones asíncronas

Si la agrupación por lotes en el cliente no resulta práctica, use inserciones asíncronas para que ClickHouse pueda agrupar los datos entrantes en el servidor:
Mantén wait_for_async_insert = 1 para que ClickHouse confirme una inserción solo una vez que los datos se hayan escrito correctamente.

Revise la clave de particionamiento

Use una clave de particionamiento de baja cardinalidad y evite particionar por valores como identificadores de usuario o de petición. ClickHouse fusiona partes solo dentro de la misma partición, por lo que un gran número de particiones impide que las fusiones sean eficaces. Para obtener más información, consulte Elegir una clave de particionamiento.

Investigar cuellos de botella de merge

Si las inserciones ya están correctamente agrupadas en lotes, compruebe el rendimiento del almacenamiento, el espacio en disco disponible y las tareas en segundo plano concurrentes. La tasa de merge depende del sistema de almacenamiento, del motor de la tabla, de la clave de ordenación, de la compresión y de la capacidad disponible de CPU y E/S.

Evite aumentar los límites de partes como solución principal

Aumentar parts_to_throw_insert o max_parts_in_total no soluciona la causa de la creación excesiva de partes. Los límites más altos pueden retrasar la excepción, pero también pueden aumentar la sobrecarga del sistema de archivos y los metadatos, y reducir el rendimiento de las consultas. Cambie estos ajustes solo después de identificar la causa y confirmar que el sistema tiene capacidad suficiente.

Verifique la recuperación

Ejecute de nuevo la consulta de diagnóstico después de cambiar la estrategia de inserción o el esquema de particionado. El número de partes activas debería estabilizarse y luego disminuir a medida que las fusiones en segundo plano se ponen al día. Continúe supervisando los fallos de inserción, el espacio libre en disco y system.merges hasta que se haya resuelto la acumulación pendiente.
Última modificación el 14 de agosto de 2026