如何查询SQLServer某进程当前正在执行或其最近一次执行的SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查询SQLServer某进程当前正在执行或其最近一次执行的SQL语句相关的知识,希望对你有一定的参考价值。

SELECT   
    c.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如何根据当前日期获得上月某一天的日期

SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

sqlserver 查询当前阻塞进程 并杀掉

SQLServer数据库之SqlServer查看表存储过程耗时查询当前进程开销较大的语句

SqlServer查看表存储过程耗时查询当前进程开销较大的语句