关键字:
SQL调优、调优报告、人大金仓
SQL调优
SQL调优是用于优化关系型数据库中的查询以尽可能高效地运行,这可以确保应用程序发出的SQL语句在尽可能短的时间内运行,目标是减少最终用户的响应时间或减少用于处理相同工作的资源。
在数据库的众多性能问题中,SQL性能问题占有极大的比例,可以认为大多数性能问题都源于查询语句写得不好或者是索引效率低下,我们通常可以借助自动化性能调优工具对查询语句进行调优。
自动化性能调优工具提供了关于可能需要添加、删除或修改以优化性能的索引的建议,这些工具有助于提高索引、查询和数据库的性能。一些工具会生成有关查询执行中涉及的步骤的统计信息,这些步骤有助于识别和优化数据库和服务器性能。
通过使用SQL优化建议,优化器可以根据数据库内部状态,为DBA提供调优建议。应用这些调优建议后,被调优的SQL语句性能将获得提升。KES的SQL建议支持生成SQL调优报告,为相关人员提供SQL调优报告,从而进行SQL的优化。下面我们将介绍如何生成SQL调优报告。
SQL调优报告插件配置
1、在kingbase.conf配置文件,插入sys_sqltune到shared_preload_libraries中:
shared_preload_libraries = 'plsql, sys_stat_statements, sys_sqltune' |
启动或者重启数据库。
2、创建sys_sqltune插件
kingbase=# create extension sys_sqltune; CREATE EXTENSION |
3、SQL调优报告生成
# 创建表 kingbase=# create table t(id int); CREATE TABLE # 插入数据 kingbase=# insert into t select generate_series(1,100000); INSERT 0 100000 |
kingbase=# select PERF.QUICK_TUNE_BY_SQL('select * from t where id = 1 union select * from t where id = 1;'); |
可以发现有两个优化建议:
下面进行第一个优化,创建索引:
kingbase=# CREATE INDEX ON public.t USING hash (id); CREATE INDEX |
再次查看优化建议:
kingbase=# select PERF.QUICK_TUNE_BY_SQL('select * from t where id = 1 union select * from t where id = 1;'); |
发现只剩下一个优化建议了,我们进行第二次优化,使用union all代替union:
kingbase=# select PERF.QUICK_TUNE_BY_SQL('select * from t where id = 1 union select * from t where id = 1;'); |
发现已经全部优化完毕。
# 开启sys_stat_Statements统计 set sys_stat_statements.track = 'top'; # 执行语句插入sys_stat_statements select * from t where id = 1 union select * from t where id = 1; # 查询语句queryid select queryid from sys_stat_statements where query like 'select * from t where%'; # 生成调优建议 select PERF.QUICK_TUNE_BY_QUERYID_TO_FILE({queryid}, 'text', 'sqltuning.txt'); |