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 ...
随机推荐
- OpenStack调度器
计算使用 nova-scheduler 服务来确定如何调度计算请求 默认配置中,调度程序会考虑以下所有条件的主机: 位于请求的可用区 (map_az_to_placement_aggregate) 放 ...
- layui切换select选项事件
说明 我们经常遇到表单上面选择不同的下拉选项需要触发函数去完成一些业务逻辑,比如我这个地方根据所选商品查询它底下明细的数量,并展示. 效果演示 代码 <!--选择商品--> <div ...
- 小程序中用css修改svg的颜色
记一下(#^.^#) <div class="svg"> <img src="./firefox-logo.svg" class=" ...
- 【Azure 云服务】云服务(经典) 迁移至云服务(外延支持) 的相关疑问
问题描述 根据微软官方文档说明,云服务(经典)已弃用.所以关于它有以下的一些疑问: 一:迁移时候的停机时间问题? 二:云服务(经典) 与 云服务(外延支持) 的区别是什么? 三:注意事项有那些呢?如 ...
- 【Azure 应用服务】在Azure App Service多实例的情况下,如何在应用中通过代码获取到实例名(Instance ID)呢?
问题描述 App Service开启多实例后,如何在代码中获取当前请求所真实到达的实例ID(Instance ID)呢? 问题答案 App Service 通过 环境变量的方式 显示的输出实例ID等信 ...
- 标准差为什么除以n-1
参考:https://blog.csdn.net/qian2213762498/article/details/80558018 如果要测量中国人的平均身高,假设为μ,通常会随机取假设10000人,求 ...
- 【Flink入门修炼】2-2 Flink State 状态
什么是状态?状态有什么作用? 如果你来设计,对于一个流式服务,如何根据不断输入的数据计算呢? 又如何做故障恢复呢? 一.为什么要管理状态 流计算不像批计算,数据是持续流入的,而不是一个确定的数据集.在 ...
- 【思维题、KMP】P3526 [POI2011]OKR-Periodicity 题解
P3526 [POI2011]OKR-Periodicity 题解 前言 一道非常厉害的思维题.看题解得到了一些提示搞出来了. 作为 2011 年的题还是很厉害的. 约定 定义 \(s[l,r]\) ...
- 那些年,我的Mysql学习之旅(学习笔记持续整理更新中)
MySql海量数据存储与优化 一.Mysql架构原理和存储机制 1.体系结构 2.查询缓存 3.存储引擎 存储引擎的分类 innodb:支持事务,具有支持回滚,提交,崩溃恢复等功能,事务安全 myis ...
- Python列表字典推导式
[一]语法 列表推导式可以利用列表,元组,字典,集合等数据类型,快速的生成一个特定需要的列表. 语法格式如下 [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]] [二]列表推导式 [ ...