常用sql
SQL语句长时间运行会占用大量系统资源,用户可以通过查看事件发生的时间,占用内存大小来了解现在数据库运行状态。
- 查询事件的时间
查询事件的线程启动时间、事务启动时间、SQL启动时间以及状态变更时间。
gaussdb=# SELECT backend_start,xact_start,query_start,state_change FROM pg_stat_activity;
- 查询当前服务器的会话计数信息
gaussdb=# SELECT count(*) FROM pg_stat_activity;
- 系统级统计信息
查询当前使用内存最多的会话信息。
gaussdb=# SELECT * FROM pv_session_memory_detail() ORDER BY usedsize desc limit 10;
相关表与试图
pg_stat_activity
PG_STAT_ACTIVITY视图显示和当前用户查询相关的信息。
关于gaussdb中对象标识符-oid
-
数据库(Database):每个数据库在 PostgreSQL 中都有一个唯一的 OID。可以通过查询系统表
pg_database
中的oid
列来获取数据库的 OID。 -
模式(Schema):每个模式在 PostgreSQL 中也有一个唯一的 OID。使用系统表
pg_namespace
中的oid
列来获取模式的 OID。 -
视图(View):与之前的回答相同,视图本身没有独立的 OID,它们是基于查询结果的虚拟对象。
-
索引(Index):每个索引在 PostgreSQL 中也有一个唯一的 OID。可以通过查询系统表
pg_class
中的indexrelid
列来获取索引的 OID。 -
事务(Transaction):事务在 PostgreSQL 中没有直接的 OID,因为事务是对数据库进行一系列操作的逻辑单元,而不是独立的物理对象。事务可以使用事务标识符(Transaction ID)来标识。
-
会话(Session):会话在 PostgreSQL 中没有直接的 OID,但可以使用系统视图
pg_stat_activity
中的pid
列来标识会话。pid
列中的值是会话的进程 ID。 -
锁(Lock):锁是 PostgreSQL 中用于控制并发访问的机制,但它们没有独立的 OID。
-
函数(Function):每个函数在 PostgreSQL 中都有一个唯一的 OID,存储在系统表
pg_proc
中的oid
列中。 -
线程(Thread):在 PostgreSQL 中,线程的 OID 并不直接暴露给用户。线程是数据库内部的执行单元,通常不需要直接操作线程的 OID。
10.用户(user):用户(User)的 OID(Object ID)可以通过查询系统表 pg_authid 中的 oid 列来获取。pg_authid 表存储了数据库的角色信息,包括用户和组等。
关于线程的产生情况
- 客户端连接:当有新的客户端连接到数据库服务器时,通常会为该客户端连接生成一个新的线程。这样可以为每个客户端提供并发的数据库操作。
- 并发查询:当数据库服务器接收到多个并发查询时,可以为每个查询生成一个新的线程以并行处理这些查询。这样可以提高系统的响应性能和吞吐量。
- 后台任务:数据库服务器通常需要执行一些后台任务,例如自动备份、垃圾回收等。为了不影响正常的数据库操作,这些后台任务通常会在独立的线程中运行。
- 并行查询:某些数据库系统支持并行查询,即将一个查询分解成多个子任务并由多个线程并行执行。这样可以加快查询的执行速度。
- 多实例部署:在某些情况下,数据库服务器可能会以多实例的方式部署在同一台物理机器上。每个实例通常会有自己独立的线程池和资源,用于处理来自不同实例的并发请求。