【TiDBer 唠嗑茶话会 68】征集 TiDB 数据库性能优化大师,你是如何优化 TiDB 数据库性能的呐?——两周一期

:sparkles:本期唠嗑茶话会来征集 TiDB 数据库性能优化大师啦!想让各位 TiDBer 们分享一下大家平时都是如何优化 TiDB 性能的呐? :face_with_peeking_eye:任何方面 & 办法都可以来分享哦!包括但不限于以下方面:point_down:
【查询优化】:通过 SQL 语句的编写和索引的优化来提高查询性能?包括覆盖索引、前缀索引、索引合并等优化方法。
【统计信息优化】:如何收集和利用统计信息来优化查询计划?包括收集原理、定期更新、多列统计信息等方法。
【硬件和网络优化】:如何选择合适的硬件和网络配置来提高 TiDB 性能?包括 CPU、内存、存储、网络带宽等方面的优化。
【TiDB 集群优化】:如何配置 TiDB 集群来提高性能?包括 TiDB PD、TiKV、TiFlash 的配置和优化
【数据库应用优化】:如何通过应用程序的调整和优化来提高数据库性能?包括缓存、分表、批量操作等优化方法。

回复格式:

【优化类型:如查询/硬件优化】+ 是用什么办法来优化调整性能的。

请各位小伙伴们按照格式回复参与话题讨论哦!征集到的回复最终会汇总成【社区智慧合集】~

本期话题:

各位 TiDBer 们分享一下大家平时都是如何优化 TiDB 性能的呐?

活动奖励:

参与奖:

按照格式参与话题讨论的 TiDBer 可以获得 30 积分奖励

活动时间:

2023.4.28-2023.5.5

1 个赞

【硬件和网络优化】开启Raid卡缓存,使机械硬盘的IO性能直线提升。

MegaCli64 -LDInfo -Lall -aALL #查看
MegaCli64 -LDSetProp -WB -Lall -aAll #有电池启用缓存
MegaCli64 -LDSetProp CachedBadBBU -Lall -aALL #没有电池启用缓存
MegaCli64 -LDSetProp NOCachedBadBBU -Lall -aALL #没有电池关闭缓存

注意:必须保证Raid卡的电池正常,否则意外断电会导致数据丢失

2 个赞

优化tidb的性能:
一、先从sql方面优化:
1.先看执行计划,最简单的,看看是不是缺索引,是的话,直接加索引
2.如果因为统计信息太旧导致执行计划异常,直接重新收集统计信息
3.统计信息很新但是执行计划还不对,指定hint
4.sql执行计划都对,但是速度还是不理想,如果是oltp请求,改写sql或者联系开发修改应用逻辑
5.sql执行计划对,但是速度无法接受,OLAP请求,直接上tiflash
二、如果以上都做了,性能还达不到要求,从参数层面优化:
1.看看是不是某些参数设置有问题,能在线修改参数的直接在线修改
2.不能在线修改的,修改配置文件参数后reload集群
三、再看主机资源
1.是不是有主机其他进程挤占主机资源
2.看看是不是主机的参数可以优化
四、以上方法都用过了,发现性能还是达不到
1.评估当前集群的资源利用率,不足直接向老板申请扩容

3 个赞

【查询优化】可以通过分片、路由等技术来避免大量的热点数据,从而提高系统的可扩展性和可用性。在编写 SQL 语句时,应该尽量减少全表扫描,使用合适的索引来提高查询性能。比如可以使用覆盖索引、前缀索引、联合索引等技术来减少索引占用空间、提高查询效率。

1 个赞

1.版本信息
select tidb_version();
2.查看数据库
show databases;
3.创建数据库
create database tidb;
4.进入数据库
user tidb;
5.查看表
show tables;
6.链接查询
show processlist;
7.开启角色
set role all;
8.查看角色
select current_role();
9.查看授权
show grants;

【数据库应用优化】:如何通过应用程序的调整和优化来提高数据库性能?包括缓存、分表、批量操作等优化方法
1.程序里面select语句必须指定要选择的列,不允许select * 用法,做好上线和测试工作
2.对于批量insert场景,必须开启批量提交,客户端和服务端参数都好调整
3.对于批量update和delete场景,提前和业务沟通,尽量减少此类批量操作,转而通过replace扥方式或业务优化调整
4.对于有大量数据存储和有时限的表,我们也不建议分表,而且使用分区表,对过期的数据直接通过高效的删分区方式完成,而不是低效的批量delete方式
5.对于高频访问的只有几千行的小型表,设置为缓存表,可以将每秒过万的 select 延迟从5ms下降到1ms左右
6.对于有大量中间计算结果需要复用的应用,我们使用内存临时表实现

1 个赞

1优化慢查询
2换nvme

查询优化

  1. 使用索引:为经常用于查询条件和排序的列创建索引。这将有助于提高查询效率。
  2. 避免全表扫描:通过使用索引避免全表扫描。
  3. 优化复杂查询:将复杂查询分解为多个简单查询,以提高查询效率。
  4. 使用 EXPLAIN 分析查询计划:通过 EXPLAIN 命令分析查询计划,找出慢查询的原因并进行优化。
  5. 避免使用子查询:尽量将子查询转换为 JOIN 查询,以提高查询效率。

统计信息优化

  1. 更新统计信息:定期更新统计信息以帮助优化器生成更好的查询计划。
  2. 调整统计信息收集参数:根据实际情况调整统计信息收集参数以提高优化器的准确性。

硬件和网络优化

  1. 优化磁盘性能:使用高性能 SSD 硬盘以减少磁盘 I/O 延迟。
  2. 优化网络性能:使用高速网络设备和优化网络拓扑结构以降低网络延迟。
  3. 优化 CPU 和内存:确保 TiDB 集群有足够的 CPU 和内存资源,以便在高负载下保持良好的性能。

TiDB 集群优化

  1. 扩展集群:按需添加更多的 TiDB、TiKV 和 PD 节点,实现集群的水平扩展。
  2. 调整 TiKV 参数:根据实际负载情况调整 TiKV 的参数,如 raftstore.store-pool-sizerocksdb.max-background-jobs 等。
  3. 调整 PD 参数:根据实际负载情况调整 PD 的参数,如 scheduler.limit 等。

数据库应用优化

  1. 分页查询优化:使用 LIMITOFFSET 进行分页查询时,尽量避免使用较大的 OFFSET,以降低查询延迟。
  2. 合理使用事务:减少长事务,避免大量行锁争用。
  3. 减少连接数:通过连接池复用数据库连接,避免过多的数据库连接导致资源竞争。
  4. 批量操作:针对大量的 INSERT、UPDATE、DELETE 操作,可以使用批量操作来提高性能。
1 个赞
  1. 规范开发
  2. 把慢sql优化掉,基本能解决80%的数据库问题
  3. 升级硬件
1 个赞

【查询优化】

  1. 使用合适的索引:根据查询语句的特点和数据分布情况,选择合适的单列或多列索引。对于复杂的查询,可以考虑使用覆盖索引或索引合并等技术来提高性能。
  2. 避免全表扫描:尽可能地使用索引来避免全表扫描。如果无法使用索引,可以考虑将数据划分为更小的分区或者分页查询。
  3. 使用连接查询时,避免过度连接:连接查询会增加查询的复杂度和执行时间。可以考虑使用子查询、关联子查询、EXISTS 或者 NOT EXISTS 等方式来代替连接查询。

烂SQL优化。大部分问题都可以解决
硬件优化
开发长点心

加索引

1、慢sql优化
2、合适的索引
3、集群参数根据业务适配调优

主要是使用上的优化

1.查询优化
主要是慢SQL优化:

2.硬件和网络优化
主要是数分的硬件优化,部署在云平台,可以根据监控CPU、内存、IO等情况,具体优化。

基本就是优化慢 sql

监控告警观察 + 管理平台

常用的就是sql优化,索引,不行分库分表,参数优化,硬件优化

dstat 查看当前硬件资源状态

【硬优化】硬件优化一般不可主导,每个业务都尽最大建议给"能力之内"的配置!
【软优化】读写优化90%在SQL层面,使用常规SQL优化方法进行相关优化处理;再配合数据库系统优化参数进行设置调优。

  1. 查询优化:对数据库查询语句进行优化,包括选择合适的索引、使用合适的查询语句、调整查询参数。
  2. 硬件优化:对硬件进行优化,升级硬件、调整硬件参数、调整系统参数、优化系统配置。