如何查询SQLServer某进程当前正在执行或其最近一次执行的SQL语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查询SQLServer某进程当前正在执行或其最近一次执行的SQL语句相关的知识,希望对你有一定的参考价值。
SELECTc.session_id, c.net_transport, c.encrypt_option,
c.auth_scheme, s.host_name, s.program_name,
s.client_interface_name, s.login_name, s.nt_domain,
s.nt_user_name, s.original_login_name, c.connect_time,
s.login_time,q.text
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
cross apply fn_get_sql(most_recent_sql_handle) q
where条件自己写
参考技术A oracle中 v$session 里的sql_address, sql_hash_value 可以连到v$sqlarea 的address, hash_value. 这样就可以看到所有当前的session和它们在执行什么, 已经所执行sql的状况。Java如何查看某一Java进程中,当前有多少线程正在执行?
- 我们先看一个最古老的多线程实现的服务端
public class SocketThread { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(9889); while (true) { Socket client = serverSocket.accept(); new Thread(() -> { try { System.out.println("client port :" + client.getPort()); InputStream inputStream = client.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); while (true) { System.out.println(bufferedReader.readLine()); } } catch (IOException e) { e.printStackTrace(); } }).start(); } } }
strace指令查看:
- 我们用【strace】指令检测一下:
-o:输出 到某个路径
-ff: 抓取这个程序所有线程
[root@bogon thread]# strace -ff -o /root/data/thread-group/ooxx java SocketThread //程序对内核有没有发生什么系统调用
然后可以再thread-group目录中看到线程详情:
jps进行查看
- 首先用【jps】指令查看一下进程详情:
[root@bogon thread-group]# jps 12485 Jps 12475 Loop
- 然后我们进入【Loop】进程,继续深入:
[root@bogon thread-group]# cd /proc/12475 [root@bogon 12475]# ls attr comm fd map_files net pagemap schedstat statm wchan autogroup coredump_filter fdinfo maps ns patch_state sessionid status auxv cpuset gid_map mem numa_maps personality setgroups syscall cgroup cwd io mountinfo oom_adj projid_map smaps task clear_refs environ limits mounts oom_score root stack timers cmdline exe loginuid mountstats oom_score_adj sched stat uid_map
1》然后我们进入【task】目录,可以看到线程详情:
[root@bogon 12475]# cd task/ [root@bogon task]# ls 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 [root@bogon task]# ll total 0 dr-xr-xr-x. 7 root root 0 May 27 10:08 12475 dr-xr-xr-x. 7 root root 0 May 27 10:08 12476 dr-xr-xr-x. 7 root root 0 May 27 10:08 12477 dr-xr-xr-x. 7 root root 0 May 27 10:08 12478 dr-xr-xr-x. 7 root root 0 May 27 10:08 12479 dr-xr-xr-x. 7 root root 0 May 27 10:08 12480 dr-xr-xr-x. 7 root root 0 May 27 10:08 12481 dr-xr-xr-x. 7 root root 0 May 27 10:08 12482 dr-xr-xr-x. 7 root root 0 May 27 10:08 12483 dr-xr-xr-x. 7 root root 0 May 27 10:08 12484
2》也可以进入【fd】目录
以数字为文件描述符名字的文件
- 我们新开一个界面,可以用【nc】模拟一次客户端请求:
[root@bogon ~]# nc 192.168.33.10 9889
此时可以看到连接情况的变化:
服务端会打印出客户端连接进入的信息(此处我重新连了一下,所以和上述端口会产生不一致):
1》客户端发送:
2》服务端接收:
以上是关于如何查询SQLServer某进程当前正在执行或其最近一次执行的SQL语句的主要内容,如果未能解决你的问题,请参考以下文章
Java如何查看某一Java进程中,当前有多少线程正在执行?
SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划