什么是GaussDB分析?

什么是GaussDB分析?

  • GaussDB分析是指对GaussDB的性能瓶颈点进行分析、通过系统资源、吞吐量、负载等因素来帮助定位和分析性能问题,使系统性能达到可接受的范围。在这个分析、调优的过程中需要综合考虑多方面因素,因此,分析人员应对系统软件架构、软硬件配置、数据库配置参数、并发控制、查询处理和数据库应用有广泛而深刻的理解。

GaussDB分析:查询最耗性能的SQL

GaussDB分析:查询最耗性能的SQL

  • GaussDB分析:使用DAS或者gsql连接实例

    GaussDB系统中有些SQL语句运行了很长时间还没有结束,这些语句会消耗很多的系统性能,请根据本章内容查询长时间运行的SQL语句,具体操作步骤如下:

  • GaussDB分析:查询系统中长时间运行的查询语句


    SELECT current_timestamp - query_start AS runtime, datname, usename, query FROM pg_stat_activity where state != 'idle' ORDER BY 1 desc;


    GaussDB分析查询后会按执行时间从长到短顺序返回查询语句列表,第一条结果就是当前系统中执行时间最长的查询语句。返回结果中包含了系统调用的SQL语句和用户执行SQL语句,请根据实际找到用户执行时间长的语句。


    若当前系统较为繁忙,可以通过限制current_timestamp - query_start大于某一阈值来查看执行时间超过此阈值的查询语句。

    SELECT query FROM pg_stat_activity WHERE current_timestamp - query_start > interval '1 days';


  • GaussDB分析:设置参数track_activities为on

    当此参数为on时,数据库系统才会收集当前活动查询的运行信息。


    SET track_activities = on;


  • GaussDB分析:查看正在运行的查询语句

    GaussDB分析:以查看视图pg_stat_activity为例:


    SELECT datname, usename, state FROM pg_stat_activity;
    datname | usename | state |
    ----------+---------+--------+
    postgres | omm | idle |
    postgres | omm | active |
    (2 rows)


    如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。如果仅需要查看非空闲的查询语句,则使用如下命令查看:


    SELECT datname, usename, state FROM pg_stat_activity WHERE state != 'idle';


  • GaussDB分析:分析长时间运行的查询语句状态

    若查询语句处于正常状态,则等待其执行完毕。若查询语句阻塞,则通过如下命令查看当前处于阻塞状态的查询语句:


    SELECT datname, usename, state, query FROM pg_stat_activity WHERE waiting = true;


    GaussDB分析查询结果中包含了当前被阻塞的查询语句,该查询语句所请求的锁资源可能被其他会话持有,正在等待持有会话释放锁资源。


    只有当查询阻塞在系统内部锁资源时,waiting字段才显示为true。尽管等待锁资源是数据库系统最常见的阻塞行为,但是在某些场景下查询也会阻塞在等待其他系统资源上,例如写文件、定时器等。但是这种情况的查询阻塞,不会在视图pg_stat_activity中体现。

GaussDB分析:分析作业是否被阻塞

GaussDB分析:分析作业是否被阻塞

  • GaussDB分析:查看阻塞的查询语句及阻塞查询的表、模式信息


    SELECT w.query as waiting_query,
    w.pid as w_pid,
    w.usename as w_user,
    l.query as locking_query,
    l.pid as l_pid,
    l.usename as l_user,
    t.schemaname || '.' || t.relname as tablename
    from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid
    and not l1.granted join pg_locks l2 on l1.relation = l2.relation
    and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid
    where w.waiting;


    该查询返回线程ID、用户信息、查询状态,以及导致阻塞的表、模式信息。

  • GaussDB分析:使用如下命令结束相应的会话


    SELECT PG_TERMINATE_BACKEND(139834762094352);


    其中,139834762094352为线程ID。显示类似如下信息,表示结束会话成功。

    PG_TERMINATE_BACKEND
    ----------------------
    t
    (1 row)


    显示类似如下信息,表示用户正在尝试结束当前会话。

    FATAL: terminating connection due to administrator command
    FATAL: terminating connection due to administrator command


GaussDB分析:分析作业是否被阻塞

GaussDB分析:分析作业是否被阻塞

  • GaussDB分析:查看阻塞的查询语句及阻塞查询的表、模式信息


    SELECT w.query as waiting_query,
    w.pid as w_pid,
    w.usename as w_user,
    l.query as locking_query,
    l.pid as l_pid,
    l.usename as l_user,
    t.schemaname || '.' || t.relname as tablename
    from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid
    and not l1.granted join pg_locks l2 on l1.relation = l2.relation
    and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid
    where w.waiting;


    该查询返回线程ID、用户信息、查询状态,以及导致阻塞的表、模式信息。

  • GaussDB分析:使用如下命令结束相应的会话


    SELECT PG_TERMINATE_BACKEND(139834762094352);


    其中,139834762094352为线程ID。显示类似如下信息,表示结束会话成功。

    PG_TERMINATE_BACKEND
    ----------------------
    t
    (1 row)


    显示类似如下信息,表示用户正在尝试结束当前会话。

    FATAL: terminating connection due to administrator command
    FATAL: terminating connection due to administrator command


GaussDB分析:参数调优建议

GaussDB分析:参数调优建议

  • GaussDB分析:参数查询

    1、track_stmt_session_slot

    作用:设置一个session缓存的最大的全量/慢SQL的数量。

    影响:缓存的SQL定期会被写入到系统表,如果业务量很大,超过这个数量语句执行将不会被跟踪,直到落盘线程将缓存语句落盘,留出空闲的空间,但不影响SQL的执行。


    2、effective_cache_size

    作用:设置节点优化器在一次单一的查询中可用的磁盘缓冲区的有效大小。设置这个参数,还要考虑的共享缓冲区以及内核的磁盘缓冲区。另外,还要考虑预计的在不同表之间的并发查询数目,因为它们将共享可用的空间。这个参数对分配的共享内存大小没有影响,它也不会使用内核磁盘缓冲,它只用于估算。数值是用磁盘页来计算的,通常每个页面是8192字节。

    取值范围:整型,1~INT_MAX,单位为8KB。

    影响:比默认值高的数值可能会导致使用索引扫描,更低的数值可能会导致选择顺序扫描。


    3、enable_stream_operator

    控制优化器对stream的使用。当该参数关闭时,可能会有大量关于计划不能下推的日志记录到日志文件中。


    4、log_min_duration_statement

    作用:当某条语句的持续时间大于或者等于特定的毫秒数时,记录每条完成语句的持续时间。设置log_min_duration_statement可以很方便地跟踪需要优化的查询语句。对于使用扩展查询协议的客户端,语法分析、绑定、执行每一步所花时间被独立记录。

    影响:设置过低的阈值可能影响负载吞吐,-1表示关闭此功能。

  • GaussDB分析:审计参数

    1、audit_system_object

    作用:该参数决定是否对数据库对象的CREATE、DROP、ALTER操作进行审计。数据库对象包括DATABASE、USER、schema、TABLE等。通过修改该配置参数的值,可以只审计需要的数据库对象的操作,在主备强制选主场景建议。

    影响:不当修改该参数会导致丢失DDL审计日志,请在客服人员指导下进行修改。


GaussDB优质文章锦集