在openGauss上遇到慢SQL该怎么办?

在数据库的日常使用中,难免会遇到慢 SQL。 遇到慢 SQL 本身并不可怕,困难之处在于如何识别慢 SQL 并对其优化,使它不至于拖慢整个系统的性能,避免危害到日常业务的正常进行。

对不同的数据库来说,由于其系统架构的差异、代码实现的不同,很多慢 SQL 解决“套路”往往是无法直接复用的。而由于历史原因,很多国内互联网公司的关系型数据库系统都是 MySQL, 这也导致网络上关于 MySQL 数据库的慢 SQL 分析文章很多,而其他数据库就少得可怜了。为此,我们梳理了在 openGauss 上进行慢 SQL 分析的经验,并总结了下来,希望能给 openGauss 的用户一些启发。openGauss 的数据库自治运维系统 DBMind 也已经初步具备了慢 SQL 根因分析的能力,感兴趣的读者也可以尝试一下。

首先,我们可以通过设置 GUC 参数 log_min_duration_statement 来指定 openGauss 系统监控的慢 SQL 阈值。同时,我们也应调大 instr_unique_sql_count 的数值,以免出现“missing SQL statement, GUC instr_unique_sql_count is too small.”的提示。这里以设置慢 SQL 检测阈值为 5 秒(默认数值单位是毫秒)为例:

gs_guc reload -D $PGDATA -c 'log_min_duration_statement = 5000' -c 'instr_unique_sql_count = 2000'