как посмотреть sql запрос к базе, зная данные из htop ? те которые висят более часа

Для просмотра SQL-запросов, которые висят более часа, можно использовать различные инструменты в зависимости от типа базы данных. Вот несколько примеров для популярных баз данных: ### PostgreSQL 1. **Использование `pg_stat_activity`**: ```sql SELECT pid, usename, datname, state, query, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active' AND now() - query_start > interval '1 hour'; ``` 2. **Использование `pg_cancel_backend` или `pg_terminate_backend`** для остановки запросов: ```sql SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE now() - query_start > interval '1 hour'; ``` ### MySQL 1. **Использование `information_schema.processlist`**: ```sql SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist WHERE time > 3600; ``` 2. **Использование `KILL` для остановки запросов**: ```sql KILL <process_id>; ``` ### Oracle 1. **Использование `v$session` и `v$sql`**: ```sql SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, q.sql_text FROM v$session s JOIN v$sql q ON s.sql_id = q.sql_id WHERE s.status = 'ACTIVE' AND s.last_call_et > 3600; ``` ### SQL Server 1. **Использование `sys.dm_exec_requests` и `sys.dm_exec_sql_text`**: ```sql SELECT r.session_id, r.status, r.command, r.start_time, t.text FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t WHERE r.start_time < DATEADD(hour, -1, GETDATE()); ``` ### Общие шаги: 1. **Использование `htop`**: - Запустите `htop` и найдите процессы, которые висят более часа. - Запомните PID (Process ID) этих процессов. 2. **Использование базы данных**: - Подключитесь к базе данных и выполните SQL-запросы, чтобы найти запросы, которые висят более часа. - Используйте PID из `htop` для идентификации конкретных запросов. ### Пример скрипта на Python для PostgreSQL: ```python import psycopg2 # Подключение к базе данных conn = psycopg2.connect( host="localhost", database="your_database", user="your_user", password="your_password" ) # Создание курсора cur = conn.cursor() # Выполнение запроса cur.execute(""" SELECT pid, usename, datname, state, query, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active' AND now() - query_start > interval '1 hour'; """) # Получение результатов rows = cur.fetchall() # Вывод результатов for row in rows: print(row) # Закрытие курсора и соединения cur.close() conn.close() ``` Этот скрипт подключается к базе данных PostgreSQL и выполняет запрос для поиска активных запросов, которые висят более часа. Результаты выводятся на экран.