KingbaseES KWR中等待事件分析案例
背景
昨天有现场同事碰到了一个现象,一条简单的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 BYclauseGROUP BYclauseDISTINCT- 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中等待事件分析案例的更多相关文章
- DBA_Oracle Event等待事件分析(概念)
2014-12-18 Created By BaoXinjian
- latch - undo global data等待事件分析
一环境跑压力测试的时候,标题所述等待事件在top N中.不用查,也知道是因为undo竞争的事件. 根据metalink文档解释,是由于undo表空间不足引起的. This implies that s ...
- Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能: ...
- Oracle中常见的33个等待事件小结
在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件的相关信息 一. 等待事件的相关知识 1.1 等待事件主要可 ...
- SQL Server等待事件—RESOURCE_SEMAPHORE_QUERY_COMPILE
等待事件介绍 关于等待事件RESOURCE_SEMAPHORE_QUERY_COMPILE,官方的介绍如下: Occurs when the number of concurrent query co ...
- ORACLE 常见等待事件
一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...
- Oracle等待事件之等待事件详解
一. 等待事件的相关知识:1.1 等待事件主要可以分为两类:即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...
- 【Oracle】等待事件详细内容
一.等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不 ...
- Oracle 常见的33个等待事件
一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指Oracle正等待某种工作,在诊断和优化数据库的时 ...
- RAC性能分析 - gc buffer busy acquire 等待事件
概述---------------------gc buffer busy是RAC数据库中常见的等待事件,11g开始gc buffer busy分为gc buffer busy acquire和gc ...
随机推荐
- maven打包更改版本号
引入依赖 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-mave ...
- F - Subarrays题解
F - Subarrays 题意:给你一个序列,问这个序列里有多少个子串的和能被k整除. 思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串. 因为求的是前缀和,所以取模后 ...
- 图片Base64编码解码的优缺点及应用场景分析
随着互联网的迅猛发展,图片在网页和移动应用中的使用越来越广泛.而图片的传输和加载往往是网页性能的瓶颈之一.为了解决这一问题,图片Base64编码与解码技术应运而生.本文将介绍图片Base64相互转换的 ...
- ADVMP 三代壳(vmp加固)原理分析(加壳流程)
开源项目地址 https://github.com/chago/ADVMP vmp 加固可以说时各大加固厂商的拳头产品了,这个开源项目虽然不是十分完善,让我们可以一览vmp加固的原理,是十分好的学习资 ...
- 【ACM专项练习#02】整行字符串、输入vector、打印图形、处理n组数据以及链表操作等
输入整行字符串 平均绩点 题目描述 每门课的成绩分为A.B.C.D.F五个等级,为了计算平均绩点,规定A.B.C.D.F分别代表4分.3分.2分.1分.0分. 输入 有多组测试样例.每组输入数据占一行 ...
- 在写dockerfile时替换国内源
众所周知,Debian是linux发行版中官方源最难用的一个,这个傻逼源让我再构建docker镜像时卡了很久. 那么能不能替换构建dockerfile时使用的源呢?显然是可以的 在与Docke ...
- 微信小程序:接手项目,修bug
好家伙, 问题描述如下: 小程序主界面,选择快速上传会议记录 选择快速 其中,没有2022-2023第二学期,所以,新的会议记录无法上传 于是,我自愿修复这个bug 由于我们没有产品文档 我只能由 ...
- mongo重启、远程连接
1.查看当前mongo启动进程 ps -ef | grep mongo 2.修改mongo启动远程连接配制文件 vi /etc/mongod.conf 将 bind_ip=127.0.0.1 这一行注 ...
- Nebula Importer 数据导入实践
本文首发于 Nebula Graph Community 公众号 前言 Nebula 目前作为较为成熟的产品,已经有着很丰富的生态.数据导入的维度而言就已经提供了多种选择.有大而全的Nebula Ex ...
- Go和TinyGo
Go和TinyGo是两种不同的Go语言编译器,它们之间有以下几点区别: 目标平台: Go:Go语言编译器主要面向通用计算机平台,如Windows.Linux.macOS等. TinyGo:TinyGo ...