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 ...
随机推荐
- Springboot AOP介绍及实战
介绍 AOP是Aspect Oriented Program的首字母缩写:这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 主要用于非核心业务处理,比如权限,日志 ...
- Error parsing HTTP request header--400 bad request
问题描述: JSP中通过form post方式请求URL传入json格式参数报错: 信息: Error parsing HTTP request header Note: further occur ...
- 如何编写一个 PowerShell 脚本
PowerShell 脚本的后缀是 .ps1 前提: ps1 脚本可以帮忙我们快速修改文件内容,还不需要调用文件的底层 api,方便快捷 在编写 CMakeLists 时发现,项目不能够很好的使用 v ...
- LayUI样式优化
如下是LayUI框架中页面元素的CSS优化样式: /* 表单输入框宽度 */ .layui-form-item .layui-input-inline { width: 295px; } /* 下拉框 ...
- 程序员应具备的PS基本技能(三):程序员使用PSD源文件切图
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 【Azure Developer】使用 Azure Python 查看 Azure 所有的 Alert rule
问题描述 在Azure Alert 门户中,可以列举出所有Azure资源的Alert rule信息,如下图: 如果像通过Python SDK来获取所有的Alert Rule,有什么可以参考的代码吗? ...
- 连接微信群、Slack 和 GitHub:社区开放沟通的基础设施搭建
NebulaGraph 社区如何构建工具让 Slack.WeChat 中宝贵的群聊讨论同步到公共领域. 要开放,不要封闭 在开源社区中,开放的一个重要意义是社区内的沟通.讨论应该是透明.包容并且方便所 ...
- rt_snprintf()是什么
在c++中snprintf()函数的解释 1,函数原型: int snprintf(char* dest_str,size_t size,const char* format,...); 2,功能 将 ...
- 【XInput】手柄模拟鼠标运作之 .NET P/Invoke 和 UWP-API 方案
上一篇中,老周简单肤浅地介绍了 XInput API 的使用,并模拟了鼠标移动,左.右键单击和滚轮.本篇,咱们用 .NET 代码来完成相同的效果. 说起来也是倒霉,博文写了一半,电脑忽然断电了.不知道 ...
- 深入解析ASP.NET Core MVC应用的模块化设计[上篇]
ASP.NET Core MVC的"模块化"设计使我们可以构成应用的基本单元Controller定义在任意的模块(程序集)中,并在运行时动态加载和卸载.这种为"飞行中的飞 ...