Quiero hacer coincidir los ID de consulta en las tablas y vistas del sistema en Amazon Redshift.
Descripción breve
Puedes usar la columna query_id como ID de consulta para las vistas de SYS, incluida SYS_QUERY_HISTORY. Para las tablas y vistas de STL/SVL, incluida STL_QUERY, puedes usar la columna de consulta como ID de consulta. La columna de consulta identifica las consultas secundarias reescritas que Amazon Redshift genera cuando procesa la consulta original. Para obtener más información, consulta Mejora del seguimiento de los identificadores de consultas mediante las vistas de supervisión de SYS.
Resolución
Concesión de acceso a las tablas del sistema
Para hacer coincidir los ID de consulta en las tablas del sistema de Amazon Redshift, el usuario debe ser un superusuario o tener los privilegios necesarios. Para obtener información sobre cómo conceder acceso a un usuario específico, consulta Visibilidad de los datos en las tablas y vistas del sistema.
Para conceder acceso a un usuario específico y asignar un rol definido por el sistema, ejecuta el siguiente comando:
GRANT ROLE sys:monitor TO database_user;
Nota: Sustituye database_user por el usuario de la base de datos.
Correlacionar los ID de consulta
Es posible que Amazon Redshift no proporcione coincidencias exactas entre la columna query_id y la columna de consulta. Sin embargo, puedes buscar posibles coincidencias entre las tablas de SYS y STL/SVL.
Utiliza query_id de SYS para obtener el ID de consulta en STL/SVL en la siguiente consulta:
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE a.query_id = <query_id>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
Nota: Las consultas que se ejecutan solo en el nodo principal están presentes en SYS_QUERY_HISTORY, pero STL_QUERY excluye estas consultas.
Utiliza la consulta de STL/SVL para obtener el ID de consulta en SYS en la siguiente consulta:
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE b.query = <query>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
Búsqueda del historial de consultas para instrucciones SQL idénticas
El resultado de estas consultas puede ayudar a la hora de comparar diferentes ejecuciones de consultas. Para buscar consultas idénticas que se ejecutaron en momentos diferentes en SYS_QUERY_HISTORY, utiliza las siguientes consultas para recuperar el valor de user_query_hash y sus entradas correspondientes:
SELECT user_query_hash FROM sys_query_history
WHERE query_id = <query_id>;
SELECT *
FROM sys_query_history
WHERE user_query_hash = '<user_query_hash>';
Información relacionada
Flujo de trabajo de planificación y ejecución de consultas