CN111723091A - 基于Oracle数据库的索引处理方法、系统、设备和存储介质 - Google Patents
基于Oracle数据库的索引处理方法、系统、设备和存储介质 Download PDFInfo
- Publication number
- CN111723091A CN111723091A CN202010448340.6A CN202010448340A CN111723091A CN 111723091 A CN111723091 A CN 111723091A CN 202010448340 A CN202010448340 A CN 202010448340A CN 111723091 A CN111723091 A CN 111723091A
- Authority
- CN
- China
- Prior art keywords
- index
- sql
- information
- sql statement
- index information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Operations Research (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种基于Oracle数据库的索引处理方法、系统、设备和存储介质。所述索引处理方法包括:获取所述数据库中总开销排序在第一预定数值之前和平均执行开销高于第二预定阈值的SQL语句;对所述SQL语句进行分析,得到所述SQL语句的索引优化建议;解析所述索引优化建议得到所述SQL语句的相关信息,所述SQL语句的相关信息包括索引信息;对所述索引信息进行筛选,得到筛选后的索引信息。本公开提供的索引处理方法通过分析影响程序性能的SQL语句进行分析并获取索引优化建议,以及,对解析索引优化建议得到的索引信息进行筛选,最终得到用于优化SQL的筛选后的索引信息,可以实现更加完备的SQL优化,解决索引缺陷,从而提高应用程序的整体性能。
Description
技术领域
本发明涉及计算机应用技术领域,更为具体而言,涉及一种基于Oracle数据库的索引处理方法、系统、设备和存储介质。
背景技术
在日常运维工作中,经常会遇到应用程序新版本上线后,由于相关的数据表上没有设计索引,或索引不佳导致SQL(结构化查询语言)语句执行效率低下,整体业务出现拥塞的问题。在一些对业务稳定性要求非常高的行业(如金融行业),虽然开发人员在新的应用版本上线前,会进行严格非功能性、功能性测试,但是测试环境中的测试数据跟生产数据存在很大的差异,测试业务场景、模拟的业务压力也跟生产环境相差甚远。这导致很多问题在测试过程中无法及时的暴露,而是在生产环境部署了新的应用版本,业务压力上来之后业务响应超时才发现有问题。并且,由于不同业务的业务高峰时间点不一样,导致有的问题可能在新版本刚上线时就先暴露出来了,而有的问题可能直到业务推广后才得以暴露。
上述问题,一方面使得业务的连续性下降,给客户造成极其不好的用户体验;另一方面给数据库运维人员造成了很大的运维压力。
针对上述问题,现有技术通过Oracle(甲骨文公司的一款关系数据库管理系统)的SQL优化辅助工具STA(SQL Turning Advisor,SQL优化顾问)获取调优建议,以提高应用程序的整体性能。具体而言,根据AWR(Automatic Workload Repository,自动负载信息库)报告自动优化负载高的SQL语句,使用SQL优化顾问实现调优建议。或者手动运行SQL优化顾问选择单个SQL语句或者多条SQL语句作为输入内容,分析所有访问路径,然后生成改进SQL语句的建议,并提出索引等方案来提高应用程序的整体性能。
然而,由于很多SQL的谓词条件是使用字面值而没有使用绑定变量,使得同类SQL的文本信息不同。但是Oracle的AWR报告是根据SQL文本信息进行统计分析的,且Oracle的AWR报告最小的统计粒度是半小时,这就导致那些没有使用绑定变量但执行频率比较高的SQL语句因为单次执行的开销所占AWR分析时段总开销的比例很小,而没有出现在AWR报告高负载SQL列表中,进而没有被分析优化。
另外,STA作业是很消耗资源的操作,而STA自动优化作业每次都会针对AWR中高负载的SQL进行一次全量分析,消耗过多的CPU、IO资源,可能影响到应用程序的正常运行。
发明内容
为解决上述现有技术存在的问题或部分问题,本发明实施方式提供了一种基于Oracle数据库的索引处理方法、系统、设备和存储介质,通过分析影响程序性能的SQL语句获取索引优化建议,并对解析索引优化建议得到的索引信息进行筛选,最终得到用于优化SQL的筛选后的索引信息,可以实现更加完备的SQL优化,解决索引缺陷,提高应用程序的整体性能。
根据本发明的第一方面,本发明实施方式提供了一种基于Oracle数据库的索引处理方法,包括:获取所述数据库中总开销排序在第一预定数值之前和平均执行开销高于第二预定阈值的SQL语句;对所述SQL语句进行分析,得到所述SQL语句的索引优化建议;解析所述索引优化建议得到所述SQL语句的相关信息,所述SQL语句的相关信息包括索引信息;对所述索引信息进行筛选,得到筛选后的索引信息。
本发明上述实施方式通过分析影响程序性能的SQL语句以获取索引优化建议,并对通过解析索引优化建议得到的索引信息进行筛选,最终得到用于优化SQL的筛选后的索引信息,可以实现更加完备的SQL优化,有效避免因索引不合适引起的业务性能问题,提高应用程序的整体性能。
在本发明的一些实施方式中,所述SQL语句的相关信息还包括:所述SQL语句、所述SQL语句优化前后执行计划到达目的地址的代价COST值、执行计划信息。
在本发明的一些实施方式中,对所述索引信息进行筛选包括:排除所述索引信息中重复的索引信息、冗余的索引信息、优化前后所述SQL执行计划COST值的下降值不高于第三预定阈值的索引信息。
本发明上述实施方式通过过滤重复索引信息、冗余索引信息,以及优化效果不明显的索引信息,可以得到更加准确的索引优化信息,以对SQL语句进行优化,从而提高业务性能。
在本发明的一些实施方式中,对所述SQL语句进行分析包括:每天进行一次增量SQL分析;每周进行一次全量SQL分析。
本发明上述实施方式通过每天进行增量SQL分析,以及一周进行一次SQL全量分析,可以避免因为SQL分析消耗太多CPU、IO资源,保障应用程序的正常运行。
在本发明的一些实施方式中,所述索引处理方法还包括:根据所述筛选后的索引信息获取所述筛选后的索引信息对应的待优化SQL语句;输出所述待优化SQL语句、所述筛选后的索引信息、所述待优化SQL语句优化前后的执行情况。
本发明上述实施方式通过输出进行优化的SQL语句、筛选后的索引信息以及SQL语句优化前后的执行情况,可以将进行优化的SQL语句的信息展示给数据库管理员或开发人员进行查看和处理。
根据本发明的第二方面,本发明实施方式提供了一种基于Oracle数据库的索引处理系统,包括:SQL采集模块,用于获取所述数据库中总开销排序在第一预定数值之前和平均执行开销高于第二预定阈值的SQL语句;索引分析模块,用于对所述SQL语句进行分析,得到所述SQL语句的索引优化建议;解析模块,用于解析所述索引优化建议得到所述SQL语句的相关信息,所述SQL语句的相关信息包括索引信息;索引筛选模块,用于对所述索引信息进行筛选,得到筛选后的索引信息。
本发明上述实施方式通过分析影响程序性能的SQL语句以获取索引优化建议,并对通过解析索引优化建议得到的索引信息进行筛选,最终得到用于优化SQL的筛选后的索引信息,可以实现更加完备的SQL优化,有效避免因索引不合适引起的业务性能问题,提高应用程序的整体性能。
在本发明的一些实施方式中,所述SQL语句的相关信息还包括:所述SQL语句、所述SQL语句优化前后执行计划COST值、执行计划信息。
在本发明的一些实施方式中,对所述索引信息进行筛选包括:排除所述索引信息中重复的索引信息、冗余的索引信息、优化前后所述SQL执行计划COST值的下降值不高于第三预定阈值的索引信息。
本发明上述实施方式通过过滤重复索引信息、冗余索引信息,以及优化效果不明显的索引信息,可以得到更加准确的索引优化信息,以对SQL语句进行优化,从而提高业务性能。
在本发明的一些实施方式中,对所述SQL语句进行分析包括:每天进行一次增量SQL分析;每周进行一次全量SQL分析。
本发明上述实施方式通过每天进行增量SQL分析,以及一周进行一次SQL全量分析,可以避免因为SQL分析消耗太多CPU、IO资源,保障应用程序的正常运行。
在本发明的一些实施方式中,所述索引处理系统还包括信息展示模块,用于执行下述操作:根据所述筛选后的索引信息获取所述筛选后的索引信息对应的待优化SQL语句;输出所述待优化SQL语句、所述筛选后的索引信息、所述待优化SQL语句优化前后的执行情况。
本发明上述实施方式通过输出进行优化的SQL语句、筛选后的索引信息以及SQL语句优化前后的执行情况,可以将进行优化的SQL语句的信息展示给数据库管理员或开发人员进行查看和处理。
根据本发明的第三方面,本发明实施方式提供一种计算机存储介质,其上存储有计算机可读指令,所述计算机可读指令被处理器执行时,使得计算机执行如下操作:所述操作包括如上任意一种实施方式所述索引处理方法所包含的步骤。
根据本发明的第四方面,本发明实施方式提供一种包括存储器和处理器的计算机设备,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时能够实现如上任意一种实施方式所述的索引处理方法。
由上述可知,本发明实施方式提供的基于Oracle数据库的索引处理方法、系统、存储介质和设备,通过分析影响程序性能的SQL语句以获取索引优化建议,并对解析索引优化建议得到的索引信息进行筛选,最终得到用于优化SQL的筛选后的索引信息,可以实现更加完备的SQL优化,有效避免因索引不合适引起的业务性能问题,提高应用程序的整体性能。
附图说明
图1是根据本发明一种实施方式的基于Oracle数据库的索引处理方法的流程示意图;
图2是根据本发明另一种实施方式的基于Oracle数据库的索引处理方法的处理操作流程示意图;
图3是根据本发明一种实施方式的基于Oracle数据库的索引处理系统的架构图。
具体实施方式
以下结合附图和具体实施方式对本发明的各个方面进行详细阐述。其中,众所周知的模块、单元及其相互之间的连接、链接、通信或操作没有示出或未作详细说明。并且,所描述的特征、架构或功能可在一个或一个以上实施方式中以任何方式组合。本领域技术人员应当理解,下述的各种实施方式只用于举例说明,而非用于限制本发明的保护范围。还可以容易理解,本文所述和附图所示的各实施方式中的模块或单元或处理方式可以按各种不同配置进行组合和设计。
下面对本文中使用的术语进行简要说明。
Oracle数据库,甲骨文公司的一款关系数据库管理系统。
DBA,Database Administrator,数据库管理员。
SQL,Structure Query Language,结构化查询语言。
VIP SQL,Very Important SQL,重要SQL。
LIOS,逻辑读,表示SQL执行需要从数据缓存中读取的页数,是判断SQL执行效率的重要指标。
STA,SQL Turning Advisor,SQL优化顾问。
AWR,Automatic Workload Repository,自动负载信息库,通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分。
AWR报告,Oracle 10g以后版本提供的一种性能收集和分析工具,能提供一个时间段内整个系统资源使用情况的报告,通过报告可以了解一个系统的整个运行情况,生成的报告包括多个部分。
COST值,是SQL语句以CBO方式解析执行计划时,供Oracle用来评估CBO成本,选择执行计划的时候参考的值,这个值是一个权重值。
CBO,Cost-Based Optimization,基于代价的优化器。CBO是计算各种可能“执行计划”的“代价”,即COST,从中选用COST最低的执行方案,作为实际运行方案。
crontab命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。
图1是根据本发明一种实施方式的基于Oracle数据库的索引处理方法的流程示意图。
如图1所示,在本发明的一种实施方式中,所述方法可包括:步骤S11、步骤S12、步骤S13和步骤S14,下面对上述步骤进行具体的描述。
在步骤S11中,获取数据库中总开销排序在第一预定数值之前和平均执行开销高于第二预定阈值的SQL语句。其中,开销是指SQL语句执行所需要进行的逻辑读(LIOS)次数,该指标表示SQL执行需要从数据缓存中读取的页数,能准确反映SQL语句的执行效率;平均执行开销为每条SQL语句执行一次所需要进行的逻辑读(LIOS)次数;总开销为每条SQL语句在固定时间段内的执行总次数所进行的逻辑读(LIOS)次数,即平均执行开销与固定时间段内的执行次数的乘积。
在可选的实施方式中,通过dba_hist_sqlstat指令获取在数据库中总开销排序在第一预定数值之前的SQL语句。
可选的,将获取到的符合上述要求的这类SQL语句确定为vip sql(重要SQL),并将这类SQL(vip sql)的信息及执行情况记录在相应的数据表中。其中,符合要求的这类SQL语句是对程序性能影响较大的SQL语句,可选的,其可以为前述数据库中总开销排序在第一预定数值之前、平均执行开销高于第二预定阈值两种。并且,第一预定数值、第二预定阈值的取值可以根据是操作人员手动选取,例如,第一预定数值选取为300,则选取在数据库中开销排序前300的SQL语句作为vip sql。
在步骤S12中,对所述SQL语句进行分析,得到所述SQL语句的索引优化建议。在可选的实施方式中,通过调用STA对SQL语句进行分析,以获取对应的索引优化建议。
在可选的实施方式中,每天进行一次增量SQL分析,每周进行一次全量SQL分析。其中,增量SQL分析是调用STA对数据库中新增加的SQL语句进行分析,以获取新增的SQL语句的索引优化建议;全量SQL分析是调用STA对数据库中的每条SQL语句进行分析,以获取每条SQL语句的索引优化建议。
可选的,每周六进行一次全量vip sql分析,周日至周五每天进行一次增量vipsql分析,得到vip sql对应的优化建议,并将分析得到的优化建议输出到指定的文件中。其中,全量vip sql分析和增量vip sql分析的时间可以设置为固定,也可以根据实际情况修改。由此,可以避免因为SQL分析消耗太多CPU、IO资源,以保障应用程序的正常运行。
在步骤S13中,解析所述索引优化建议得到所述SQL语句的相关信息,所述SQL语句的相关信息包括索引信息。在可选的实施方式中,SQL语句的相关信息可以包括但不限于下述几种:SQL语句、SQL语句对应的索引信息、SQL语句优化前后执行计划COST值、执行计划信息。其中,SQL语句包含sql_id(SQL语句文本信息的hash值),SQL语句对应的索引信息为STA推荐的索引信息。
在步骤S14中,对所述索引信息进行筛选,得到筛选后的索引信息。在可选的实施方式中,对索引信息进行筛选可以包括:排除索引信息中重复的索引信息、冗余的索引信息、优化前后所述SQL执行计划COST值的下降值不高于第三预定阈值的索引信息。示例性的,忽略COST值下降不超过10%的索引信息。由此,可以过滤掉重复索引信息、冗余索引信息,以及优化效果不明显的索引信息,可以得到更加准确的优化信息,以对SQL语句进行优化,从而提高业务性能。
采用本发明实施方式的上述方法,通过分析对程序性能影响较大的各类SQL语句以获取对应的索引优化建议,并对解析索引优化建议得到的索引信息进行筛选,最终得到更加准确的用于优化SQL的索引信息,可以实现更加完备的SQL优化,有效避免因索引不合适引起的业务性能问题,提高应用程序的整体性能。
在可选的实施方式中,还可以根据所述筛选后的索引信息获取所述筛选后的索引信息对应的待优化SQL语句,并输出所述待优化SQL语句、所述筛选后的索引信息、所述待优化SQL语句优化前后的执行情况。
可选的,可以将被分析和筛选后的SQL语句的相关信息存储在指定文件中,通过web平台,读取存储有所述被分析和筛选后的SQL语句的相关信息的指定文件,从而将分析周期内经分析、筛选后得到的SQL信息、索引推荐信息、优化前后的执行计划信息在web平台上展示,方便DBA(数据库管理人员)或开发人员等相关人员查看及后续处理。
图2是根据本发明另一种实施方式的基于Oracle数据库的索引处理方法的处理操作流程示意图。
如图2所示,在本发明的基于oracle数据库的索引处理方法的另一种实施方式中,所述方法可包括下述步骤:首先进行SQL采集,其次进行索引分析,然后进行索引筛选,最后进行信息展示。其中,SQL采集具体可以包括步骤S201、步骤S202、步骤S203;索引分析具体可以包括步骤S204、步骤S205、步骤S206、步骤S207;索引筛选具体可以包括步骤S208、步骤S209、步骤S210、步骤S211;信息展示具体可以包括步骤S212。下面对上述步骤进行具体的描述。
步骤S201,创建调度任务。在可选的实施方式中,通过部署VIP SQL采集脚本、索引分析脚本来创建调度任务。
步骤S202,配置执行策略。在可选的实施方式中,通过为部署的各项脚本设置定时任务,实现脚本的执行策略配置,由此,使得各脚本能够按照预定的策略定时执行。
步骤S203,定期根据SQL执行情况维护VIP SQL表。其中,所述SQL执行情况可包括但不限于以下几种:SQL总的逻辑读、平均逻辑读。。以及,所述VIP SQL表为包含从数据库中获取的对程序性能影响较大的SQL语句及其相关信息的表,所述VIP SQL表可以包含但不限于下述字段:
sql_id,SQL语句文本信息的hash值
plan_hash_value,SQL语句执行计划hash值
avg_lios,SQL语句每天的平均执行逻辑读
execs,SQL语句每天的平均执行次数
type=1,按照SQL语句执行总开销取TOP(排序中的前几个)
type=2,按照SQL语句执行平均开销取TOP
type=3,按照执行计划的总开销取TOP
b_turning,是否已被分析,TRUE:是;FALSE:否,默认值:FALSE
在可选的实施方式中,通过配置VIP SQL维护脚本这样的定时任务来进行VIP SQL表的维护,可选的,通过设置crontab命令每天20:00执行VIP SQL表的维护策略。
在本发明的示例性实施方式中,设置crontab定时任务通过下述指令实现:
0 20***sh/home/db/oracle/script/vipsql.sh 1>/dev/null 2>&1
该脚本每次执行时,依次执行下述操作:
首先通过sql语句的性能历史查询指令dba_hist_sqlstat、快照查询指令dba_hist_snapshot关联,获取最近24小时的SQL执行信息,其结果集记为C0。
然后执行下述(1)至(3)中的操作:
(1)将C0按照sql_id列进行group by(聚合)操作,记为结果集C1;
将T_VIP_SQL数据表(即前述VIP SQL表的实际表名)中type=1的记录与C1进行左连接,更新T_VIP_SQL中的avg_lios(SQL语句每天的平均执行逻辑读)、execs列(execs,SQL语句每天的平均执行次数),更新策略为(其中,N代表该定时任务第N次运行):
avg_lios=(N-1)/N*T_VIP_SQL.avg_lios+1/N*C1.avg_lios
execs=(N-1)/N*T_VIP_SQL.execs+1/N*C1.execs
然后将C1结果集中sql_id被T_VIP_SQL表所包含的记录过滤掉,再与T_VIP_SQL取并集(union all),按照avg_lios*execs(逻辑读总和)降序排序取TOP300(前300个值);删除T_VIP_SQL中type=1的记录,将得到的TOP300结果插入T_VIP_SQL,设置这些记录的type=1。
(2)将C0按照sql_id列进行group by操作,记为结果集C1;
将T_VIP_SQL表中type=2的记录与C1进行左连接,更新T_VIP_SQL中的avg_lios、execs列,更新策略为:
avg_lios=(N-1)/N*T_VIP_SQL.avg_lios+1/N*C1.avg_lios
execs=(N-1)/N*T_VIP_SQL.execs+1/N*C1.execs
然后将C1结果集中sql_id被T_VIP_SQL表所包含的记录过滤掉,再与T_VIP_SQL取并集(union all),按照avg_lios降序排序取TOP300(前300个值);删除T_VIP_SQL中type=2的记录,将得到的TOP300结果插入T_VIP_SQL,设置这些记录的type=2。
(3)将C0按照sql_plan_hash_value列(sql_plan_hash_value,SQL语句执行计划hash值)进行group by操作,记为结果集C2;
将T_VIP_SQL表中type=3的记录与C1进行左连接,更新T_VIP_SQL中的avg_lios、execs列,更新策略为:
avg_lios=(N-1)/N*T_VIP_SQL.avg_lios+1/N*C1.avg_lios
execs=(N-1)/N*T_VIP_SQL.execs+1/N*C1.execs
然后将C2结果集中sql_plan_hash_value被T_VIP_SQL表所包含的记录过滤掉,再与T_VIP_SQL取并集(union all),按照avg_lios*execs(逻辑读总和)降序排序取TOP300(前300个值);删除T_VIP_SQL中type=3的记录,将得到的TOP300结果插入T_VIP_SQL,设置这些记录的type=3,sql_id=max(sql_id)。
步骤S204,判断是否需要进行全量分析,若需要进行全量分析,则执行步骤S205、若判断不需要进行全量分析,则执行步骤S206。
在可选的实施方式中,设置每周六需要进行全量分析,而周日至周五则进行增量分析。
步骤S205,调用STA分别对每条SQL进行分析,获取索引优化建议。
步骤S206,调用STA只对新增的SQL进行分析,获取索引优化建议。
步骤S207,将步骤S205和步骤S206中的索引优化建议存储到指定文件中,得到索引优化建议文件。
在本发明的示例性实施方式中,步骤S204至步骤S207可以通过下述crontab指令实现:
30 20***sh/home/db/oracle/script/index_analyze.sh 1>/dev/null 2>&1
该指令的脚本首先会判断当前时间是星期几,如果是星期六,则将T_VIP_SQL表中所有记录的b_turning列更新为FALSE。其中,b_turning用于标记SQL是否被分析,TRUE:是;FALSE:否,其默认值为FALSE。
然后分别取T_VIP_SQL表type=1,type=2,type=3的前20条记录,并根据plan_hash_value列的值进行去重,可选的,去重规则可以为:如果plan_hash_value相同,则保留execs最大的那条记录。
接着,根据b_turning不等于TRUE进行进一步过滤,得到最终需要被分析的SQL信息,待分析的SQL数量小于等于60条(如果是周六,待分析的SQL数量相对较多;如果是周日至周五,待分析的SQL数量相对较少)。
最后,对待分析的SQL进行分组,如每组6条SQL(最后一组≤6条),通过STA(SQLTurning Advisor)分别对每组SQL进行分析。分析完成之后,将所有SQL的优化建议输出到指定的文件中去。
步骤S208,判断每一条索引优化建议是否为重复索引,若为重复索引,则执行步骤S211,若不是重复索引,则执行步骤S209。
步骤S209,判断该索引优化建议是否为冗余索引,若为冗余索引,则执行步骤S211,若不是冗余索引,则执行步骤S210。
步骤S210,判断SQL语句根据该索引优化建议进行优化前后的优化效果是否明显,若优化效果不明显,则执行步骤S211若优化效果明显,则执行步骤S212。
步骤S211,去除该条索引优化建议。
需要说明的是,本领域技术人员应当理解,上述步骤S208至步骤S210的执行顺序并不是作为限定,而只是进行举例说明,实际上,只需要按照步骤S208至步骤S210中的条件对指定的文件中的索引优化建议进行筛选即可。
在本发明的示例性实施方式中,步骤S208至步骤S211可以通过索引筛选脚本实现:
首先,对步骤S207得到的索引优化建议文件进行解析,得到被分析SQL的sql_id、STA推荐的索引信息,优化前后SQL执行计划的COST值、执行计划信息。
其次,根据plan_hash_value值(SQL语句执行计划hash值)对T_VIP_SQL进行更新,将本次分析过的SQL在T_VIP_SQL表中的b_turning列的值改为TRUE。将这些索引信息与最近1个分析周期内(7天为1个分析周期,每周六20:30为每个分析周期的开始)相关表的索引建议、相关数据表上已有的索引进行分析,如果推荐的索引与其它SQL推荐的索引重复,或经分析该索引是其它推荐索引的冗余索引,则将该优化建议过滤掉。
然后,分析优化前后SQL执行计划COST值的变化,如果COST值下降不超过10%,则将该优化建议忽略。
步骤S212,输出索引优化建议及优化预期效果。
在可选的实施方式中,通过web平台,将优化建议文件在分析周期内经分析、筛选后得到的SQL信息、索引推荐信息、优化前后的执行计划信息在web平台上展示,方便相关人员查看。
采用本发明实施方式的上述方法,通过分析SQL语句获取对应的索引优化建议,并对解析索引优化建议得到的索引信息进行筛选,最终得到更加准确的用于优化SQL的索引信息,可以实现更加完备的SQL优化,并有效解决索引缺陷。
图3是根据本发明一种实施方式的基于Oracle数据库的索引处理系统的架构图。
如图3所示,所述系统包括:
SQL采集模块310,用于获取所述数据库中总开销排序在第一预定数值之前和平均执行开销高于第二预定阈值的SQL语句。
可选的,将获取到的符合上述要求的这类SQL语句确定为vip sql,并将这类SQL(vip sql)的信息及执行情况记录在相应的数据表中。其中,符合要求的这类SQL语句即前述数据库中总开销排序在第一预定数值之前、平均执行开销高于第二预定阈值的SQL语句。并且,第一预定数值、第二预定阈值的取值可以根据是操作人员手动选取,例如,第一预定数值选取为300,则选取在数据库中开销排序前300的SQL语句作为vip sql。
索引分析模块320,用于对所述SQL语句进行分析,得到所述SQL语句的索引优化建议。在可选的实施方式中,通过调用STA对SQL语句进行分析,以获取对应的索引优化建议。
在可选的实施方式中,每天进行一次增量SQL分析,每周进行一次全量SQL分析。其中,增量SQL分析是调用STA对数据库中新增加的SQL语句进行分析,以获取新增的SQL语句的索引优化建议;全量SQL分析是调用STA对数据库中的每条SQL语句进行分析,以获取每条SQL语句的索引优化建议。
可选的,每周六进行一次全量vip sql分析,周日至周五每天进行一次增量vipsql分析,得到vip sql对应的优化建议,并将分析得到的优化建议输出到指定的文件中。其中,全量vip sql分析和增量vip sql分析的时间可以设置为固定,也可以根据实际情况修改。由此,可以避免因为SQL分析消耗太多CPU、IO资源,以保障应用程序的正常运行。
解析模块330,用于解析所述索引优化建议得到所述SQL语句的相关信息,所述SQL语句的相关信息包括索引信息。在可选的实施方式中,SQL语句的相关信息可以包括但不限于下述几种:SQL语句、SQL语句对应的索引信息、SQL语句优化前后执行计划COST值、执行计划信息。其中,SQL语句包含sql_id(SQL语句文本信息的hash值),SQL语句对应的索引信息为STA推荐的索引信息。
索引筛选模块340,用于对所述索引信息进行筛选,得到筛选后的索引信息。在可选的实施方式中,对索引信息进行筛选可以包括:排除索引信息中重复的索引信息、冗余的索引信息、优化前后所述SQL执行计划COST值的下降值不高于第三预定阈值的索引信息。示例性的,忽略COST值下降不超过10%的索引信息。由此,可以过滤掉重复索引信息、冗余索引信息,以及优化效果不明显的索引信息,可以得到更加准确的优化信息,以对SQL语句进行优化,从而提高业务性能。
信息展示模块350,用于根据所述筛选后的索引信息获取所述筛选后的索引信息对应的待优化SQL语句,并输出所述待优化SQL语句、所述筛选后的索引信息、所述待优化SQL语句优化前后的执行情况。
在可选的实施方式中,信息展示模块350可以将被分析和筛选后的SQL语句的相关信息存储在指定文件中,通过web平台,读取存储有所述被分析和筛选后的SQL语句的相关信息的指定文件,从而将分析周期内经分析、筛选后得到的SQL信息、索引推荐信息、优化前后的执行计划信息在web平台上展示,方便DBA(数据库管理人员)或开发人员等相关人员查看及后续处理。
采用本发明实施方式的上述系统,通过分析对程序性能影响较大的各类SQL语句以获取对应的索引优化建议,并对解析索引优化建议得到的索引信息进行筛选,最终得到更加准确的用于优化SQL的索引信息,可以实现更加完备的SQL优化,有效避免因索引不合适引起的业务性能问题,从而提高系统整体性能。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施方式或者实施方式的某些部分所述的方法。
对应的,本发明实施方式还提供一种计算机可读存储介质,其上存储有计算机可读指令或程序,所述计算机可读指令或程序被处理器执行时,使得计算机执行如下操作:所述操作包括如上任意一种实施方式所述索引处理方法所包含的步骤,在此不再赘述。其中,所述存储介质可以包括:例如,光盘、硬盘、软盘、闪存、磁带等。
另外,本发明实施方式还提供一种包括存储器和处理器的计算机设备,所述存储器用于存储一条或多条计算机指令或程序,其中,所述一条或多条计算机指令或程序被所述处理器执行时能够实现如上任意一种实施方式所述的索引处理方法。所述计算机设备可以是,例如,服务器、台式计算机、笔记本计算机、平板电脑等。
最后应说明的是:以上实施方式仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施方式对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施方式技术方案的精神和范围。因此本发明的保护范围应以权利要求为准。
Claims (12)
1.一种基于Oracle数据库的索引处理方法,其特征在于,所述索引处理方法包括:
获取所述数据库中总开销排序在第一预定数值之前和平均执行开销高于第二预定阈值的结构化查询语言SQL语句;
对所述SQL语句进行分析,得到所述SQL语句的索引优化建议;
解析所述索引优化建议得到所述SQL语句的相关信息,所述SQL语句的相关信息包括索引信息;
对所述索引信息进行筛选,得到筛选后的索引信息。
2.如权利要求1所述的索引处理方法,其特征在于,所述SQL语句的相关信息还包括:所述SQL语句、所述SQL语句优化前后执行计划到达目的地址的代价COST值、执行计划信息。
3.如权利要求2所述的索引处理方法,其特征在于,对所述索引信息进行筛选包括:
排除所述索引信息中重复的索引信息、冗余的索引信息、优化前后所述SQL执行计划COST值的下降值不高于第三预定阈值的索引信息。
4.如权利要求3所述的索引处理方法,其特征在于,对所述SQL语句进行分析包括:
每天进行一次增量SQL分析;
每周进行一次全量SQL分析。
5.如权利要求4所述的索引处理方法,其特征在于,所述索引处理方法还包括:
根据所述筛选后的索引信息获取所述筛选后的索引信息对应的待优化SQL语句;
输出所述待优化SQL语句、所述筛选后的索引信息、所述待优化SQL语句优化前后的执行情况。
6.一种基于Oracle数据库的索引处理系统,其特征在于,所述索引处理系统包括:
SQL采集模块,用于获取所述数据库中总开销排序在第一预定数值之前和平均执行开销高于第二预定阈值的SQL语句;
索引分析模块,用于对所述SQL语句进行分析,得到所述SQL语句的索引优化建议;
解析模块,用于解析所述索引优化建议得到所述SQL语句的相关信息,所述SQL语句的相关信息包括索引信息;
索引筛选模块,用于对所述索引信息进行筛选,得到筛选后的索引信息。
7.如权利要求6所述的索引处理系统,其特征在于,所述SQL语句的相关信息还包括:所述SQL语句、所述SQL语句优化前后执行计划COST值、执行计划信息。
8.如权利要求7所述的索引处理系统,其特征在于,对所述索引信息进行筛选包括:
排除所述索引信息中重复的索引信息、冗余的索引信息、优化前后所述SQL执行计划COST值的下降值不高于第三预定阈值的索引信息。
9.如权利要求8所述的索引处理系统,其特征在于,对所述SQL语句进行分析包括:
每天进行一次增量SQL分析;
每周进行一次全量SQL分析。
10.如权利要求9所述的索引处理系统,其特征在于,所述索引处理系统还包括信息展示模块,用于执行下述操作:
根据所述筛选后的索引信息获取所述筛选后的索引信息对应的待优化SQL语句;
输出所述待优化SQL语句、所述筛选后的索引信息、所述待优化SQL语句优化前后的执行情况。
11.一种计算机存储介质,所述计算机存储介质储存计算机软件指令,其特征在于,所述计算机软件指令由处理器执行以实现如权利要求1-5中任一项所述的索引处理方法。
12.一种计算机设备,其包括存储器和处理器;
其特征在于,所述存储器用于存储一条或多条计算机指令,所述处理器执行所述一条或多条计算机指令以实现如权利要求1-5中任一项所述的索引处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010448340.6A CN111723091B (zh) | 2020-05-25 | 2020-05-25 | 基于Oracle数据库的索引处理方法、系统、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010448340.6A CN111723091B (zh) | 2020-05-25 | 2020-05-25 | 基于Oracle数据库的索引处理方法、系统、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111723091A true CN111723091A (zh) | 2020-09-29 |
CN111723091B CN111723091B (zh) | 2023-08-11 |
Family
ID=72564993
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010448340.6A Active CN111723091B (zh) | 2020-05-25 | 2020-05-25 | 基于Oracle数据库的索引处理方法、系统、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111723091B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347100A (zh) * | 2020-10-27 | 2021-02-09 | 杭州安恒信息技术股份有限公司 | 数据库索引优化方法、装置、计算机设备和存储介质 |
CN112559554A (zh) * | 2020-12-24 | 2021-03-26 | 北京百家科技集团有限公司 | 一种查询语句优化方法及装置 |
CN113268494A (zh) * | 2021-05-24 | 2021-08-17 | 中国联合网络通信集团有限公司 | 待优化数据库语句处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5918225A (en) * | 1993-04-16 | 1999-06-29 | Sybase, Inc. | SQL-based database system with improved indexing methodology |
CN101727455A (zh) * | 2008-10-24 | 2010-06-09 | 国际商业机器公司 | 优化数据库顾问程序的配置参数的方法及装置 |
US20160110393A1 (en) * | 2014-10-16 | 2016-04-21 | International Business Machines Corporation | Database indexes |
CN107247811A (zh) * | 2017-07-21 | 2017-10-13 | 中国联合网络通信集团有限公司 | 基于Oracle数据库的SQL语句性能优化方法及装置 |
CN108509530A (zh) * | 2018-03-14 | 2018-09-07 | 武汉斗鱼网络科技有限公司 | 一种MySQL慢查询语句自动优化方法、计算机设备和存储介质 |
-
2020
- 2020-05-25 CN CN202010448340.6A patent/CN111723091B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5918225A (en) * | 1993-04-16 | 1999-06-29 | Sybase, Inc. | SQL-based database system with improved indexing methodology |
CN101727455A (zh) * | 2008-10-24 | 2010-06-09 | 国际商业机器公司 | 优化数据库顾问程序的配置参数的方法及装置 |
US20160110393A1 (en) * | 2014-10-16 | 2016-04-21 | International Business Machines Corporation | Database indexes |
CN107247811A (zh) * | 2017-07-21 | 2017-10-13 | 中国联合网络通信集团有限公司 | 基于Oracle数据库的SQL语句性能优化方法及装置 |
CN108509530A (zh) * | 2018-03-14 | 2018-09-07 | 武汉斗鱼网络科技有限公司 | 一种MySQL慢查询语句自动优化方法、计算机设备和存储介质 |
Non-Patent Citations (2)
Title |
---|
岳彩云等: "基于ORACLE数据库的SQL性能优化", 《电脑知识与技术》 * |
林伟: "Oracle数据库索引优化方法探析", 《信息与电脑(理论版)》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347100A (zh) * | 2020-10-27 | 2021-02-09 | 杭州安恒信息技术股份有限公司 | 数据库索引优化方法、装置、计算机设备和存储介质 |
CN112347100B (zh) * | 2020-10-27 | 2024-03-26 | 杭州安恒信息技术股份有限公司 | 数据库索引优化方法、装置、计算机设备和存储介质 |
CN112559554A (zh) * | 2020-12-24 | 2021-03-26 | 北京百家科技集团有限公司 | 一种查询语句优化方法及装置 |
CN112559554B (zh) * | 2020-12-24 | 2024-01-26 | 北京百家科技集团有限公司 | 一种查询语句优化方法及装置 |
CN113268494A (zh) * | 2021-05-24 | 2021-08-17 | 中国联合网络通信集团有限公司 | 待优化数据库语句处理方法及装置 |
CN113268494B (zh) * | 2021-05-24 | 2023-06-02 | 中国联合网络通信集团有限公司 | 待优化数据库语句处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111723091B (zh) | 2023-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11249981B2 (en) | Data quality analysis | |
CN103390066B (zh) | 一种数据库全局性自动化优化预警装置及其处理方法 | |
CN111723091B (zh) | 基于Oracle数据库的索引处理方法、系统、设备和存储介质 | |
US20080250057A1 (en) | Data Table Management System and Methods Useful Therefor | |
US11520761B2 (en) | Cloud-based platform instrumentation and monitoring system for maintenance of user-configured programs | |
US9244959B2 (en) | Comparing database performance without benchmark workloads | |
US11599539B2 (en) | Column lineage and metadata propagation | |
WO2015167466A1 (en) | Query plan post optimization analysis and reoptimization | |
US11385898B2 (en) | Task orchestration method for data processing, orchestrator, device and readable storage medium | |
CN117271481B (zh) | 数据库自动优化方法及设备 | |
CN116303494A (zh) | 基于分布式数据库对证券核心交易系统的海量多源异构数据进行一致性分析的系统及其方法 | |
CN112559641A (zh) | 拉链表的处理方法及装置、可读存储介质及电子设备 | |
US11630818B2 (en) | Iterative performance analysis with interval expansion | |
JP7507602B2 (ja) | データ品質分析 | |
Mourlin et al. | Distributed Search on a Large Amount of Log Data | |
CN116842037A (zh) | 数据库的慢sql语句分析方法、装置、设备及介质 | |
CN113821320A (zh) | 一种分布式的数据仓库工作流调度方法 | |
CN115129749A (zh) | 一种复杂查询优化方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |