如何在 PolarDB-X 中优化慢 SQL|学习笔记(一)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 快速学习如何在 PolarDB-X 中优化慢 SQL

开发者学堂课程【如何在 PolarDB-X 中优化慢 SQL如何在 PolarDB-X 中优化慢 SQL】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/987/detail/14930


如何在 PolarDB-X 中优化慢 SQL

 

内容介绍:

一、动手实践系列介绍

二、环境准备

三、演示内容

 

一、动手实践系列介绍

首先是围绕 PolarDB-X 的社区版也就是开源的版本来讲解,它对标的是阿里云上商业2.0版本,它所面向的群体是应用开发者、架构师、 DBA 等等,站在用户的视角来展示 PolarDB-X 产品应该如何使用,讲解的主要内容是围绕 PolarDB-X 在使用的全过程当中以场景化的方式来进行展示。

 图片6.png

之后会讲如何连接 PolarDB-X 之后,会讲 DDL 、扩缩容以及全局  Binlog 增长日志。今天讲解如何优化的 PolarDB-X 里面的 MySQL 。题目后续也会有所调整。

 

二、环境准备

1、系统

CentOS 7、8

macOS

Ubuntu 18、20、21、22

Windows 10+

2、配置

>= 4C8G

3、环境

Docker&K8S

PolarDB-X Release-20220127

环境配置也需要有系统,最好是 CentOS 或者是 Ubuntu ,配置要稍微高一点,环境需要里面有一个 Docker&K8S 集群,以及PolarDB-X Release-20220127 。

 图片7.png

首先了解一下 PolarDB-X 的系统架构, PolarDB-X 分布式系统有四大组件。第一个组件叫做 CN 也是分布式计算,主要负责数据拆分的计算以及分布式事务等等功能。第二个是 DN 为了方便理解可以把它简单的理解成是增强版的 MySQL ,负责数据的存储。第三个组件 GMS 是原数据中心,是一个高频率的节点,可以看成一个特殊角色的 DN 。最后一个全体 Blog 生成的组件叫 CDC,它可以生成 MySQL 增量日志。这是 PolarDB-X 的架构。

| NO. | RULE_NAME | RUNNING | WAITING | KILLED | MATCH_HIT_CACHE | TOTAL_MATCH | ACTIVE_NODE_COUNT | MAX_CONCURRENCY_PER_NODE | WAIT_Q UEUE_SIZE_PER_NODE | WAIT_TIMEOUT | FAST_MATCH | LIGHT_WAIT | SQL_TYPE | USER TABLE | KEYWORDS | TEMPLATE _ID |

三、演示内容

1、PolarDB-X SQL Advisor&CCL Demo:

模拟业务A : Sysbencholtp

模拟业务B : randomselect

SOL 限流慢 SOL

SOL Advisor 优化慢 SQL 

2、SQL Advisor 原理 :

基本原理和流程

了解更多

 图片8.png

小图是用来模拟的一个线上的业务场景,首先用阿里云上的 ECS 来做所有的环境的部署,假设业务系统里面用 PolarDB-X 作为数据库,同时用 Prometheus 和 Grafana 作为监控的电路,在业务上面一开始会运行的一个老的应用叫 APP A 它是在正常运行的,过了一段时间业务发展又有一个新的业务加入称它为 APP B ,它是跟 APP A 是共享一个 PolarDB-X 库的,今天模拟的场景是这 APP B 刚加入的时候因为它的数据库表的一些设计不够合理,导致 APP B 启动的时候把线上的 PolarDB-X 实例资源占用非常的多,影响到了APP B 的使用,在这样情况下,怎么样做应急的处理,会用到一系列 PolarDB-X 提供的工具。主要会介绍两个,第一个叫 SQL Advisor 推荐的能力。第二个是 CCL 也是 SQL 限流的工具,用 Sysbench oltp 压测的场景来模拟业务 A ,跑的实际上是 Sysbench 的 oltp 场景。 APP B 是用 Sysbench 里面 random  select 的场景,APP A 用 oltp 是听取上一讲当一个同学的建议,上次讲 SQL 都是select 没有对下层数据的修改,所以做第二个可能相当是比较容易的。这次就具体建议用 oltp 里面既有读也有写的业务的负担。

3、Demo 环节

free6om@free6om ~> ssh polardb-x-demo

Welcome to Ubuntu 20.04.3 LTS(GNU/Linux 5.4.0-91-generic

*Documentation:  https://help.ubuntu.com

*Management:    https:///landscape.canonical.com

*Support:         https://ubuntu.com/advantage

Welcome to Alibaba Cloud Elastic Compute Service !

Last loain: Fri Mar 11 14:08:01 2022 from 42120.73.190 Welcome to fish,the friendly interactive shell

Type 'helpfor instructions on how to use fish

admin@polardb-x-demo ~> cd class-6/

admin@polardb-x-demo ~/class-6> kc port-forward sql-advis or-and-cc1-tvkd-cn-default-c7b498f84-j5wd7 8081:8081 --ad dress="0.0.0.0"

Forwarding from 0.0.0.0:8081 -> 8081

Handing connection for 8081

//把监控链路打通

图片9.png

//页面是用 General 来展示 PolarDB-X 的一个系统监控,过大概30秒监控数据就会过来。

X1

Last login: Fri Mar 11 13:49:04 on ttys003

You have mail.

Welcome to fish, the friendly interactive shell

Type  'help ’ for instructions on how to use fish

Free6om@free6om ~> ssh polardb-x-demo

Welcome to Ubuntu 20.04.3 LTS(GNU/Linux5.4.0-91-generic x86_64)

*Documentation: https://help.ubuntu.com

*Management: https://landscape.canonical.com

*Support: https://ubuntu.com/advantage

Welcome to Alibaba Cloud Elastic Compute Service !

Last login: Fri Mar 11 14:08:01 2022 from 42.120.73.190 Welcome to fish, the friendly interactive shell

Type 'help ’ for instructions on how to use fish

admin@polardb-x-demo ~> cd class-6/

admin@polardb-x-demo ~/class-6> mysql -h127.1 -upolar dbx_root -p6pmzs57p

mysql:[Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ;or\g. Your MySOL connection id is 17935

Server version: 5.6.29 Tddl Server(ALIBABA)

Copyright (c)2000,2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;’or '\h’ for help. Type '\c’ to clear the current input statement.

//先启动一个 shell 登录到 ECS 连上 PolarDB-X 数据库。

图片10.png

//监控数据已经过来,当前系统没有什么负载,QPS 比较低是一个空跑的状态。

//看一下目前 PolarDB-X 里面都有什么库。

mysql> show databases;

+----------------------+

| DATABASE          |

+----------------------+

| app_a              |

| app_b               |

| app_b_idx           |

| information_schema |

+-----------------------+

//有 app_a 、app_b、app_b_idx 的库,先不用管 app_b和app_b_idx 只看 app_a ,接下来的操作是把模拟场景里面的APP A 也就是老的应用,先正常的起来。

4 rows in set (0.00 sec)

mysql> use app_a;

Database changed

mysql> show tables;

Empty set (0.00 sec)

mysql>

// app_a 库里面是没有表的,所以接下来先把表换成数据。再打开第三个 shell

Last login: Fri Mar 11 16:09:06 on ttys001

You have mail.

Welcome to fish, the friendly interactive shell

Type `help’for instructions on how to use fish

free6om@free6om~> ssh polardb-x-demo

Welcome to Ubuntu 20.04.3 LTS (GNU/Linux5.4.0-91-generic x86_64)

*Documentation: https://help.ubuntu.com

*Management: https:///landscape.canonical.com

*Support: https://ubuntu.com/advantage

Welcome to Alibaba Cloud Elastic Compute Service!

Last login: Fri Mar 11 16:09:09 2022 from 42120.73.190 Welcome to fish the friendly interactive shell

Type `help’for instructions on how to use fish admin@polardb-x-demo ~> cd class-6/

admin@polardb-x-demo ~/class-6> kc apply-f sysbench-prep are-app_a.yaml

//这个脚本依然是前两次往里面加载 sysbench 数据的脚本。把它跑起来可以看到现在已经有 s 的 job 在跑了。

job.batch/sysbench-prepare-app-a-data-test created

admin@polardb-x-demo ~/class-6> kc get jobs

NAME                         COMPLETIONS DURATION AGE

sysbench-prepare-app-a-dataetest 0/1         4s       4s

admin@polardb-x-demo ~/class -6>kc get pods

NAME READY STATUS Running RESTARTS AGE

sql-advisor-and-ccl-tvkd-cdc-default-7c69659b47-rjkg9 2/2 Running 0 27h

sql-advisor-and-ccl-tvkd-cn-default-c7b498f84-j5wd7 3/3 Running 0 24h

sql-advisor-and-ccl-tvkd-dn-0-single-0  3/3 Running 27h

sql-advisor-and-ccl-tvkd-dn-1-single-0  3/3 Running 27h

sql-advisor-and-ccl-tvkd-gms-single-0  3/3 Running 27h

sysbench-prepare-app-a-Wata-test--1-9mtzt 1/1 Running 13s

admin@polardb-x-demo ~/class-6>kc logs-f sysbench-prepa re-app-a-data-test--1-9mtzt

//处于 Running 的状态,看一下日志。

transactions: 1 (0.11 per sec.)

queries: 64 (7.05 per sec.)

ignored errors: 0 (0.00 per sec.)

reconnects: 0 (0.00 per sec.)

General statistics:

total time: 9.0763s

total number of events: 1

Latency(ms):

min: 9075.87

avg: 9075.87

max: 9075.87

95th percentile: 9118.47

sum: 9075.87

Threads fairness:

events(avg/stddev): 1.0000/0.00

execution time(avg/stddev): 9.0759/0.00

admin@polardb-x-demo ~/class-6> kc apply - sysbench-o ltp.yaml

job.batch/sysbench-oltp-test created

admin@polardb-x-demo ~/class-6>

//已经跑完了,再看app_a 的情况,已经有了一张表 sbtest1

mysql> show tables;

+--------------------+

| TABLES_IN_APP_A |

+--------------------+

| sbtest1           |

+--------------------+

row in set(0.01 sec)

mysql> select count(*) from sbtest1;

+-----------+

| count(*)  |

+-----------+

| 160000   |

+-----------+

1 row in set (0.03 sec)

//里面有16万数据,跟上次演示 DDL 是一样的,现在有一张表它里面有10万条数据,接下来启动 sysbench 的 oltp 场景,把业务流量起来。

//通过 show processlist 看业务 A 的链接有没有正常过来

mysql> show processlist;

+---+-------+---------+---+--------------+-------+--------+------

| ID | USER |  HOST  |DB | COMMAND | TIME  | STATE | INFO |TRACEID|

| 17972| polardbx_root|172.17.0.1:34086 |app_a |Query| 0 | |INSERT INTO sdtest1(id,k,c,  13f872fea8402003|

|17976 |polardbx_root |172.17.0.1:49259 |app_a |SLEEP |  0| |  NULL | 13f872fea8002002|

| 15705 | polardbx_root | 172.17.0.1:61081|  __cdc__ | SLEEP|  0 |  | NULL|  13f872f62e402002|

| 17969 | polardbx_root|  172.17.0.1:63296|  app_a | SLEEP|  0 |  | NULL|  13f872fea8802003|

| 17973|  polardbx_root| 172.17.0.1:7172| app_a |Query| 0 | | INSERT | INTO| sbtest 1 (id,k,c | 13f872fea8002000|

|9 | polardbx_root |172.17. 01:45597 | NULL| | 13f872fe7c802002|

|17935 | polardbx_root| 127.0.0 1:40582| app_a | Query |0| |  show processlist | 13f872fea8802001|

| 16480 | polardbx_root | 127.0.0 1:34562 | app_b |SLEEP| 7300 | | NULL |13f85725b3002000|

| 17970 | polardbx_root |172.17. 01:63100| app_a |Query |0 | | UPDATE sbtest1 SEST k=k+1 WHERE| 13f872fea8c02000

| 17974 | polardbx_root |172.17. 0.1:21582 | app_a| QUERY| 0 | | 13f872fea8402004|

| 17971 | polardbx_root | 172.17. 0.1:52470 | app_a | QUERY| 0 | | UPDATE sbtest1 SET k=k+1 WHERE | 13f872fea8802000|

| 17975 | polardbx_root | 172.17.0.1:60296| app_a| Query |0 | | SELECT c FORM sbtest1 WHERE id | 13f872fea8c02001|

+---+-------+---------+---+--------------+-------+--------+------

12 rows in set (0.00 sec)

//里面会有一些 INSERT、UPDATE、SELECT 语句

//看一下系统监控,可以看到 QPS 有一个快速的提升,从原来的15提升到现在的4600的水平,等系统负载跑稳定围绕在4500的水平,业务 A 已经正常运行很长时间,库也是正常的,之后 APP B 要上线

图片11.png

//先看一下 APP B 库里面有什么

mysql> use app_b;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+---------------------+

| TABLES_IN_APP_B  |

+---------------------+

| sbtest1            |

+---------------------+

1 row in set (0.00 sec)

mysql>select count(id) from sbtest1;

+-------------+

| count(id)   |

+-------------+

| 32000000  |

+-------------+

1 row in set (0.44 sec)  

mysql>show creat table sbtest1;

//可以看到里面有一张名叫 sbtest1 的表,为了演示效果,在 sbtest1 里面灌了比较多的数据,一共3200万条数据,如果直接演示数据周期会比较长,大概十几分钟,为了 Demo 节省时间,所以提前把数据给加载进去了,所以跳过 EOB 上线之前加载数据的过程,假设里面一开始就有这么多数据。我们再来看一下现在他们。

//现在数据的表结构

-------------------------------------------------------------------

------------------------------+

| Table  | Create Table

|

+--------------+---------------------------------------------------------------------------------------------------------------------

------------------------------+

| sbtest1 | CREATE TABLE`sbtest1`(

`id` int(10) UNSIGNED NOT NULL,

`k` int(10) UNSIGNED NOT NULL DEFAULT '0',

`c`char(120) NOT NULL DEFAULT'',

`pad` char(60) NOT NULL DEFAULT''

KEY `xid` (`id`)

)ENGINE=InnODB AUTO_INCREMENT=32454182 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE =utf8mb4_0900_ai_ci dbpartition by hash(`id`) l

+--------------+---------------------------------------------------------------------------------------------------------------------

------------------------------+

1 row in set (0.01 sec)

mysqi>

//里面有 id、k、c 和 pad 其中 KEY 是索引,同时呢 sbtest1是一个分工表,用 id 做 hash 进行分表,这是目前表的状态。这个时候业务  B 的数据库建好了,现在把业务 B 的应用给起来。

//业务 B 用了 sysbench-selec-k 场景,官方叫 Select Random 场景团体,简单来说是 yaml 条件里面以 K 这样的一个引力做yaml 条件。做一个查询先把它起来,起来之后来模拟业务 B 的上限。此时观察一下监控的 QPS 情况。

admin@polardb-x-demo ~/class-6> kc apply -f sysbench-olt p.yaml

job.batch/sysbench-oltp-test created

admin@polardb-x-demo ~/class-6> ls

sql-advisor-and-ccl.yaml sysbench-prepare-app_a.yaml sysbench-select-k-idx.yam1

sysbench-oltp.yaml sysbench-prepare-app_b.yaml sysbench-select-k.yaml

admin@polardb-x-demo ~/class-6>

//QPS 从原来4500左右非常陡峭的降低,降低到2300,再次已经降到200多,此时作为一个运维,应该收到系统的报警,作为应用 A 的比如 oner 收到报警,通知 DBA ,DBA 就上线。

图片12.png

mysql>show slow;

//PolarDBX提供指令 show slow 这样的一个显示,慢查询的一个思考语句。

| 13f873e48d002001 | polardbx_root | 172.17.0.1 | 2022-03-11 08:16:05 |  11504 | SELECT id, k. c. pad FROM sbtest1 WHERE K IN (?)|

| 13f873e4c4002001 | polardbx_root | 172.17.0.1 | 2022-03-11 08:16:05 | 11392|  0 | SELECT id, k, c, pad FROM sbtest1 WH ERE k IN (?)|

| 13f873d9ac802000 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:54 11358 | 0 | SELECT id, k, c, pad FROM sbtest1 WHERE K IN (?)|

| 13f873d9a3c02000 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:54 | 11271 | 0  | SELECT id, k, c, pad FROM sbtest1 WHERE K IN (?) |

| 13f873d964002000 | polardbx_root |172.17.0.1 | 2022-03-11 08:15:54 | 11249  | 0 I SELECT id, k, c, pad FROM sbtest1 WH ERE K IN (?)|

| 13f873e5d3002002 | polardbx_root | 172.17.0.1 | 2022-03-11 08:16:06 | 11100 | 1 | SELECT id, k, c, pad FROM sbtest1 WH ERE K IN (?){|

| 13f873da33002000 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:54 | 10596 | 0  | SELECT id, k, c, pad FROM sbtest1 WH ERE K IN (?)|

| 13f873cdfc002000 | polardbx_root|172.17.0.1 |2022-03-11 08:15:34 | 34901 |1  | SELECT SUMCK) FROM sbtest1 WHERE id

BETWEEN 80513 AND 80517

| 13f873c114c02000 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:21| 34851 |5 | SELECT c FROM sbtest1 WHERE id BETWE

EN 96023 AND 96027

| 13f873c119802000 | polardbx_root | 172.17.0.1| 2022-03-11 08:15:21 | 3477| 5 |SELECT c FROM sbtest1 WHERE id BETWE

EN 79858 AND 79862

| 13f873cdfdc02000 | polardbx_root | 172.17.0.1| 2022-03-11 08:15:34 | 3476| 5 | SELECT c FROM sbtest1 WHERE id BETWE

| 13f873ce10002000 | polardbx_root | 172.17.0.1|2022-03-11 08:15:34 | 3405 | 5 | SELECT DISTINCT c FROM sbtest1 WHERE

id BETWEEN 80470 AND 80474 ORDER BY c |

| 13f873ce0e402000-4| polardbx_root17217.0.1| 2022-03-11 08:15:34 | 3397| 2 I replace into `__cdc__.`__cdc_hear tb eat(id,sn ame,gmt_modified) values (1."heartbea,'2022-03-11 08:15:30.831')|

| 13f873c0ff002000 | polardbx_root | 172.17.0.1 |2022-03-11 08:15:20 | 2720  | 1 | SELECT c FROM sbtest1 WHERE id=80752|

| 13f873cdfa002000 | \polardbx_root 1172.17.0.1 |2022-03-11 08:15:33 | 2704 |5| SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 64715 AND 64719 ORDER BY C|

| 13f873c104002000 | polardbx_root | 172.17.0.1 |2022-03-11 08:15:20  | 2704| 1 | SELECT c FROM sbtest1 WHERE id=80620 |

| 13f873c105402000 | polardbx_root |172.17.0.1 |2022-03-11 08:15:20 | 2691 | 5 | SELECT c FROM sbtest1 WHERE id BETWEEN 80245 AND 80249|

| 13f873cdfe002000 | polardbx_root | 7217.0.1 |2022-03-11 08:15:33 |2669| 1 |SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN 92237 AND 92241|

| 13f873ce05002001 | polardbx_root | 172.17.0.1 |2022-03-11 08:15:33 |2660| 5 | SELECT c FROM sbtest1 WHERE id BETWEEN 80602 AND 80606|

| 13f873c116c02000 | polardbx_root | 172.17.0.1 |2022-03-11 08:15:20 | 2621| 1 | SELECT c FROM sbtest1 WHERE id=57892|

| 13f873c11b002000 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:20 |2609| 1| SELECT c FROM sbtest1 WHERE id=79894 |

| 13f873c292002000 | polardbx_root |172.17.0.1 | 2022-03-11 08:15:21 1972| 1 | UPDATE sbtest1 SET c-'78407556466-02 075916779-65739334302-94780306271-46900350015-80231210947-26308605742-20247457467-66192878294-03605546608’WHERE id-699561|

| 13f873cfa5002000 | polardbx_root | 172.17.0.1 2022-03-11 08:15:34 | 1794| 1 | UPDATE sbtest1 SET k=k+1 WHERE id=80383|

| 13f873cdfc802000 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:32 | 1689 | 5 | SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 79643 AND 79647 ORDER BY c |

| 13f873ce03002000 | polardbx_root | 172.17.0.1 2022-03-11 08:15:32 | 1664 | 5 | SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 80455 AND 80459 ORDER BY C|

| 13f873c11a002000 |polardbx_root |172.17.0.1| 2022-03-11 08:15:19  |1497| 1 |UPDATE sbtest1 SET k=k+1 WHERE id=80773|

| 13f856d4efc02000 | polardbx_root | 127.0.0.1 | 2022-03-11 06:08:57 | 1462| 5 |explain analyze select id,k.c.pad from sbtest1 where k in(3)|

| 13f856cd5c402000 |polardbx_root |127.0.0.1 |2022-03-11 06:08:49| 1456| 5|explain analyze select id.k.c.pad from sbtest1 where k in (3)|

| 13f873e818002000 |polardbx_root | 172.17.0.1 | 2022-03-11 08:15:59 |1155| 1 | SELECT c FROM sbtest1 WHERE id=80399|

| 13f873e820c02001 | polardbx_root| 1172.17.0.1| 2022-03-11 08:15:59 | 1124 | 5 | SELECT c FROM sbtest1 WHERE id BETWEEN 80613 AND 80617 ORDER BY C|

| 13f873e820c02000 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:59| 1120 | 1 | UPDATE sbtest1 SET k=k+1 WHERE id=80045|

| 13f873e820402000 | polardbx_root |172.17.0.1 |2022-03-11 08:15:59 | 1118 |5 | SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 80213 AND 80217 ORDER BY C|

| 13f873e820402001 | polardbx_root | 172.17.0.1 | 2022-03-11 08:15:59 | 1110| 1 | SELECT c FROM sbtest1 WHERE id=80801

+----------+----------+--------+--------+--------+-------+-------------------------------------------------------+

55 rows in set (0.01 sec)

//原来业务 A 里面所有的 sql 都是正常跑的,所以优先略过 A 里面的 sql ,重点怀疑新来的业务 B 发起的 sql ,“SELECT id, k, c, pad FROM sbtest1 WH ERE K IN (?)”由业务 B  发出sql

//因为我们的业务系统非常富复杂,第一步先把 myscl 禁止掉让业务 A 恢复正常,然后定位问题,之后再看解决方法。所有为了应急先把导致系统 DBX 下降的 mysql 禁止掉,可以用到 PolarDB-X 提供的 sql 限流功能

//b 上所有的表都做一个限制对象,关键字过滤的功能,过滤” pad“ ” max_concurrency =0“意思为遇到这样的 sql 全部堵塞

mysql>creat ccl_rule block_bad_sql on app_b,*to`polardbx_root`@`%`for select filter by keyword(”pad“)with max_concurrency=0;

Query OK, 1 row affected (0.08 sec)

mysql> show ccl_rules;

+---+---------+---+---+-----+-------+---------+---------+---------------------+--------+-----------+-----------+----------+----------------+

| NO. | RULE_NAME | RUNNING | WAITING | KILLED | MATCH_HIT_CACHE | TOTAL_MATCH | ACTIVE_NODE_COUNT | MAX_CONCURRENCY_PER_NODE | WAIT_Q UEUE_SIZE_PER_NODE | WAIT_TIMEOUT | FAST_MATCH | LIGHT_WAIT | SQL_TYPE | USER TABLE | KEYWORDS | TEMPLATE _ID | QUERY | CREATED_TIME|

+---+---------+---+---+-----+-------+---------+---------+---------------------+--------+-----------+-----------+----------+----------------+

| 1 |  block_bad_sql  |  0 |  0 | 20478 | 20477 |  20478 | 1  | 0 |

0| 600| 1| 1|SELECT | polardbx_root@% | app_b.* | ["pad"] | NULL |NULL | 2022 -03-11 16:18:42|

+---+---------+---+---+-----+-------+---------+---------+---------------------+--------+-----------+-----------+----------+----------------+

1 row in set (0.03 sec)

mysql>

//可以看到已经开始做拦截,重点关注 RUNNING、WAITING、 KILLED 几个参数,现在已经 killed 20478 个参数,block_bad_sql  限流的规则已经开始生效了,生效完之后业务 A 已经恢复正常。看一下监控数据,最早的只有业务 A 在运行的时候4500 QPS 水位因为业务 B 的加入导致降到两三百,限流规则生效之后整个 QPS 系统恢复到了6800,比以前高的原因是被 sql 限流功能限掉的 sql 也算在了统一之内,业务 A 已经恢复正常。

图片13.png


相关文章
|
8月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
644 3
|
SQL 存储 关系型数据库
第二篇:关系型数据库的核心概念与 SQL 基础
本篇内容深入浅出地讲解了关系型数据库的核心概念与SQL基础,适合有一定计算机基础的学习者。文章涵盖数据库的基本操作(CRUD)、数据类型、表的创建与管理等内容,并通过实例解析SELECT、INSERT、UPDATE、DELETE等语句的用法。此外,还推荐了多种学习资源与实践建议,帮助读者巩固知识。学完后,你将掌握基础数据库操作,为后续高级学习铺平道路。
724 1
|
7月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
368 6
|
8月前
|
算法 数据挖掘 数据库
通过 SQL 快速使用 OceanBase 向量检索学习笔记
通过 SQL 快速使用 OceanBase 向量检索学习笔记
|
8月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
12月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
存储 关系型数据库 分布式数据库
PolarDB开源进阶篇:深度解析与实战优化指南
PolarDB是阿里云开源的云原生数据库,采用计算-存储分离架构,结合高性能共享存储与Parallel Raft多副本一致性协议,实现微秒级延迟和卓越性能。本文深入解析其架构设计,涵盖智能调度层、性能优化技巧(如查询优化器调优和分布式事务提升)、高可用与容灾配置、扩展功能开发指南以及监控运维体系。同时,通过电商平台优化案例展示实际应用效果,并展望未来演进方向,包括AI结合、多模数据库支持及Serverless架构发展。作为云原生数据库代表,PolarDB为开发者提供了强大支持和广阔前景。
611 16
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
SQL 关系型数据库 分布式数据库
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
427 14
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
819 9