如何根据会话查询当前和历史执行过的sql

发布时间:2021-11-29 16:18:11 作者:柒染
来源:亿速云 阅读:224
# 如何根据会话查询当前和历史执行过的SQL

## 一、实时会话SQL查询

### 1. MySQL数据库
```sql
-- 查看当前正在执行的SQL
SHOW PROCESSLIST;

-- 使用performance_schema(MySQL 5.6+)
SELECT * FROM performance_schema.events_statements_current
WHERE THREAD_ID IN (SELECT THREAD_ID FROM performance_schema.threads 
                   WHERE PROCESSLIST_ID = [连接ID]);

-- 查看完整SQL文本(需开启收集)
SELECT THREAD_ID, SQL_TEXT FROM performance_schema.events_statements_history_long
WHERE THREAD_ID = [线程ID];

2. Oracle数据库

-- 查看会话当前SQL
SELECT s.sid, s.serial#, s.sql_id, q.sql_text 
FROM v$session s
JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.sid = [会话ID];

-- 使用ASH(Active Session History)
SELECT sample_time, sql_id, sql_text FROM v$active_session_history
WHERE session_id = [会话ID] ORDER BY sample_time DESC;

3. SQL Server

-- 查看当前执行语句
SELECT t.text, s.* 
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE session_id = [SPID];

二、历史SQL查询方法

1. 审计日志分析

2. 数据库特有功能

三、最佳实践建议

  1. 权限控制:查询需要PROCESSSELECT等权限
  2. 性能影响:长期开启审计可能影响性能,建议按需启用
  3. 存储策略:历史SQL需定期归档,避免占用过多空间
  4. 工具辅助:使用Enterprise Manager、Spotlight等专业工具

提示:不同数据库版本语法可能有差异,生产环境操作前建议先在测试环境验证。 “`

推荐阅读:
  1. Oracle 历史SQL执行耗时查询
  2. 遍历sql文件和项目文件,查询表名出现过的文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

sql

上一篇:MySQL数据库目录下面的db.opt是干什么用的

下一篇:C/C++ Qt TreeWidget单层树形组件怎么应用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》