Which MogDB version and OS version was supported? [root@localhost ~]# ptk candidate mogdb-server software | version —————+———- MogDB-Server | 3.0.0 | 2.1.1 | 2.0.3 | 2.0.1…
Author: kamus
Renew Alienware Alpha R1 with Pop!_OS
Install Pop!_OS Go to Pop!_OS website, download Pop!_OS ISO Image (NVIDIA), burn into a live USB stick. Currently the latest version is Pop!_OS 22.04 LTS. You have to use a USB keyboard, press F12 when start the computer, then install Pop!_OS. The installation process is smooth forward without a single issue. Change mouse to natural…
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。