背景

昨天有现场同事碰到了一个现象,一条简单的update语句运行缓慢。单独运行没有问题,在特定时间运行就会非常缓慢,怀疑是业务系统特殊逻辑导致数据库有阻塞引发的update语句慢的现象。故此现场同事收集了对应时间的kwr报告。

报告分析

首先从dbtime看数据库并没有达到满负荷,依然有上升空间。

我们看到blocks读和写都很高,平均每秒读4MB左右,同时tuple return20亿左右,这也为下面的分析埋下伏笔,看来和io脱不了干系。

等待事件是我们必须关注的,很明显等待事件BufFileRead占了dbtime21.9%。

这时候我们先停下来,先把等待事件BufFileRead/BufFileWrite 好好看一下。这个两个等待事件表示当,内存空间不够时(work_mem),需要将超过内存的内容写入到临时文件。当写临时文件时,等待BufFileWrite,当读取时,等待 BufFileRead

这个等待事件含义从临时文件中读取数据到指定buffer。这个等待事件是创建临时文件时产生,这就无疑和排序操作有关。所以能想到相关联的两个参数是work_mem and maintenance_work_mem,稍后我们可以从kwr中看到这两个参数的设置。

当查询需要比work_mem参数设置值更多的memory时候,通常为这些情况:

  • Hash joins
  • ORDER BY clause
  • GROUP BY clause
  • DISTINCT
  • Window functions
  • CREATE TABLE AS SELECT
  • Materialized view refresh

避免等待事件方法:

1,避免笛卡尔积,没有创建索引等。

2,如果重复行很多,避免使用distinct,开销很大。

3,增加work_mem内存大小,注意这个参数针对单个会话内存而言,小心并发会消耗大量内存。并发数*work_mem。同时注意不管内存增加多大,保证即使业务高峰也要给操作系统留够充足内存。

4,如果有必要 尽量不要设置过大的max_connections,保证并发数量。

分析到这里看起来和临时文件有关系。接下来我们继续看kwr报告。

从IO profile这里看出temp block 读写量巨大。由此可见报告开头的IO量消耗在了这里。

前台进程基本都等待在IO上

这几个sql明显消耗很长时间,建议看一下执行计划是否有不合理的地方。

消耗IO时间长的语句需要关注下

看来导致等待事件的源头找到了 ,是这个排名第一的占用temp blocks的语句

总结

通过以上分析,数据库可以调整的地方为增加work_mem,当前设置10MB。

可以调整log_temp_files以避免产生大量临时文件。

关注topsql语句的性能,查看topsql执行计划。抓出消耗temp blocks最多的语句。总之需要避免产生如此多的临时文件,规避IO引起的性能问题.

KingbaseES KWR中等待事件分析案例的更多相关文章

  1. DBA_Oracle Event等待事件分析(概念)

    2014-12-18 Created By BaoXinjian

  2. latch - undo global data等待事件分析

    一环境跑压力测试的时候,标题所述等待事件在top N中.不用查,也知道是因为undo竞争的事件. 根据metalink文档解释,是由于undo表空间不足引起的. This implies that s ...

  3. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题

    之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能: ...

  4. Oracle中常见的33个等待事件小结

    在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件的相关信息     一. 等待事件的相关知识 1.1 等待事件主要可 ...

  5. SQL Server等待事件—RESOURCE_SEMAPHORE_QUERY_COMPILE

    等待事件介绍 关于等待事件RESOURCE_SEMAPHORE_QUERY_COMPILE,官方的介绍如下: Occurs when the number of concurrent query co ...

  6. ORACLE 常见等待事件

    一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...

  7. Oracle等待事件之等待事件详解

    一. 等待事件的相关知识:1.1 等待事件主要可以分为两类:即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...

  8. 【Oracle】等待事件详细内容

    一.等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不 ...

  9. Oracle 常见的33个等待事件

    一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指Oracle正等待某种工作,在诊断和优化数据库的时 ...

  10. RAC性能分析 - gc buffer busy acquire 等待事件

    概述---------------------gc buffer busy是RAC数据库中常见的等待事件,11g开始gc buffer  busy分为gc buffer busy acquire和gc ...

随机推荐

  1. Vuex和普通全局对象

    Vuex中的核心方法 Vuex是一个专为Vue.js应用程序开发的状态管理模式,其采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.每一个Vuex应用的核心就是 ...

  2. OCP试题解析之053-16 MEMORY_TARGET

    16.Setting which of the following initialization parameters enables Automatic Memory Management? A. ...

  3. nginx实战笔记

    1.添加一个虚拟机 /usr/local/nginx/sbin ./nginx -t nginx: [warn] conflicting server name "localhost&quo ...

  4. virtualapp启动流程源码分析

    virtualapp启动流程分析 1. 首先是启动本身,执行Vpp 的attachBaseContext @Override protected void attachBaseContext(Cont ...

  5. File.delete()和Files.delete(Path path)的区别

    文件删除时可以选择File.delete()和Files.delete(Path path),这两个方法到底有什么区别呢? //删除暂存的pdfFile file =new File(pdfFilen ...

  6. RK3588开发笔记(二):基于方案商提供sdk搭建引入mpp和sdk的宿主机交叉编译Qt5.12.10环境

    前言   上一篇项目已经构建好了Qt,板子接入mipi屏幕也跑起来了,Qt也能正常运行了,现在需要接入定制开发的sdk,sdk中使用了硬解码等资源涉及到bsp的mpp,所以下一步就是引入mpp和sdk ...

  7. 网络通信部分之bs/cs架构,网络概念,osi七层网络模型,TCP/UDP协议---day27

    1.网络开发的两大架构c/s,b/s # ### 1.网络开发的两大架构 a文件 -> b文件 借助c文件 a文件和b文件进行数据交流,借助c文件中转数据 a文件把数据放在c文件中,b文件从c文 ...

  8. 【Azure 应用服务】App Service For Linux 环境中,如何从App Service中获取GitHub私有库(Private Repos)的Deploy Key(RSA key)呢?

    问题描述 为App Service For Linux配置CI/CD,源代码在GitHub私有库中,在发布时候报错 Cannot find SourceControlToken with name B ...

  9. Program type already present: com.xxx

    该错误是由于工程中存在着相同的类导致(包名与类名都相同),有可能是不同的依赖中有着相同的类,全局搜索该类便可得知

  10. [QT] 记录一些使用技巧

    目录 概述 打开窗口 弹出消息框 判断文件存在 获取时间 获取子控件 TableWidget设置不可编辑 QT QString判断纯数字 Qt 保存文件选择器 读写ini 概述 最近花了好几天的时间编 ...