2023_09—第二周

2023-09-13

JOIN 表使用建议[^1]

某些性能消耗非常大的 SQL 可以直接造成数据库主从长时间延迟、主从中断、甚至实例 CRASH 等。性能消耗过大的 SQL 本身执行时间长,其实也就是资源占用时间长,会造成集群并发能力低下。在业务流量突增(业务本身或网络抖动都可能导致)等情况下,容易造成 SQL 堆积、并发超过限制等,从而影响到业务正常运行。OceanBase 数据库没有关联表数的限制,复杂函数的使用目前只针对正则表达式相关函数,例如 regexp_substr 这类函数的执行性能差,容易影响业务。

一个业务,使用简单的 SQL 语句,使用数据库最简单的增、删、改、查功能,从而让数据库处于一种可预估,可扩展,可控的状态。我们来衡量一个业务 SQL 写的是否优秀,其关键点是这个业务的 SQL 是否在合理范围内足够的简单。这个合理的范围指的是随着业务及数据的增长,SQL 本身的性能消耗不大且不会有大的变化,不会占用过多的 CPU 或 IO 时间。比如一个根据主键查询的语句,一行数据与一千万行数据不会有太大的变化。业务可以很好的在此基础之上预估当前流量要增加比如 N 倍的情况下,数据库应就当如何扩容并能确保数据库可以支撑.但如果业务中复杂语句过多,性能消耗又大,数据库可能就只因为偶尔的或是前端的,或是网络的,可是数据库本身的波动导致 SQL 堆积、实例并发增长,业务受到影响。

复杂的 SQL 会让集群处于一种性能波动明显,并发能力低,业务可能不可控的状态

– OceanBase 数据库 》参考指南 》SQL 参考 》SQL 实践和建议 》SQL 语句示例


[^1]: JOIN 表使用建议