分区表耗时长问题排查过程

背景:4172交易高于12并发后,db3偶发超时报错

排查过程

1、首先排查db3是否与其他db有差异

2、查询慢sql日志(gaussdb)

sql:gsql -p26000 -d postgres -x -c "select (finish_time - start_time) as exe_time,pg_catalog.statement_detail_decode(details,'plaintext',true),* from deb_perf.statement_history where user_name='cpcd' and start_time>'2024-01-11 19:30:16' and query like '%select * from table' order by db_time desc" >test.txt

注意:实际表数据=0,但是随机扫描何返回的tup很多,是因为扫描出来的是索引数据,重建db3问题解决

3、通过执行计划发现有74个分区表

4、查询分区表:

select * from pg_catalog.pg_partition where relname like '%tablename%';

--查询分表的表索引:select * from pg_catalog.pg_partitio where relname like %tablename%' and parttype='x';

5、通过建表语句查询分区键

select * from pg_catalog.pg_get_tabledef('tablename');

其中的 partition by range (file_date) 就是了

 

优化措施

  1. 分区表的查询优化器需要根据查询条件和分区定义来决定在哪些分区执行操作,如果分区数量过多,可能会增加优化器的计算开销,导致查询计划的生成时间较长
  2. 分区表的查询过程中,需要打开并锁住所有的底层表,如果分区数量过多,可能会增加打开和锁住表的时间,导致查询性能下降。
  3. 分区表的查询结果可能需要合并多个分区的数据,如果分区过多,会增加合并数据的时间,导致查询延迟增加

措施:

  1. 优化业务优先使用分区键,并且尽可能每次查询不要涉及太多分区
  2. 适当合并分区,减少分区数量
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]: MySQL支持多种分区类型,包括RANGE分区、LIST分区、HASH分区和KEY分区。RANGE分区是基于一个给定连续区间的列值,将多行分配给分区。LIST分区类似于RANGE分区,但是是基于列值匹配一个离散值集合中的某个值来进行选择。HASH分区是基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。KEY分区类似于HASH分区,但是只支持计算一列或多列,并且MySQL服务器提供其自身的哈希函数。\[1\] 引用\[2\]: 分区表是将表物理上截断成多个小块,但在逻辑上仍然是一个整体。分区表的好处包括提高数据操作的效率和便于存储管理。当表的数据量过大时,分区可以减少对全表的操作,提高查询和更新的速度。此外,如果表的数据量超过了磁盘的存储容量,可以将数据分配到不同的磁盘上,解决存储空间不足的问题。\[2\] 引用\[3\]: 创建分区表的存储过程可以通过以下步骤实现: 1. 创建一个存储过程,使用CREATE PROCEDURE语句。 2. 在存储过程中使用CREATE TABLE语句创建分区表,并指定分区类型和分区键。 3. 在存储过程中使用ALTER TABLE语句添加分区。 4. 在存储过程中使用INSERT INTO语句向分区表中插入数据。 5. 调用存储过程来执行创建分区表的操作。 需要注意的是,创建分区表的存储过程需要根据具体的需求和分区类型进行相应的设置和操作。\[3\] #### 引用[.reference_title] - *1* *2* *3* [mysql创建表分区详细介绍及示例](https://blog.csdn.net/weixin_44462773/article/details/128013794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值