How to find the corresponding session in MogDB/openGauss from OS thread ID

诊断需求 当MogDB数据库由于某种原因占用了较大的系统负载,比如CPU占用接近100%,那么如何知道到底是数据库里的哪个会话或者哪些会话占用了资源?在Oracle数据库中,这样的问题诊断,通常都会关联 v$session, v$process, 以及操作系统top命令或者ps命令中查到的操作系统进程ID。但是MogDB本身是线程模型,在操作系统上只能看到一个进程号,那么该如何定位问题? 因为MogDB使用的是线程模型,与PostgreSQL的进程模型不同,在操作系统级别如果用lsof命令查看网络端口的接入,虽然是会看到有多个用户会话接入,但是在PID列只会显示进程ID,无法对应到线程。 如何获取线程ID 可以使用htop,打开htop界面以后,按F5进行进程树形显示,第一个PID是进程号,而树形结构下的每一行的PID都是该进程中对应的线程号。 也可以直接使用ps命令。-L参数表示显示线程,-o参数可以指定显示感兴趣的列。 comm列中显示为woker的都是用户会话的数据库端后台进程,通常占用CPU较高的会是用户会话,因此可以用grep命令来过滤只显示用户会话。 如何将操作系统线程ID跟数据库会话对应 假设在这台服务器上,线程ID=18372的线程占用了大量CPU。 在MogDB里查询pg_os_threads视图,可以获得该线程在数据库中对应的会话ID 。 pg_os_threads视图里记录了轻量级线程号和会话ID的关系,其中lwpid是操作系统线程ID,pid列是数据库会话ID。具体信息可以参考MogDB文档-PG_OS_THREADS。如果具备monadmin权限,也可以查询dbe_perf模式下的os_threads视图,信息是一样的。 找到数据库会话ID之后,就可以为所欲为了,比如可以查询dbe_perf.session_stat_activity视图来获取该会话的应用名,发起的客户端IP地址,还有该会话正在执行的SQL。 也可以查询dbe_perf.thread_wait_status视图来获取会话的当前等待事件。BTW,实际上该视图中有lwtid字段,可以直接对应到线程ID。

How to make Total Commander works with Everything and QuickLook

让Windows操作系统更好用 大多数时间我的工作是在自己的Macbook Pro里完成的,但是因为主要用于游戏的Windows配置了较大的屏幕,有时候也还是会顺手在Windows上进行工作。那么如何让Windows操作系统用起来更顺手? Total Commander是神器 Total Commander是必装的WIndows资源管理器,从转到macOS之前,我最开始用Windows的时候就一直在用Total Commander,这个老牌的资源管理器从1996年就有了,现在已经更新到了10.0版本,软件价格不到300人民币,一次性购买终身免费升级,物超所值。网络里有大量关于TC如何更有效率使用的文章,甚至有专门的TC学堂。 Everything是神器 Everything是Windows下的搜索工具,所有使用的人都震惊于其闪电般的搜索速度,Everything on Windows的搜索效率远胜Spotlight on macOS。Everything是免费软件。 QuickLook是神器 macOS下的一大方便之处就是在Finder中选中任何文件,然后按空格键,就可以快速浏览,这个使用习惯一旦形成,当Windows没有内置这个功能的时候非常别扭。幸好,有QuickLook软件可以实现该功能。QuickLook是免费且开源的软件。 如何让Total Commander和Everything及QuickLook协同工作 现在我们要实现的是,在TC窗口里,选中文件按空格,打开QuickLook进行快速浏览;按Ctrl+F快捷键(TC默认的Ctrl+F快捷键是打开连接FTP服务器的窗口,用处不大)打开Everything搜索窗口。 在TC的配置文件目录下创建usercmd.ini文件,并且设置用户命令。网上的一些教程谈及在TC主目录下创建usercmd.ini,实际上是不全面的,TC会在自己的配置文件目录下寻找所有配置,而该目录可能在TC的程序安装目录下,也可能在单独的额外目录里。在菜单栏的帮助-关于 Total Commander页面里,可以找到设置文件路径,我的TC安装,程序文件和设置文件就是在不同的目录的。 在该路径下创建usercmd.ini,TC默认安装是没有该ini文件的,需要手工创建。在该文件中增加如下内容。 其中cmd部分是填写Everything和QuickLook的安装路径,该部分需要根据自己安装路径的不同自行做修改;param就是当前的目录和文件名作为变量传入,该部分无需修改。 设置TC快捷键在菜单栏 配置-选项-其他页面,有“重新定义快捷键”部分。 下图是设置Ctrl+F快捷键,点击命令后面的放大镜图标,就可以找到之前在usercmd.ini中设置的em_Everything命令。 下图是设置空格快捷键,命令部分选择之前在usercmd.ini中设置的em_QuickLook命令。 One more thing 如果想要实现macOS里的Alfred快速启动的功能,推荐安装ueli,基本上可以复刻在Alfred中的体验。