数据库 数仓_数仓是什么

数据库 数仓_数仓是什么摘要:通常在运维监控出现CPU使用率较高、P80/P95指标较高、慢SQL数量上升等现象,或者业务出现超时报错时,优先应排查是否出现慢SQL。 本文分享自华为云社区《GaussDB慢SQL常见定位处理

教你处理数仓慢SQL常见定位问题

摘要:通常在运维监控出现CPU使用率较高、P80/P95指标较高、慢SQL数量上升等现象,或者业务出现超时报错时,优先应排查是否出现慢SQL。

本文分享自华为云社区《GaussDB慢SQL常见定位处理手段》,作者:酷哥。

关键指标

通常在运维监控出现CPU使用率较高、P80/P95指标较高、慢SQL数量上升等现象,或者业务出现超时报错时,优先应排查是否出现慢SQL。

定位慢SQL手段

实时慢SQL查询

查询当前执行时间TOP10的SQL,识别长时间未结束的SQL后可以手动中止。

select
    a.pid,
    a.sessionid,
    a.datname,
    a.usename,
    a.application_name,
    a.client_addr,
    a.xact_start,
    a.query_start,
    (now() - a.query_start)::text as query_runtime,
    a.unique_sql_id,
    w.wait_status,
    w.wait_event,
    w.locktag,
    w.lockmode,
    w.block_sessionid,
    a.query
from
    pg_stat_activity a join
    pg_thread_wait_status w on
    a.sessionid = w.sessionid
where
    a.pid <> pg_backend_pid()
    and a.state = "active"
    and a.client_addr is not null
order by
    query_runtime desc;

根据查询结果,如果是等待锁,可以结合锁等待信息进一步分析,其他情况可以根据unique_query_id关联WDR报告、statement视图进一步分析慢的根因。

历史慢SQL查询

思路:根据CPU、慢SQL等监控指标,定位慢SQL出现的时间范围,通过以下几种方式进一步分析。

整体运行情况分析:WDR报告

通过导出对应时间段的WDR报告,可以分析耗时较长的SQL,WDR报告生成方法参见产品文档。

单次执行情况分析:statement_history

statement_history记录了执行时间超过阈值(log_min_duration_statement,默认3 s)的详细SQL信息,包含计划生成时间、执行时间、锁等待时间等信息,其中部分信息与参数track_stmt_stat_level设置的级别(默认为”OFF,L0″)有关。 设置参数track_stmt_stat_level=”OFF,L1″后,statement_history中可以记录计划信息、锁等待时间等信息。 必须在postgres库内查询,根据时间段查询慢SQL(按照执行时间排序)

SELECT
  *,
  finish_time - start_time as run_time
FROM
  dbe_perf.statement_history
WHERE
  start_time > "2022-07-08 18:00:00"
   AND start_time < "2022-07-08 19:00:00"
   -- 根据unique_query_id可以过滤出特定的查询
   -- AND unique_query_id = 123456
ORDER BY
  run_time desc;

单个Query运行情况分析:statement

statement记录了SQL按照unique_sql_id归一化的执行信息,包括执行次数、总的执行时间、访问数据量、内存使用等信息。 根据unique_sql_id查询历史执行信息

SELECT
  *,
  total_elapse_time / n_calls as avg_elapse_time
FROM
  dbe_perf.statement
WHERE
  unique_query_id = 123456;

动态抓取执行信息(计划、锁等待时间等)

为了避免对生产环境产生影响,可以动态抓取SQL执行信息

-- 抓取指定unique_sql_id的全量SQL信息
-- 示例:unique_sql_id为3267119089,全量SQL级别为L2,相当于track_stmt_stat_level="L2,off"
select * from dynamic_func_control("LOCAL", "STMT", "TRACK", "{"3267119089", "L2"}");
-- 打开之后,查询statement_history
-- 关闭抓取,清理
select * from dynamic_func_control("LOCAL", "STMT", "UNTRACK", "{"3267119089"}");
select * from dynamic_func_control("LOCAL", "STMT", "LIST", "{}");
select * from dynamic_func_control("LOCAL", "STMT", "CLEAN", "{}");

查看会话快照信息

SELECT
*
FROM
dbe_perf.local_active_session
WHERE
query_start_time > "2022-07-08 18:00:00"
AND query_start_time < "2022-07-08 19:00:00"
AND unique_query ilike "%%";

常用处理手段

中止慢SQL

根据查询结果中的pid和sessionid,使用函数中止查询

select pg_terminate_session(pid,sessionid);

优化SQL

更新统计信息

查看统计信息

select * from pg_stats where tablename = "表名";
select * from pg_stats where tablename = "表名" and attname = "列名";

更新统计信息

analyze tablename;

手动设置列的distinct值(该字段不同值的数量,选择率 ~ 总行数/distinct值)

ALTER TABLE tablename ALTER COLUMN colname SET (n_distinct = 实际值);
analyze tablename; -- analyze执行后生效
​
-- 取消设置
ALTER TABLE tablename ALTER COLUMN colname RESET (n_distinct);
analyze tablename; -- analyze执行后生效

使用hint优化计划

  • 通过分析慢SQL的计划,可以使用hint进行调整,openGaussc常用的hint包括:
  • Join顺序的Hint,语法示例:/+ leading((t1 t2))/
  • Join方式的Hint,语法示例:/+ nestloop(t1 t2)/
  • Scan方式的Hint,语法示例:/+ indexscan(t1 index1)/
  • 优化器GUC参数的Hint,语法示例:/+ set(param value)/
  • Custom Plan和Generic Plan选择的Hint,语法示例:/+ use_cplan/
  • ….

修改参数

根据慢SQL分析结论,可以考虑修改GUC参数,但是修改参数同时也会影响其他查询的计划,属于高风险操作。

其他

对于整体执行慢,可以通过分析WDR报告中TOP等待事件,进一步优化。

 

点击关注,第一时间了解华为云新鲜技术~

原文地址:https://www.cnblogs.com/huaweiyun/archive/2022/10/28/16835126.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4605.html

(0)
上一篇 2023-06-12
下一篇 2023-06-12

相关推荐

  • Python构建用户界面的秘诀

    Python构建用户界面的秘诀Python作为一种简洁、易读、易于维护且可扩展的编程语言,越来越受到广大开发者的青睐。然而,Python工程师在构建用户界面时常常遇到一些问题。由于Python自带的GUI库功能较为简单,因此有必要探究一些其他的Python工具和库,以便更好地发挥Python的强大优势并实现更复杂的用户界面。

    2023-12-29
    103
  • MongoDB Security[通俗易懂]

    MongoDB Security[通俗易懂]1. Security MongoDB提供了一系列的保护措施,以保护它自身安全: 启用访问控制并实行身份验证 MongoDB支持多种身份认证机制,默认的认证机制是SCRAM 配置基于角色的访问控制 首

    2023-05-04
    134
  • Oracle GoldenGate现在支持从 PostgreSQL 捕获数据[亲测有效]

    Oracle GoldenGate现在支持从 PostgreSQL 捕获数据[亲测有效]Oracle GoldenGate PostgreSQL Capture支持已全面上市。自GoldenGate 12.1发行以来,已支持GoldenGate PostgreSQL交付(投递),并允许…

    2023-03-21
    153
  • Lamda 表达式里的Join和GroupJoin的区别, 如何实现SQL的Left Join效果

    Lamda 表达式里的Join和GroupJoin的区别, 如何实现SQL的Left Join效果例如,可以将产品表与产品类别表相联接,得到产品名称和与其相对应的类别名称 db.Products .Join ( db.Categories, p => p.CategoryID, c => c.C…

    2023-04-06
    150
  • Python模块——NumPy:高效处理数组和矩阵运算

    Python模块——NumPy:高效处理数组和矩阵运算NumPy是Python中最重要的第三方库之一,特别是在数据科学和机器学习领域。它是一个开源的Python扩展库,支持高性能的科学计算和数据分析。一般来说,使用Python进行数据分析一定会用到NumPy。其中的ndarray类型,是在Python中进行大规模数值运算的必备类型,它可以提高Python数值运算的效率。

    2024-04-05
    68
  • Python str函数详解:字符串的常用操作

    Python str函数详解:字符串的常用操作Python作为一种强大的编程语言,提供了大量的字符串操作方法,便于我们对字符串进行各种处理。在本篇文章中,我们将详细介绍Python str函数的常用操作。

    2024-04-03
    70
  • mysql隐式类型转换_隐式转换规则

    mysql隐式类型转换_隐式转换规则我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态。 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。 本来是一个平静而美好的下午,其

    2023-06-14
    137
  • 字节跳动陈志锋主要管_字节跳动难进吗

    字节跳动陈志锋主要管_字节跳动难进吗导读: 作为一种基础的数据结构,图数据的应用场景无处不在,如社交、风控、搜广推、生物信息学中的蛋白质分析等。如何高效地对海量的图数据进行存储、查询、计算及分析,是当前业界热门的方向。本文将介绍字节跳动

    2023-05-22
    164

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注