针对数据库的性能瓶颈排查方法分为两个层次1、实例级别性能问题排查 2、语句级别性能问题排查

实例级别

实例级别性能问题排查用来分析数据库实例整体是否存在性能瓶颈,然后根据排除出的疑似问题进行实例级别参数的优化。

使用场景包括

1、压测场景下数据库整体优化

2、上线之前数据库整体调优

3、业务整体响应缓慢情况下问题排查 等

排查手段

KWR报告

KWR报告能够从整体上对数据库的健康状况进行分析,包括系统负载、等待时间、IO,内存等使用情况、top SQL等正常情况下通过KWR报告就可以对数据库整体健康状况有一个整体认知,进而指定相应调优手段

生成步骤:

\dx

Create extension sys_kwr;

建议配置参数修改之后reload 即可,无需重启数据库

track_sql = on

track_instance = on -- KWR 1.3 新增参数

track_wait_timing = on  -- 默认开启

track_counts = on  --默认开启

track_io_timing = on

track_functions = 'all'

sys_stat_statements.track = 'top'

生成快照

CREATE EXTENSION sys_kwr;

SELECT * FROM perf.create_snapshot(); -- 获得快照 1

CREATE TABLE IF NOT EXISTS t1(id int); -- 创建一个示例表

SELECT count(*) FROM t1; -- 执行一些 SQL

SELECT * FROM perf.create_snapshot(); -- 获得快照 2

SELECT * FROM perf.kwr_report(1,2); -- 生成 TEXT 版本报告

SELECT * FROM perf.kwr_report(1,2, 'html'); -- 生成 HTML 版报告

-- 生成的 KWR 报告会自动保存到 DATA 目录下的 sys_log 子目录下

KSH

sys_ksh 以每秒采样的方式进行会话和数据收集,并将采集数据放入内存的 Ringbuf 队列中 对资源消耗大建议采用临时开启方式。相较于 KWR 包括,KSH的收集频率更快,产生内容更多,所以主要是在业务相应缓慢的时间段内收集,收集完成尽快关闭。

旧版本需要单独安装sys_ksh扩展, 新版本已经集成到sys_kwr 中

V8R6B24版本使用方法

Create extension sys_kwr;

sys_kwr.collect_ksh  设置 ksh=on 需要reload不需要重启

保存于内存 Ringbuf 的数据可以通过视图 perf.session_history 查看:

SELECT * FROM perf.session_history;

其中保存于数据库的历史数据可以通过视图 perf.ksh_history 查看:

SELECT * FROM perf.ksh_history;

生成的报告可以通过 perf.ksh_report 查看:

SELECT perf.ksh_report(start_ts, duration, slot_width, write_to_file);

KDDM

KDDM 是 KingbaseES 性能自动诊断和建议的报告。它基于 KWR 快照采集的性能指标和数据库时间模型(DB Time),自动分析等待事件、IO、网络、内存和 SQL 执行时间等,给出一系列性能优化建议。通过 KDDM 报告, 能够实现数据库性能的快速调优。

CREATE EXTENSION sys_kwr;

SELECT * FROM perf.create_snapshot();

INSERT INTO t1 SELECT generate_series(1, 1000000);

SELECT * FROM perf.create_snapshot();

SELECT * FROM perf.kddm_report(1,2);

--生成到指定位置

SELECT * FROM perf.kddm_report_to_file(1, 2, '/home/test/kddm_1_2.txt');

--生成指定sql的诊断报告

SELECT * FROM perf.kddm_sql_report(1, 2, 5473583404117387630);

KDDM相对于 KWR的优势在于,针对一些性能问题它可以给出比较合理的优化建议。

KWR DIFF

KWR 报告是 Diff 报告的基础,在数据库运行过程中,通常在业务的高峰期和低谷期,或者在参数调整之后, 数据库的性能指标都会发生变化,那么分析这种变化的根因对于我们分析数据库性能,进行优化调整是非常必要的。

Diff 报告的作用就是分析两个 KWR 报告之间的差异,找出性能变化的原因或分析性能优化的效果

CREATE EXTENSION sys_kwr;

SELECT * FROM perf.create_snapshot();

CREATE TABLE t1(a int);

INSERT INTO t1 SELECT generate_series(1, 1000000);

SELECT * FROM perf.create_snapshot();

INSERT INTO t1 SELECT generate_series(1, 1000000);

SELECT * FROM perf.create_snapshot();

INSERT INTO t1 SELECT generate_series(1, 1000000);

SELECT * FROM perf.create_snapshot();

SELECT * FROM perf.kwr_diff_report_to_file(1, 2, 3, 4,'/home/test/kwr_diff_rpt_00.html');

其中:

snap_1: 生成第一份 KWR 报告的起始快照 ID

snap_2: 生成第一份 KWR 报告的结束快照 ID

snap_3: 生成第二份 KWR 报告的起始快照 ID

snap_4: 生成第二份 KWR 报告的结束快照 ID

Kbbadger

可以分析大型的日志文件。当日志文件足够长时,kbbadger 可以自动检测日志文件的格式(syslog,stderr,csvlog 或 jsonlog)。 由 kbbadger 生成的所有图表都是可缩放的并且可单独下载为 PNG 文件。另外,在生成的报告中 SQL 查询将突 出显示

相关参数要求

log_min_duration_statement = 0  --需要reload

不要开启  log_statement 参数  --默认关闭

lc_messages='en_US.UTF-8'  -必须是英文,否则无法解析

常见使用语句

kbbadger /var/log/kingbase.log

kbbadger /var/log/kingbase.log.2.gz /var/log/kingbase.log.1.gz  /var/log/kingbase.log kbbadger

/var/log/kingbase/kingbase-2012-05-*

kbbadger --exclude-query="^(COPY|COMMIT)" /var/log/kingbase.log

kbbadger -b "2012-06-25 10:56:11" -e "2012-06-25 10:59:11"  /var/log/kingbase.log

cat /var/log/kingbase.log | kbbadger -

kbbadger --prefix '%t [%p]: user=%u,db=%d,client=%h' /sys_log/kingbase-2012-08-21*

kbbadger --prefix '%m %u@%d %p %r %a : ' /sys_log/kingbase.log

# Log line prefix with syslog log output

kbbadger --prefix 'user=%u,db=%d,client=%h,appname=%a' /sys_log/kingbase-2012-08-21*

# Use my 8 CPUs to parse my 10GB file faster, much faster

kbbadger -j 8 /sys_log/kingbase-10.1-main.log

相关视图

sys_stat_statements 视图

在系统资源排查后发现是数据库相关性能使用问题,首先可以通过sys_stat_statements 查看数据库sql语句执行情况,发现有问题语句并进行优化

该视图可以查询内容包括

1、语句内容

2、语句执行次数

3、语句解析次数和时间

3、shared_buffer 使用情况是否用到了磁盘read 还是用到了 shared _buffer hit

4、temp_buffer ,work_me,maintance_men 命中情况  通过local字段排查

sys_stat_activity 视图

查看目前连接数据库的连接信息,以及这些连接信息目前的状态比如

1、是否有等待事件

2、锁信息

3、连接方式和地址

4、连接开始时间

5、事务开始时间

6、查询语句开始时间

7、查询语句

IO分析试图 sys_stdio_user_tables和 sys_stdio_user_indexes内容包含

1、表中数据读盘或者内存命中的数量

2、表中索引读盘或者内存命中的数量

3、toast表读盘或者内存命中的数量

lock信息

sys_locks

语句级别

针对单独的一条语句或一次跑批语句进行性能能瓶颈排查,主要还是依赖于执行计划根据执行计划进行语句分析

KingbaseES 中 explain 命令来查看执行计划时最常用的方式。其命令格式如下:

explain [option] statement

其中 option 为可选项,可以是以下 5 种情况的组合:

• analyze:执行命令并显示执行事件,默认 false

• verbose:显示附加信息,比如计划树中每个节点输出的字段名等,默认 false

• costs:显示执行计划的成本,默认 true

• buffers:显示缓冲区的使用信息,包括共享快、本地块和临时读写块,默认 false,前置条件是 analyze

format:指定执行计划的输出格式,支持:TEXT、XML、JSON 或者 YAML,默认是 text

生成执行计划之后我们主要阅读内容包括

执行计划里每个节点主要内容包括:

• 执行动作,及其附加条件,比如索引扫描,索引条件等

• 估算成本:启动 cost、总体 cost • 估计返回的行数和平均宽度

• 如果开启了 Analyze 选项,还会返回:

– 实际成本:启动 cost、总体 cost – 实际返回的行数,节点循环执行次数

我们分析的思路首先为性能点, 先看总体cost然后看看各个步骤的cost,找到占比最高的步骤确认为性能点进行分析,

然后分析步骤正在做的内容,围绕三个点分析

1、scan方式

2、连接方式

3、排序等其他控制操作耗时。

通过分析执行计划可以定位到sql语句的问题点

比如:

执行计划查看 Sort Method: external merge Disk: 99648kB 说明用到了磁盘排序 work_mem需要调整

执行计划中预估和实际执行评估rows差异较大说明统计信息不准确

执行计划中扫描过程更多的用到了物理读,说明buffer命中率低需要调整

执行计划中出现了全表扫描就需要分析全表扫描是否合理等。

kingbaseES 优化之数据库瓶颈排查的更多相关文章

  1. redmine在linux上的mysql性能优化方法与问题排查方案

    iredmine的linux服务器mysql性能优化方法与问题排查方案     问题定位:   客户端工具: 1. 浏览器inspect-tool的network timing工具分析   2. 浏览 ...

  2. SQLServer性能优化之---数据库级日记监控

    上节回顾:https://www.cnblogs.com/dotnetcrazy/p/11029323.html 4.6.6.SQLServer监控 脚本示意:https://github.com/l ...

  3. 从零到千万用户,我是如何一步步优化MySQL数据库的?

    写在前面 很多小伙伴留言说让我写一些工作过程中的真实案例,写些啥呢?想来想去,写一篇我在以前公司从零开始到用户超千万的数据库架构升级演变的过程吧. 本文记录了我之前初到一家创业公司,从零开始到用户超千 ...

  4. 优化MySchool数据库设计之【巅峰对决】

    优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...

  5. 优化MySchool数据库(二)

    优化School数据库(TSQL建库建表建约束) 使用T_sql代码建库.建表.建约束: 建库: Create database HotelManagerSystem on ( ---- 数据文件-- ...

  6. 优化MySchool数据库(一)

    <优化MyShcool数据库>:能够的独立的分析|设计|创建|运营|你的独立的数据库系统 设计--->实现--->TSQL--->查询优化---->性能优化技术-- ...

  7. 【阿里云产品公测】利用PTS服务优化网站数据库读写性能

    [阿里云产品公测]利用PTS服务优化网站数据库读写性能 作者:阿里云用户千鸟 写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时 ...

  8. 微擎开启性能优化里面的性能优化memcache内存优化及数据库读写分离

    http://www.mitusky.com/forum.php?mod=viewthread&tid=3135 [微擎 安装使用] 微擎开启性能优化里面的性能优化memcache内存优化及数 ...

  9. 面试题:谈谈如何优化MYSQL数据库查询

    1.优化数据类型 MySQL中数据类型有多种,如果你是一名DBA,正在按照优化的原则对数据类型进行严格的检查,但开发人员可能会选择他们认为最简单的方案,以加快编码速度,或者选择最明显的选择,因此,你可 ...

  10. mysql的MyISAM 和 InnoDB 的区别?优化MYSQL数据库的方法?

    MyISAM 和 InnoDB 的基本区别 1.InnoDB不支持FULLTEXT类型的索引. 2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from tabl ...

随机推荐

  1. Mysql表读写、索引等操作的sql语句效率优化问题

    上次我们说到mysql的一些sql查询方面的优化,包括查看explain执行计划,分析索引等等.今天我们分享一些 分析mysql表读写.索引等等操作的sql语句. 闲话不多说,直接上代码: 反映表的读 ...

  2. 我又踩坑了!如何为HttpClient请求设置Content-Type?

    1. 坑位 最近在重构认证代码,认证过程相当常规: POST /open-api/v1/user-info?client_id&timstamp&rd=12345&sign=* ...

  3. Dubbo使用APISIX作为网关

    为什么使用网关 Dubbo服务本身没有暴露HTTP接口,客户端(如:Web,APP)无法直接调用其提供的方法. 而APISIX可以通过dubbo-proxy插件为Dubbo服务提供外部访问的HTTP接 ...

  4. xcode真机运行包添加(更新到15.4)

    今天给真机装包,提示xcode版本低不能安装,电脑内存有些不足,xcode更新不了,这时候了解到xcode可以单独添加开发包\(^o^)/~ 1.下载 链接: https://pan.baidu.co ...

  5. RK3568开发笔记(一):瑞芯微RK3568芯片介绍,入手开发板的核心板介绍

    前言   目前主流国产芯片为RV11XX.RK33XX.Hi35XX系列,本系列开启RK3568系列的技术教程笔记分享.  本篇主要介绍RK3568芯片和入手开发板的核心板详细介绍.   RK3568 ...

  6. 海康摄像SDK开发笔记(一):海康威视网络摄像头SDK介绍与模块功能

    前言   视频监控.人脸识别等应用中经常使用到摄像头,当前占据主流视频监控摄像头就是海康和大华两家,都可通过自家的sdk或者是onvif方式使用和控制摄像头.  本文章讲解海康的sdk方式.   海康 ...

  7. Apple设备屏幕尺寸和方向

    表格中包括了各种型号的iPad.iPhone.以及iPod touch等设备的详细信息,涵盖了从iPad Pro到各代iPhone和iPod touch的多个型号. 这些信息可用于开发应用程序时优化界 ...

  8. socket及黏包现象及解决黏包---day28

    1.四次挥手(补充) 客户端向服务端发送一个请求消息,断开连接(代表客户端没有数据传输了) 服务端接收请求,发出响应 等到服务端所有数据收发完毕之后 服务端向客户端发送断开连接的请求 客户端接收请求后 ...

  9. java学生管理系统(界面版)

    运行截图 项目说明: 本系统界面我个人就从简设计了,本来打算使用windowbuilder插件设计的,可想到使用windowbuilder插件之后导致代码冗余,会影响到代码可读性,可能对小白不友好.虽 ...

  10. 07-Redis系列之-双写一致性,缓存详解和优化点

    双写一致性 双写一致性指的是当我们更新了数据库的数据之后redis中的数据也要同步去更新. redis和mysql数据同步方案 先更新缓存,再更新数据库(然并软...) 先更新数据库,再更新缓存(一般 ...