Ahorra disco en Clickhouse
ClickHouse es un sistema de gestión de bases de datos (DBMS) de código abierto, altamente escalable y orientado a columnas, diseñado específicamente para el análisis de datos en tiempo real. Desarrollado por Yandex, el gigante tecnológico ruso, ClickHouse fue lanzado en 2016 y desde entonces ha ganado una gran popularidad en la comunidad de análisis de datos.
Sobre las tablas de sistema
Clickhouse cuenta con tablas de sistema de dos tipos. La mayor parte de las tablas son virtuales y no persisten a disco, estas no pueden ser modificadas o eliminadas. Por otro lado, están las tablas de log, que terminan con el sufijo _log. Estas tablas generadas por el engine MergeTree sí se escriben en disco y no son utilizadas por el propio Clickhouse. Únicamente existen para ser consultadas por el usuario y por lo tanto pueden ser modificadas e incluso eliminadas. Es importante tener en cuenta que si simplemente se eliminan, se crearán automáticamente de nuevo a los pocos segundos. Podemos ver también varias versiones de la misma tabla con un número como sufijo y esto se debe a que se generan nuevas cuando se lleva a cabo una actualización.
Existen las siguiente tablas de log:
- metric_log: Contiene un histórico de métricas de las tablas system.metrics y system.events, que se escribe periódicamente a disco.
- query_log: Contiene información de las queries ejecutadas, como por ejemplo hora de inicio, duración y mensajes de error. La información de estas trazas puede ser personalizada.
- query_thread_log: Contiene información sobre los threads que ejecutan las queries como por ejemplo nombre del thread, hora de inicio y duración.
- trace_log: Contiene stack traces.
- part_log: Contiene información de eventos data parts en tablas MergeTree, como añadir o mergeo de datos. Esta tabla no está habilitada por defecto.
- crash_log: Contiene stack traces para errores fatales. Esta tabla no existe por defecto y solo se crea cuando ocurre un error de estas características.
- text_log: Contiene trazas de log. El nivel de trazas que se registran en esta tabla se configura mediante testx_log.level.
- backup_log: Contiene trazas con información sobre operaciones de backup y restore.
Por defecto estas tablas no eliminan la información guardada en ellas y por lo tanto, dependiendo de la configuración y el uso que se haga de la base de datos, puede llevar a una alta ocupación de disco. A continuación os explicamos cómo evitar que esto ocurra.
Configurar TTL
Como hemos indicado anteriormente, las tablas de log no son utilizadas por el propio Clickhouse y son solo para consulta por parte del usuario, por lo tanto pueden ser configuradas a nuestro gusto. En este caso configuramos la tabla query_log para tener una retención de solo 7 días.
<clickhouse>
<query_log>
<database>system</database>
<table>query_log</table>
<ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
</query_log>
</clickhouse>
Es importante tener en cuenta que esta configuración no modifica el particionado mensual de la tabla. Tras este cambio es necesario reiniciar Clickhouse para que tenga efecto y, en caso de estar utilizando versión 20 o inferior, renombrar la tabla.
Deshabilitar
Aunque no es recomendable, también es posible deshabilitar completamente estas tablas de sistema. En el caso de query_log se haría de la siguiente manera:
<clickhouse>
<profiles>
<default>
<log_queries>0</log_queries>
<log_query_threads>0</log_query_threads>
</default>
</profiles>
</clickhouse>
Como hemos visto, Clickhouse es un potente sistema de gestión de base de datos, pero a su vez es complejo y hay que conocerlo correctamente para hacer una configuración eficiente del mismo. En próximos artículos hablaremos más en profundidad sobre configuraciones para sacarle el máximo partido.