A medida que se agregan, borran o actualizan filas de la tabla, el motor de columnas no actualiza los datos del almacén de columnas de forma inmediata. En cambio, marca el contenido afectado en el almacén de columnas como no válido, y las consultas se planifican y ejecutan con datos orientados a columnas del almacén de columnas y datos orientados a filas del almacenamiento en caché de filas y del almacenamiento de base de datos.
Con el tiempo, a medida que más y más bloques de datos dejan de ser válidos, las mejoras en el rendimiento de las consultas que proporciona el motor de columnas se reducen hasta el punto en que los datos de columnas deben actualizarse para recuperar las mejoras en el rendimiento de las consultas. Cuando se alcanza este umbral de actualización, el motor de columnas usa un trabajo en segundo plano para actualizar los datos no válidos en el almacén de columnas. De forma predeterminada, el motor de columnas usa un umbral de actualización del 50%, lo que indica que un contenido determinado en el almacén de columnas se marca para su actualización cuando el 50% de su contenido deja de ser válido. Puedes cambiar este umbral de actualización para ajustar la sobrecarga de la actualización automática y, posiblemente, obtener un mejor rendimiento continuo de las consultas para la carga de trabajo de tu aplicación.
Además, puedes actualizar manualmente las tablas y los índices de ScaNN que se cargan en el motor de columnas en cualquier momento. Por lo general, realizas una actualización manual cuando quieres que los cambios en una tabla se reflejen en el almacén de columnas lo antes posible después de realizar los cambios.
Verifica el porcentaje de datos no válidos
A medida que tu aplicación agrega, borra o actualiza filas en una tabla, el motor de columnas marca los datos afectados en el almacén de columnas como no válidos. Puedes verificar el porcentaje de datos no válidos para tus tablas y vistas materializadas consultando la vista g_columnar_relations. Esto te ayuda a decidir si necesitas realizar una actualización manual o ajustar el umbral de actualización automática.
Para ver el porcentaje de invalidación de todas las relaciones en el almacén de columnas, ejecuta la siguiente consulta:
SELECT relation_name, invalid_percentage FROM g_columnar_relations;
Para verificar el porcentaje de invalidación de una tabla específica, agrega una cláusula WHERE a la consulta.
SELECT relation_name,
CASE
WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
ELSE 0.0
END AS invalid_block_percentage
FROM
g_columnar_relations;
WHERE
relation_name = TABLE_NAME
Reemplaza TABLE_NAME por una cadena que contenga el nombre de la tabla o la vista materializada. Si el recurso está en un esquema que no es public, especifica el nombre del esquema con el formato
SCHEMA_NAME.TABLE_NAME—por ejemplo, myschema.mytable.
Para verificar el porcentaje de invalidación de un índice específico, agrega una cláusula WHERE a la consulta.
SELECT index_name,
CASE
WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
ELSE 0.0
END AS invalid_block_percentage
FROM
g_columnar_indexes;
WHERE
index_name = INDEX_NAME
Cambia el umbral de actualización del motor de columnas
Para cambiar el umbral de actualización del motor de columnas, debes modificar el valor de la marca de la base de datos google_columnar_engine.refresh_threshold_percentage.
ALTER SYSTEM SET google_columnar_engine.refresh_threshold_percentage=THRESHOLD;
Reemplaza THRESHOLD por un
valor entero entre 1 y 100. Este valor especifica el porcentaje de bloques de datos en el contenido que deben dejar de ser válidos para que el contenido se marque para su actualización.
Actualiza manualmente las tablas y los índices vectoriales en el almacén de columnas
Puedes actualizar manualmente las tablas y los índices vectoriales en el motor de columnas en cualquier momento con funciones de SQL dedicadas. Los tipos de índice compatibles son ScaNN y HNSW.
Para actualizar los datos de una tabla en el motor de columnas, ejecuta la función google_columnar_engine_refresh.
SELECT google_columnar_engine_refresh(TABLE_NAME);
Reemplaza TABLE_NAME por una cadena que contenga el nombre de la tabla o la vista materializada. Si el recurso está en un esquema que no es public, especifica el nombre del esquema con el formato
SCHEMA_NAME.TABLE_NAME—por ejemplo, myschema.mytable.
Del mismo modo, para actualizar manualmente un índice vectorial en el motor de columnas, ejecuta la función google_columnar_engine_refresh_index.
SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);
Reemplaza INDEX_NAME por una cadena que contenga el nombre del índice que se actualizará.